常微分方程Matlab数值解法-#1欧拉法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

常微分方程作为微分方程的基本类型之一,在自然界与工程界有很广泛的应用。很多问题的数学表述都可以归结为常微分方程的定解问题。

一、欧拉法( Euler)

欧拉法( Euler)是简单有效的常微分方程数值解法,欧拉法有多种形式的算法,其中简单欧
拉法是一种单步递推算
在这里插入图片描述

二、使用步骤

在这里插入图片描述

1.主函数

代码如下(示例):
function [outx,outy]=MyEuler(fun,x0,xt,y0,PointNum)
%用前向差分的欧拉法解微分方程 y’=fun
%函数 f(x,y): fun
%自变量的初值和终值: x0,xt
%y0 表示函数在 x0 处的值,输入初值为列向量形式
%自变量在[x0,xt]上取的点数: PointNum
%outx:所取的点的 x 值
%outy:对应点上的函数值
if nargin<5 | PointNum<=0 %如果函数仅输入 4 个参数值,则 PointNum 默认值为 100
PointNum=100;
end
if nargin<4 %y0 默认值为 0
y0=0;
end
h=(xt-x0)/PointNum; %计算步长 h
x=x0+[0:PointNum]'h; %自变量数组
y(1,:) = y0( : )‘; %输入存为列向量
for k = 1:PointNum
f=feval(fun,x(k),y(k,:)); %计算f(x,y)在每个迭代点的值
f=f( : )’;
y(k + 1, : ) =y(k, : ) +h
f; %对于所取的点x,迭代计算y值
end
outy=y;
outx=x;
%plot(x,y) %画出方程解的函数图
end

2.实例分析

在这里插入图片描述

首先建立函数文件 myfun01.m:
function f=myfun01(x,y)
f=sin(x)+y;
end
通过在相同的积分区间上设定不同的取点数,从而改变步长,可得到不同的欧拉解。

% myfun01=sin(x)+y
clc
clear all
[x1,y1]=MyEuler(‘myfun01’,0,2pi,1,16); %欧拉法所得的解
h1=2
pi/15 %计算取步长
[x11,y11]=MyEuler(‘myfun01’,0,2*pi,1,32); %欧拉法所得的解
h2=pi/15 %计算步长

y=dsolve(‘Dy=y+sin(t)’,‘y(0)=1’); %该常微分方程的符号解
for k=1:33
t(k)=x11(k);
y2(k)=subs(y,t(k)); %求其对应点的离散解
end
plot(x1,y1,‘+b’,x11,y11,‘og’,x11,y2,‘*r’)
legend(‘h=0.4 的欧拉解’,‘h=0.2 的欧拉解’,‘符号解’)
在这里插入图片描述

3.总结

用欧拉法得到的解和用符号法得到的解之间存在一定的误差,且取的步长越小,欧拉解越接近精确解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值