-1
我对C中的编码颇为陌生。 我试图以一种非常简单的方式将欧拉方法应用于一阶ODE,既作为迭代也作为递归函数。我不能把递归实现放在一起。欧拉方法递归
#include <stdio.h>
#include <stdlib.h>
float a,b,x,y,h,b;
float fun(float x,float y)
{
float f;
f=x+y;
return f;
}
float euler (float x, float y, float h, float t){
float k;
while(x<=b) {
y=y+h*fun(x,y);;
x=x+h;
printf("%0.3f\t%0.3f\n",x,y);
}
};
float euler_rec (float x, float y, float h, float b){
if (x<=b) {
y=euler_rec(x, y, h, b)+h*fun(x,y);
}
else {
printf("%0.3f\t%0.3f\n",x,y);
}
};
int main()
{
printf("\nEnter x0,y0,h,xn: ");
scanf("%f%f%f%f",&x,&y,&h,&b);
printf("\n x\t y\n");
euler(x, y, h, b);
printf ("rec\n");
euler_rec(x, y, h, b);
return 0;
}
条件'X == x0'具有非常低的概率,由于浮点错误而实际上打,即使理论上所有的拟合。如果你不假设'h'均匀分配到'x-x0',那么你会更加健壮。 – LutzL
这里我得到了起始值x0,y0。 'float euler_rec(float x0,float y0,float h,float x){' 'float yprev,y;' 'y = y0;' 'if if(x> x0){' 'yprev = euler_rec(x0 ,y0,h,xh);' 'y = yprev + h * f(xh,yprev);' 'x = xh; '}'' 其他{'' 的printf( “%0.3f \ T%0.3f \ n”,X,Y);'' }'' }' –
你注意到你正在做什么用计算值“y”?什么是回报价值? – LutzL