我是靠谱客的博主 妩媚羊,最近开发中收集的这篇文章主要介绍微分方程建模Matlab代码总结微分方程建模Matlab代码总结**,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 微分方程建模Matlab代码总结**
    • 1.常微分方程求解的几种常用代码
      • Model 1
        • 1.代码及对应方法
        • 2.实例
          • 1.问题1
            • 1.求解常微分方程
            • 2.代码
            • 3.运行结果
          • 2.问题2
            • 1.求解
            • 2.代码
            • 3.结果
          • 3.结果分析
    • 2.偏微分方程求解
      • 1.pdetool的使用
      • 2.同轴电缆(已知电荷密度)为例

微分方程建模Matlab代码总结**

1.常微分方程求解的几种常用代码

Model 1

dy/dt=f(t,y)
y(t)|t=t0=y0
采用Matlab代码dsolve,ode23,ode45求解

1.代码及对应方法

代码名称求解问题对应方法输入参数输出参数进一步使用情况
dsolvedy/dt=ay;
diff(y,t,2)=ay:
diff(y,t,2)=y*a^2:
解的是常微分方程的精确解法也称为常微分方程的符号解syms:定义多个符号是符号变量
eqn:表示方程
cond:表示初值
diff(y,x,i):表示y对x的第i阶倒数
Name:表示变量。
没有指定变量时,matlab默认的变量为t;
带有常量的符号解[T,Y]=solver(odefun,tspan,y0)
ode23y’=f(x,t)求解非刚性微分方
低阶方法
ODEFUN,TSPAN,Y0
(注 TSPAN自变量范围是[t0,t_max])
TOUT,YOUTM(t,y)y’=f(t,y)M为非奇异矩阵
ode45y′1−μ(1−y1^2)y1’+y1=0
y’’=A*ty/B
y’(t)+f(t)y(t)=g(t)
求解非刚性微分方程 -
中阶方法
[T,Y] = ode45(odefun,tspan,y0) odefun 是函数句柄,可以是函数文件名,
匿名函数句柄或内联函数名 tspan 是区间 [t0 tf] 或者一系列散点[t0,t1,…,tf] y0 是初始值向量
T 返回列向量的时间点1.使用ode45的时候,必须表示为Y’=f(t,Y)的形式
2.ode45 仅适用于使用两个输入参数(ty)的函数。但是,通过在函数外部定义参数并在指定函数句柄时传递这些参数,可以传入额外参数。

2.实例

1.问题1
1.求解常微分方程

x*y’’-3 * y’ = x^2,y(1)=0,y(5)=0;

2.代码
%dsolve
syms y(x)
eqn = x * diff(y,x,2) -3 * diff(y,x) == x*x;
tip1=y(1)==0;
tip2=y(5)==0;
tip=[tip1,tip2];
dsolve(eqn,tip);
%top.m
function dy=odefun(x,y)
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=(3*dy(1))/x+x;
end

%ode23
tspan=[1 5];
y0=[0 0];
[x,y]=ode23(@odefun,tspan,y0);
plot(x,y(:,1),'-o',x,y(:,2),'-*')

%ode45
tspan=[1 5];
y0=[0 0];
[x,y]=ode45(@odefun,tspan,y0);
plot(x,y(:,1),'-o',x,y(:,2),'-*')
3.运行结果
%dsolve
ans =
 
(31*x^4)/468 - x^3/3 + 125/468

ode23

image-20210305193953090

ode45

image-20210305194024323
2.问题2
1.求解

y’’ = cos(2x) – y , y(0) = 1 , y’(0) = 0;

2.代码
%dsolve
syms y(x)
eqn = diff(y,x,2) == cos(2*x) - y;
tip0 = diff(y,x);
tip1=y(0)==1;
tip2 = tip0(0) == 0;
tip = [tip1 , tip2];
F(x) = dsolve(eqn,tip);
F(x)
%top.m
function dy=top(x,y)
dy=[cos(2*x)-y];
end

%ode23
tspan=[1 5];
y0=[1;0];
[x,y]=ode23(@top,tspan,y0);
plot(x,y(:,1),'-o',x,y(:,2),'-*')

%ode45
tspan=[1 5];
y0=[1;0];
[x,y]=ode45(@top,tspan,y0);
plot(x,y(:,1),'-o',x,y(:,2),'-*')
3.结果
%dsolve
ans =
 
(5*cos(x))/3 + sin(x)*(sin(3*x)/6 + sin(x)/2) - (2*cos(x)*(6*tan(x/2)^2 - 3*tan(x/2)^4 + 1))/(3*(tan(x/2)^2 + 1)^3)

ode23

image-20210305213339228

ode45

image-20210305213423362
3.结果分析

通过三个库函数计算常微分方程发现,精度方法ode45,较高,相比速度 方法dsolve最快。

因此后期可以尝试采用方法*求解常微分模型定解问题

2.偏微分方程求解

偏微分方程分为 椭圆型、抛物型、双曲型,在matlab 有微分方程工具箱 (pdetool),这里简单学习pdetool的使用

1.pdetool的使用

  1. 在命令行输入pdetool,就会弹出相应的界面
  2. PDE图形界面的菜单下方的功能图标(icon)按 钮img
  3. 定义 PDE 问题,其包含三大部份
    1. 利用绘图(draw)模式,定义 需要求解的问题的空间范围(domain)Ω
    2. 利用 boundary 模式,指定边界条件
    3. 利用 PDE 模式指定 PDE 系数,即输入 c,a,f 和 d 等 PDE 模式中的系数
  4. 在定义 PDE 问题之后,可依以下两个步骤求解
    1. mesh 模式下,产生 mesh 点,以便将原问题离散化
    2. solve 模式下,求解
    3. 最后,在 Plot 模式下,显示答案

2.同轴电缆(已知电荷密度)为例

​ 1.绘图

image-20210305224810810 image-20210305225925088

​ 2.设置参数

将问题类型设置为Electrostatics

image-20210305230057339 image-20210305230202950

​ 3.设置边界条件

image-20210305230306424

​ 4.将原问题离散化

image-20210305230518129

​ 5.求解

image-20210305230853889

​ 6.显示答案(画出等势线)

image-20210305230920695

最后

以上就是妩媚羊为你收集整理的微分方程建模Matlab代码总结微分方程建模Matlab代码总结**的全部内容,希望文章能够帮你解决微分方程建模Matlab代码总结微分方程建模Matlab代码总结**所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部