利用欧拉方法求常微分方程近似数值解,欧拉微分方程,欧拉运动微分方程,欧拉平衡微分方程,欧拉型微分方程,微分方程的欧拉算法,微分方程的欧拉解法,欧拉型常微分方程,偏微分方程数值解,微分方程数值解法
利用欧拉方法求常微分方程近似数值解
实 验 报 告
实验名称
(教师填写)
利用欧拉方法求常微分方程近似数值解
实验目的
(教师填写)1.学会利用欧拉方法求微分方程的数值解。
2.观察欧拉显式方法的收敛性。
3.观察欧拉显式方法的数值不稳定性。
实验题目
(教师填写)完成第一题。(第二题选作。)
1.取用欧拉显式方法求解一阶线性微分方程:
计算到并与精确解比较。
2.取用欧拉显式方法求解线性微分方程:
并画出曲线。用改进的欧拉方法(或欧拉隐式方法)重复求解上述问题。试解释你所观察到的现象。
实验报告要求
(教师填写)
实验内容与步骤
(学生填写)欧拉法
#include"stdio.h"
#include"math.h"
void main()
{
int i;
double y,h,x,m,z;
printf("输入步长h");
scanf("%f",&h);
printf("h=%f\n",h);
m=1.0/h;
y=1.0;
x=1.0;
for(i=0;i
{
y=y+h*(x+i*h)*pow(y,1.0/3.0);
}
printf("y(2)=%f\n",y);
z=pow((2*2.0+2)/3.0,3.0/2.0);
printf("精确解");
printf("y(2)=%f",z);
}
改进欧拉法
#include"stdio.h"
#include"math.h"
void main()
{
int i;
double y,y0,z,h,x,m;
printf("输入步长h");
scanf("%f",&h);
printf("h=%f\n",h);
m=1.0/h;
y=1.0;
x=1.0;
for(i=0;i
{
y0=y+h*(x+i*h)*pow(y,1.0/3.0);
y=y+h/2*((x+i*h)*pow(y,1.0/3.0)+(x+i*h+h)*pow(y0,1.0/3.0));
}
printf("y(2)=%f\n",y);
z=pow((2*2.0+2)/3.0,3.0/2.0);
printf("精确解");
printf("y(2)=%f",z);
}
实验结果与实验结论
(学生填写)欧拉法
h=0.1, y(2)=2.723877
h=0.05, y(2)=2.775436
h=0.01, y(2)=2.817713
改进欧拉法
h=0.1, y(2)=2.827609
h=0.05, y(2)=2.828219
h=0.01, y(2)=2.828419
精确解
y(2)=2.828427
欧拉法的特点
单步,显式,一阶求导精度,截断误差阶欧拉法的缺点
欧拉法简单地取切线的端点作为下一步的起点进行计算,当步数增多时,误差会因积累而越来越大。因此欧拉格式一般不用于实际计算。
改进欧拉格式
为提高精度,需要在欧拉格式的基础上进行改进。采用区间两端的函数值的平均值作为直线方程的斜率。改进欧拉法的精度为二阶。