图形化编程实现改进的欧拉格式和龙格库塔格式。这里有个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
把代码硬粘过去,然后哪里有错改哪里,C,PHP,Java基本都能这么干
如果 C 语言的实现中没有用到特殊的 C 函数,如图形图像之类的函数,转换成 C# 应该问题不大。
可惜偶不会C#啊!