witam
mam maly problem - otoz dostalem do rozwiazania takie oto zadanie:
http://img74.imageshack.us/my.php?image=dsc00044lh8.jpg
no wiec wzialem sie do roboty i splodzilem taki oto program:
#include <stdio.h>
#include <math.h>
#define MAXN 10
void vrk4( double x0,double y0[],double h,int n,void (*fun)(double,double*,double*),double y1[]);
void fun(double t,double y[],double f[]);
void main()
{
double m,c,a,b,x0,v0,t0,tk,h,y[2],y1[2];
t0=0.0;
printf("Podaj mase ciala\n");
scanf("%lf",&m);
printf("Podaj wspolczynnik c\n");
scanf("%lf",&c);
printf("Podaj wspolczynnik k1\n");
scanf("%lf",&a);
printf("Podaj wspolczynnik k2\n");
scanf("%lf",&b);
printf("Podaj polozenie poczatkowe ciala\n");
scanf("%lf",&x0);
if(x0==0)
printf("Wartosc sprzeczna z warunkami poczatkowymi\n");
else
{
printf("Podaj predkosc poczatkowa ciala\n");
scanf("%lf",&v0);
if(v0==0)
printf("Wartosc sprzeczna z warunkami poczatkowymi\n");
else
{
printf("Podaj krok calkowania\n");
scanf("%lf",&h);
printf("Podaj czas tk\n\n");
scanf("%lf",&tk);
y[0]=x0;
y[1]=v0;
for(t0;t0<=tk;t0+=h)
{
vrk4(t0,y,h,2,fun,y1);
printf("t = %lf\t x = %lf\t v=%lf\n",t0,y[0],y[1]);
y[0]=y1[0];
y[1]=y1[1];
}
}
}
getch();
}
void fun(double t, double y[], double f[])
{
double m,c,a,b;
f[0]=y[1];
f[1]=((y[0]/fabs(y[0]))*(-a*(1+b*y[0]*y[0]))-c*y[1])/m;
}
void vrk4( double x0, double y0[], double h, int n, void (*fun)(double, double*, double*), double y1[] )
{
int i;
double k1[MAXN], k2[MAXN], k3[MAXN], k4[MAXN];
double ytmp[MAXN];
fun( x0, y0, k1);
for ( i=0; i<n; ++i)
{
k1[i] *= h;
ytmp[i] = y0[i] + k1[i]/2.0;
}
fun( x0+h/2.0, ytmp, k2);
for ( i=0; i<n; ++i)
{
k2[i] *= h;
ytmp[i] = y0[i] + k2[i]/2.0;
}
fun( x0+h/2.0, ytmp, k3);
for ( i=0; i<n; ++i)
{
k3[i] *= h;
ytmp[i] = y0[i] + k3[i];
}
fun( x0+h, ytmp, k4);
for ( i=0; i<n; ++i)
k4[i] *= h;
for ( i=0; i<n; ++i)
y1[i] = y0[i] + (k1[i] + 2.*k2[i] + 2.*k3[i] + k4[i])/6.;
}
niestety cos jest nie tak, bo:
- ta sprezyna nie zachowuje sie tu jak sprezyna
2.bez wzgledu na to, jakie dane wprowadzi sie z klawiatury, program i tak wyswietla identyczne wyniki (wziete zreszta z kosmosu)
czy ktos moze mi jakos z tym pomoc? tzn powiedziec gdzie cos zrobilem zle i jak to naprawic, zeby ten program dzialal jak powinien ;>
z gory dziekuje za pomoc :)