MATLAB-求解常微分方程

用matlab方法求解常微分方程

欧拉法

对于一阶常微分方程

\begin{cases}y'=f(x,y)\\y(x_0)=y_0\end{cases}

对应的改进的欧拉公式为

\begin{cases}y_p=y_n+hf(x_n,y_n)\\y_q=y_n+hf(x_n+h,y_p)\\y_{n+1}=\dfrac{1}{2}(y_p+y_q)\end{cases}

对应的matlab代码为

function [x,y]=euler(fun,x0,xfinal,y0,n)
%检查是否有足够的输入参数值传入函数。
%如果输入参数的数量小于 5,说明用户没有提供 n 的值,
%那么将默认将 n 设置为 50。
if nargin<5
    n=50;
end

h=(xfinal-x0)/n;%步长
x(1)=x0;y(1)=y0;%初始条件

%使用函数句柄来表示和传递函数
%result = feval(function_handle, arg1, arg2, ...)
%function_handle 是一个函数句柄,arg1、arg2 等是要传递给该函数的参数
for i=1:n
    x(i+1)=x(i)+h;
    y1=y(i)+h*feval(fun,x(i),y(i));
    y2=y(i)+h*feval(fun,x(i+1),y(i));
    y(i+1)=(y1+y2)/2;
end

例子

y'=-2y+2x^{2}+2x,\left(0\leq x\leq0.5\right),y(0)=1

对应代码

function f=fun(x,y)
f=-2*y+2*x^2+2*x;
end

在matlab命令行窗口输入

[x,y]=euler('fun',0.5,1,10)

得到数值解

函数功能介绍及例子

dsolve函数

用于求解常微分方程组的精确解。若没有初始条件或边界条件,则求出通解;若有,则求出特解。

函数格式

Y=dsolve('eq1,eq2,...','cond1,cond2,...','name');
%eq1:微分方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值