实验四 常微分方程初值问题数值解法

2026/1/24 17:17:40

数值分析实验实验指导书四

理学院实验中心 数学专业实验室编写

实验四 常微分方程初值问题数值解法

【实验类型】验证性 【实验学时】2 【实验内容】

科学计算中经常遇到微分方程(组)初值问题,需要利用Euler法,改进Euler法,Rung-Kutta方法求其数值解,诸如以下问题:

??4x?xy?y?y??y(0)?1?0?x?2

分别取h=0.1,0.2,0.4时数值解。 初值问题的精确解y?4?3e?x。

2【实验前的预备知识】

1、 熟悉各种初值问题的算法;

2、 明确各种算法的精度与所选步长有密切关系; 3、 通过计算更加了解各种算法的优越性。 【实验方法或步骤】

1、 根据初值问题数值算法,编程计算;

2、 试分别取不同步长,考察某节点xj处数值解的误差变化情况; 3、 试用不同算法求解某初值问题,结果有何异常; 4、 分析各个算法的优缺点。 【Euler方法】

#include

#include /*y1=f(x,y)*/

float f(float x,float y)

{return(4*x / y-x*y);}

void Euler(float x0,float xn,float y0,int n) {int i;

float x=x0,y=y0,h=(xn-x0)/n; printf(\ for(i=1;i<=n;i++) {y=y+h*f(x,y); x=x0+i*h; printf(\ }} main() {int i,n; float x0,xn,y0; printf(\ scanf(\ printf(\ scanf(\ do {printf(\ scanf(\ } while(n<=1); Euler(x0,xn,y0,n); scanf(\

【Rung-Kutta方法】

#include #include #define f(x,y)(y-2*x/y) int main() {

int m; int i;

double a,b,y0; double xn,yn,yn1; double k1,k2,k3,k4; double h;

printf(\scanf(\

printf(\scanf(\

printf(\scanf(\if(m<=0) {

printf(\return 1; }

h=(b-a)/m; xn=a;yn=y0;

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

k1=f(xn,yn);

k2=f((xn+h/2),(yn+h*k1/2)); k3=f((xn+h/2),(yn+h*k2/2)); k4=f((xn+h),(yn+h*k3));

yn1=yn+h/6*(k1+2*k2+2*k3+k4);

xn+=h;

printf(\yn=yn1; }

scanf(\


实验四 常微分方程初值问题数值解法.doc 将本文的Word文档下载到电脑
搜索更多关于: 实验四 常微分方程初值问题数值解法 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219