分别用改进的欧拉法和四阶龙格-库塔公式求解微分方程初值问题

分别用改进的欧拉法和四阶龙格-库塔公式求解微分方程初值问题
(1) Y'=Y-2X/Y,Y(0)=1, X=[0,1],H=0.1
(2) Y'=X2+Y2.Y(0)=0, X=[0,1] H=0.1 注释;X2为X的平方,Y2为Y的平方,先求解,

然后用C语音编程的帮我编程一下

求解就自己算吧,程序如下,其中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");
}

我没写什么注释,算法就参考一下书本好了,有什么不懂的请追问。
温馨提示:答案为网友推荐,仅供参考
相似回答