Matlab求解微分方程(解析解与数值解)

devtools/2024/9/23 9:55:49/

matlab求解微分方程解析解和数值解

  • Matlab求微分方程解析解
    • 例题1
    • 例题2
    • 例题3
  • Matlab求微分方程数值解
    • 一阶微分方程
      • 例题一
      • 例题二
    • 高阶微分方程
      • 例题

Matlab求微分方程解析解

dsolve(eqns,conds,options) eqns:微分方程(组)、conds:初值条件、options:精度设置

例题1

matlab">%例题一:y-Dy=2x(Dny表示y的n阶导),y(0)=3
dsolve('y-Dy=2*x','y(0)=3','x')

在这里插入图片描述

这种求解形式虽然简单,但是警告内容说它会在未来版本中被移除,因此推荐使用下面的方法使用dsolve函数

matlab">syms y(x)
eqn1=(y-diff(y,x)==2*x)
cond1=(y(0)==3)
dsolve(eqn1,cond1)

例题2

matlab">%例题二:D2y+4Dy+29y=0,y(0)=0,Dy(0)=15
syms y(x)
eqn2=(diff(y,x,2)+4*diff(y,x)+29*y==0)
Dy=diff(y,x)
cond2=[(y(0)==0),(Dy(0)==15)]
dsolve(eqn2,cond2)

例题3

在这里插入图片描述

matlab">syms x(t) y(t) z(t)
eqn3=[(diff(x,t)==2*x-3*y+3*z+t),(diff(y, t)==4*x-5*y+3*z+t),(diff(z,t)==4*x-4*y+2*z+t)]
ans3=dsolve(eqn3)

Matlab求微分方程数值解

一阶微分方程

matlab">[x,y]=solver('f',ts,x0,options)

①solver:求解器(以具体求解器作为函数名)
最常用的两个求解器包括ode45和ode15s。ode45采用4-5阶Runge-Kutta法,适用于求解非刚性问题(求解出的函数图像不发生突变);ode15s基于数值差分公式,适用于求解刚性问题(求解出的函数图像发生突变)。
因此在实际操作中,通常先采用ode45作为求解器,如果运行过程卡顿,说明面临刚性问题,应切换ode15s。

②f:包含微分方程的函数文件名f.m,除了使用字符串‘f’外可传入@f,标准形式dy=f(x,y)(dy;一阶微分)

③ts=[ t a , t b t_a,t_b ta,tb],表示自变量的范围,可使用 t a : s t e p : t b t_a:step:t_b ta:step:tb设置步距

④x0:函数的初值,n个函数对应n个初值

⑤options:设置求解精度,options=odeset(‘reltol’,rt,‘abstol’,at),默认相对误差rt=1e-3,绝对误差at=1e-6

⑥[x,y] x:返回所取自变量的离散值 y:返回各个函数对应于x的函数值

例题一

matlab">%df1.m
function dy=df1(x,y) dy=y-2*x;
end%练习一
[x1,y1]=ode45(@df1,[0,2],3)
figure(1)
plot(x1,y1,'r*-')

例题二

在这里插入图片描述

matlab">function dy=df2(x,y)dy=zeros(3,1);dy(1)=y(2)*y(3);dy(2)=-y(1)*y(3);dy(3)=-0.51*y(1)*y(2);
end%练习二
[x2,y2]=ode45(@df2,[0 4*pi],[0 1 1])
figure(2)
plot(x2,y2(:,1),'o',x2,y2(:,2),'*',x2,y2(:,3),'+')
legend('y1','y2','y3')
axis([0 4*pi -inf inf])

高阶微分方程

处理高阶微分方程,需要先通过变量转化将问题转变为一阶微分方程,然后使用solver求解

例题

在这里插入图片描述

设置 y 1 = y ′ , y 2 = y , 则( 1 + x 2 ) y 1 ′ = 2 x y 1 , y 2 ′ = y 1 , 二阶微分方程转化为一阶微分方程组 设置y_1=y^{'},y_2=y,则(1+x^2)y_1^{'}=2xy_1,y_2^{'}=y_1,二阶微分方程转化为一阶微分方程组 设置y1=y,y2=y,则(1+x2y1=2xy1,y2=y1,二阶微分方程转化为一阶微分方程组

matlab">%df3.m
function dy=df3(x,y)dy=zeros(2,1)dy(2)=y(1)dy(1)=(2*x*y(1))/(1+x^2)
end%高阶微分方程例题 y1=y',y2=y
[x,y]=ode45(@df3,[-2,2],[4 3])
figure(1)
plot(x,y(:,2),'r*')

http://www.ppmy.cn/devtools/115940.html

相关文章

Mybatis 控制台打印sql语句

logging:level:com.cjxjy.device.mapper: debugcom.cjxjy.fault.mapper: debug

探索 ShellGPT:终端中的 AI 助手

文章目录 探索 ShellGPT:终端中的 AI 助手背景介绍ShellGPT 是什么?如何安装 ShellGPT?简单的库函数使用方法场景应用常见问题及解决方案总结 探索 ShellGPT:终端中的 AI 助手 背景介绍 在当今快速发展的技术领域,命…

校园美食发现:Spring Boot技术的美食社交平台

第五章 软件测试 测试存在于软件开发进程中的最后一个阶段,它可以保证一个软件的开发质量是否符合设计者的初衷,也为程序的正式上线做了最后一道质量检测的工序。软件测试主要是控制各种条件、包括软件输出方式,使用模式和运行环境等&#xf…

环球团队快速崛起,掌握最新市场趋势引领未来

近日,一个名为“环球团队”的股票投资团队在业内迅速崭露头角,备受瞩目。该团队由多位在金融证券领域经验丰富、见解独到的专家组成,很快赢得了投资者的信任和支持。他们凭借精准的市场分析和高效的投资策略,多次成功抓住市场机遇…

vue选项式写法项目案例(购物车)

一、初始化项目结构 1.初始化vite项目 npm create vite cd vite-project npm install 2.清理项目结构 清空App.vue 删除components目录下的HelloWorld.vue组件 3.为组件的样式启用sacc或less组件 npm i sass4.初始化index.css全局样式 :root{font-size:12px } 二、封装…

Linux中的环境变量及main函数参数详解

目录 Linux中的环境变量 常见环境变量 PATH : 和环境变量相关的命令 通过系统调用获取或设置环境变量 getenv putenv 新增环境变量 进程切换: main函数参数 命令行参数 Linux中的环境变量 环境变量(environment variables)一般是指在操作系统中用来指定操…

周末总结(2024/09/22)

工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…

【网络安全 | 代码审计】PHP无参数RCE

未经许可,不得转载。 文章目录 无参数RCE代码审计1、利用Session ID实现无参数RCE2、利用get_defined_vars ()函数实现无参数RCE3、利用getallheaders()实现无参数RCE4、利用getenv()实现无参数RCE5、利用scandir()实现无参数RCE靶场实例无参数RCE 一般情况下,RCE需要通过传…