求解就自己算吧,程序如下,其中RK4与改进欧拉法分别写成一个模块,方便阅读:
#include <stdio.h>
#include <stdlib.h>
double f1(double x,double y) {//定义方程1
return (y-2*x/y);
}
double f2(double x,double y) {//定义方程2
return (x*x+y*y);
}
double RK4(double xn,double yn) {
double h=0.1,k1=0,k2=0,k3=0,k4=0,d=1,h2=h/2;//RK4解方程2
printf(" x2 y2\n");
printf("%3.1lf%10.6lf\n",xn,yn);
while(xn<=d) {
k1=f2(xn,yn);
xn+=h2;
k2=f2(xn,yn+h2*k1);
k3=f2(xn,yn+h2*k2);
xn+=h2;
k4=f2(xn,yn+h*k3);
yn+=h/6*(k1+2*k2+2*k3+k4);
printf("%3.1lf%10.6lf\n",xn,yn);
}
return 1;
}
double ELR(double xn,double yn){
double h=0.1,yp,yc,d=1;//改进欧拉法解方程1
printf(" x1 y1\n");
printf("%3.1lf%10.6lf\n",xn,yn);
while(xn<=d) {
yp=yn+h*f1(xn,yn);
xn+=h;
yc=yn+h*f1(xn,yp);
yn=(yc+yp)/2.0;
printf("%3.1lf%10.6lf\n",xn,yn);
}
return 1;
}
void main() {
ELR(0.0,1.0);
RK4(0.0,0.0);
system("pause");
}
我没写什么注释,算法就参考一下书本好了,有什么不懂的请追问。
温馨提示:答案为网友推荐,仅供参考