Code:
#include <stdio.h>#include <stdlib.h>
#include <math.h>
#define g 9.81
#define PI 4.*atan(1.)
#define MAXN 2
double t0, alfa0, omega0, R, t, NS;
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.;
}
double fun(double x0, double *y0, double *F)
{
F[0]=y0[1];
F[1]=g*sin(y0[0])/R;
}
int main()
{
double m=1;
R=0.5;
alfa0=2.;
omega0=(1./9.)*PI*R;
t=0.1;
NS=100;
double F[2];
double y0[2]={alfa0,omega0};
double x0=0.;
double y1[2];
double ss;
int p,j;
FILE *f;
f=fopen("Results.txt", "wt");
fprintf(f,"t\talfa\tomega\n");
fprintf(f,"%lg\t%lg\t%lg\t%lg\n", x0,y0[0],y0[1],m*pow(y0[1]*R,2.)/2.+m*g*R*(1.-cos(y0[0])));
printf("t\talfa\tomega\n");
printf("%lf\t\t%lf\t\t%lf\n",x0,y0[0],y0[1]);
x0+=t;
vrk4(x0,y0,t,2,fun,y1);
printf("%lf\t\t%lf\t\t%lf\n",x0,y1[0],y1[1]);
y0[0]=y1[0];
y0[1]=y1[1];
x0+=t;
vrk4(x0,y0,t,2,fun,y1);
printf("%lf\t\t%lf\t\t%lf\n",x0,y1[0],y1[1]);
// for(p=0;p<NS;p++)
// {
// ss=1.-cos(y1[0]);
// vrk4(x0,y0,t,2,fun,y1);
//y0[0]=y1[0];
//y0[1]=y1[1];
//
//
// // for(j=0;j<2;j++)
// // {
// // y0[j]=y1[j];
// // }
// x0+=t;
// printf("%lg\t%lg\t%lg\n",x0,y1[0],y1[1]);
// fprintf(f,"%lg\t%lg\t%lg\t%lg\n", x0,y1[0],y1[1],m*pow(y1[1]*R,2.)/2.+m*g*R*(ss));
// }
fclose(f);
}