常微分方程

本文介绍了如何在C++中使用Euler方法求解初值问题,以及对其进行了改进,通过`modEuler`函数实现更精确的数值积分。给出了一个具体的例子,计算函数f(x,y)=3x-2y^2-12在给定区间内的解。
摘要由CSDN通过智能技术生成

Euler 方法

#define MAXSIZE 50
4 double f(double x,double y);
6 void main(void) {
7 double a,b,h,x[MAXSIZE],y[MAXSIZE];
8 long i,n;
9 printf(”\n请输入求解区间a,b:”);
10 scanf(”%lf,%lf”,&a,&b);
11 printf(”\n请输入步长h:”);
12 scanf(”%lf”,&h);
13 n=(long)((b−a)/h);
14 x[0]=a;
16 printf(”\n请输入起点x[0]=%lf处的纵坐标y[0]:”,x[0]);
17 scanf(”%lf”,&y[0]);
18 for(i=0; i<n; i++) {
19 x[i+1]=x[i]+h;
20 y[i+1]=y[i]+h*f(x[i],y[i]);
21 }
23 printf(”\n计算结果为:”);
24
25 for(i=0; i<=n; i++)
26 printf(”\nx[%ld]=%lf,y[%ld]=%lf”,i,x[i],i,y[i]);
27 }
29 double f(double x,double y) {
30 return y − 2*x/y; /∗计算并返回函数值f(x,y)∗/
31 }

改进的 Euler 格式

#define N 10
6 void modEuler(float (*f1)(float,float),float x0,float y0,float xn,int n) {
7 int i;
8 float yp,yc,x=x0,y=y0,h=(xn−x0)/n;
9 // cout<<”x[0]=”<<x<<’\t’<<”y[0]”<<y<<endl;
10 for(i=1; i<=n; i++) {
11 yp=y+h*
f1(x,y);
12 x=x0+i*h;
13 yc=y+h*f1(x,yp);
14 y=(yp+yc)/2.0;
15 cout<<”x[”<<i<<”]=”<<x<<” y[”<<i<<”]=”<<y<<endl;
16 }
17 }
18 void main() {
20 float xn=0.0,x0=−1.0,y0=3.0;
21 float f1(float ,float);
22 modEuler(f1,x0,y0,xn,N);
23 }
24 float f1(float x,float y) {
25 return 3*x−2*y*y−12;
26 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值