四阶R-K求常微分方程初值的C语言编程
发布网友
发布时间:2022-05-27 15:40
我来回答
共2个回答
热心网友
时间:2023-10-31 12:58
#include<stdio.h>
/*
针对你给的问题
dy/dt=t/y
y(2.0)=1 2.0<=t<=2.6 h=0.2 怎么输入、输出呢?
*/
double f(double x,double y)//这是你给的问题的函数t/y
{
return x/y;
}
void Runge_Kutta4(double y0,double x0,double h,double b)//四阶的Runge_Kutta法
{
double y1;double k[4];int i=0;
while (1){
i++;
k[0]=f(x0,y0);
k[1]=f(x0+h/2.0,y0+h*k[0]/2.0);
k[2]=f(x0+h/2.0,y0+h*k[1]/2.0);
k[3]=f(x0+h,y0+h*k[2]);
y1=y0+h*(k[0]+2*k[1]+2*k[2]+k[3])/6.0;
printf("%d\t%f\t%f\n",i,x0+h,y1);//这里是C语言的输出
//cout<<i<<'\t'<<x0+h<<'\t'<<y1<<'\n'; 这是C++语言的输出
if(x0+2*h>=b)break;
y0=y1;x0=x0+h;
}
}
void main()
{
Runge_Kutta4(1.0,2.0,0.2,2.6);
}
结果:
1 2.200000 1.356505
2 2.400000 1.661361
全改C语言了 如有不明再问我吧
热心网友
时间:2023-10-31 12:58
#include<stdio.h>
/*
针对你给的问题
dy/dt=t/y
y(2.0)=1
2.0<=t<=2.6
h=0.2
怎么输入、输出呢?
*/
double
f(double
x,double
y)//这是你给的问题的函数t/y
{
return
x/y;
}
void
Runge_Kutta4(double
y0,double
x0,double
h,double
b)//四阶的Runge_Kutta法
{
double
y1;double
k[4];int
i=0;
while
(1){
i++;
k[0]=f(x0,y0);
k[1]=f(x0+h/2.0,y0+h*k[0]/2.0);
k[2]=f(x0+h/2.0,y0+h*k[1]/2.0);
k[3]=f(x0+h,y0+h*k[2]);
y1=y0+h*(k[0]+2*k[1]+2*k[2]+k[3])/6.0;
printf("%d
%f
%f
",i,x0+h,y1);//这里是C语言的输出
//cout<<i<<'
'<<x0+h<<'
'<<y1<<'
';
这是C++语言的输出
if(x0+2*h>=b)break;
y0=y1;x0=x0+h;
}
}
void
main()
{
Runge_Kutta4(1.0,2.0,0.2,2.6);
}
结果:
1
2.200000
1.356505
2
2.400000
1.661361
全改C语言了
如有不明再问我吧