70,023
社区成员




//龙格-库塔法
#include<stdio.h>
#include<math.h>
#define PI 3.1415
#define h 0.1
#define l -5
#define m 8
#define o -3
//指代f(t,u,v)函数
double funcf(double t,double u,double v){
return v;
}
//指代g(t,u,v)函数
double funcg(double t,double u,double v){
return -(l*u+m*u*u*u+o*u*u*u*u*u);
}
void Runge(){
int n=0;
double k1,k2,k3,k4,l1,l2,l3,l4;
double u[11],v[11],t[10],y[10];
u[0]=sqrt(1+1/sin(1)),v[0]=(-cos(1)/sin(1))*sqrt(1+1/sin(1));
printf("%10s %10s %10s %10s\n","t的值","近似解","精确解","误差");
for(n=0;n<3;n++){
//定义步长
t[n]=h*n;
//精确解
//y[n]=sin(PI*t[n]);
y[n]=sqrt(1+1/sin(2*t[n]+1));
/* printf("%10f\n",y[n]);
printf("%10f %10f %10f %10f\n",t[n],u[n],y[n],fabs(u[n]-y[n]));*/
k1=funcf(t[n],u[n],v[n]);
l1=funcg(t[n],u[n],v[n]);
k2=funcf(t[n]+h/2,u[n]+h*k1/2,v[n]+h*k1/2);
l2=funcg(t[n]+h/2,u[n]+h*l1/2,v[n]+h*l1/2);
k3=funcf(t[n]+h/2,u[n]+h*k2/2,v[n]+h*k2/2);
l3=funcg(t[n]+h/2,u[n]+h*l2/2,v[n]+h*l2/2);
k4=funcf(t[n]+h,u[n]+h*k3,v[n]+h*k3);
l4=funcg(t[n]+h,u[n]+h*l3,v[n]+h*l3);
printf("%10f %10f %10f %10f\n",l1,l2,l3,l4);
u[n+1]=u[n]+(h/6)*(k1+2*k2+2*k3+k4);
v[n+1]=v[n]+(h/6)*(l1+2*l2+2*l3+l4);
}
}
void main(){
Runge();
}