CynthiaHolmes 2014-12-30 10:30 采纳率: 100%
浏览 2042
已采纳

图形化编程实现改进的欧拉格式和龙格库塔格式。这里有个C语言的,想改写成C#。

1)改进欧拉法求解常微分方程的初值问题
#include
float func(float x,float y)
{ return(y-x);
}

float euler(float x0,float xn,float y0,int N)
{ float x,y,yp,yc,h;
int i;
x=x0;
y=y0;
h=(xn-x0)/(float)N;

for(i=1;i<=N;i++)

{ yp=y+h*func(x,y);
x=x0+i*h;
yc=y+h*func(x,yp);
y=(yp+yc)/2.0;
}
return(y);
}
main()
{ float x0,xn,y0,e;
int n;

printf("\ninput n:\n ");

scanf("%d",&n);
printf("input x0,xn:\n ");

scanf("%f,%f",&x0,&xn);
printf("input y0:\n ");

scanf("%f",&y0);
e=euler(x0,xn,y0,n);
printf("y(%f)=%6.4f",y0,e);
}

input n:
20
input x0,xn:
1,6
input y0:
2
y(2.000000)=7.0000Press any key to continue
(2)四阶龙格—库塔法
#include
float func(float x,float y)
{ return(x-y);
}

float runge_kutta(float x0,float xn,float y0,int N)
{ float x,y,y1,y2,h,xh;
float d1,d2,d3,d4;
int i;
x=x0;
y=y0;
h=(xn-x0)/(float)N;

for(i=1;i<=N;i++)

{ xh=x+h/2;
d1=func(x,y);
d2=func(xh,y+h*d1/2.0);
d3=func(xh,y+h*d2/2.0);
d4=func(xh,y+h*d3);
y=y+h*(d1+2*d2+2*d3+d4)/6.0;
x=x0+i*h; }
return(y);
}
main()
{ float x0,xn,y0,e;
int N;
printf("\ninput n:\n ");

scanf("%d",&N);
printf("input x0,xn:\n ");

scanf("%f,%f",&x0,&xn);
printf("input y0:\n ");

scanf("%f",&y0);
e=runge_kutta(x0,xn,y0,N);
printf("y(%f)=%8.6f",y0,e);
}

input n:
10
input x0,xn:
1,2
input y0:
5
y(5.000000)=2.833863Press any key to continue

  • 写回答

2条回答 默认 最新

  • csny2014 2014-12-30 12:06
    关注

    把代码硬粘过去,然后哪里有错改哪里,C,PHP,Java基本都能这么干

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?