欧拉编程c语言作业数值分析,数值作业:改进欧拉法求常微分方程C语言代码

首先给出改进的Euler法的公式:

001c30afe1e3e2a3d86013bcffd07bdc.png

然后对算法进行分析,在数值书上171面上的例3,题目是{ y'=-y+x+1, y(0)=1}第一个是变化率:dy/dx,取h=0.1,计算至x=0.5:

书上给出的解答: 显然:  f(x,y)=x-y+1, a=x0=0,b=0.5,y0=1,n=5.  然而我完全看不懂怎么算出来的,总之这是根据已知条件推出隐藏条件,然后触发主任务完成的条件.然后把隐藏条件a,,b,y0,n,输入,对着公式转化成算法,那么主线任务就完成了.下面给出代码:

/********************************************

> File Name: Euler.c

> Author:chendiyang

> School:WUST_CST_1501班

> Myblog:www.chendsir.com

> Mail:1441353519@qq.com

> Created Time: 2017年05月7日 星期日 17时22分08秒

************************************************************************/

#include #include double f(double x, double y) //dy/dx=f(x,y),书上171面y'=-y+x+1

{

return -y + x + 1;

}

int main()

{

int m;

int i;

double a, b, y0;

double xn, yn, xnl, ynl, ynlb;

double h, tmp;

printf("请输入区间的上下限a,b的值:");

scanf("%lf%lf", &a, &b);

printf("请输入y0的值:");

scanf("%lf", &y0);

printf("请输入m来把区间分成m等份:");

scanf("%d", &m);

if (m <= 0)

{

printf("请输入大于1的数\n");

return 1;

}

h = (b - a) / m;

xn = a;

yn = y0;

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

{

xnl = xn + h;

ynlb = yn + h * f(xn, yn);

ynl = yn + h / 2 * (f(xn, yn) + f(xnl, ynlb));

printf("x%d=%lf,y%d=%lf\n", i, xnl, i, ynl);

xn = xnl;

yn = ynl;

}

return 0;

}运行结果:

1af4b00353c9ca222ddcadf1ca3cf2b4.png

再翻到书的172面的表5-1对下答案,可见yk的值和我这个是对的,精确度都完全相同..这题目就OK了.另外在b站看埃罗芒阿老师的时候,又被打团刷屏了..肥宅做错了什么..身为DNF的8年老玩家,不得不穿上我的5星西装打团了,我已经准备好打团了,团长! gogogo!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值