精华内容
下载资源
问答
  • 在MATLAB官网ode45函数介绍中有一下四种用法。[t,y] = ode45(odefun,tspan,y0)https://www.mathworks.com/help/releases/R2020b/matlab/ref/ode45.html?doclanguage=zh-CN&nocookie=true&prodfilter=ML%20SL...

         在MATLAB官网ode45函数介绍中有一下四种用法。 [t,y] = ode45(odefun,tspan,y0)icon-default.png?t=L892https://www.mathworks.com/help/releases/R2020b/matlab/ref/ode45.html?doclanguage=zh-CN&nocookie=true&prodfilter=ML%20SL%205G%20AE%20AT%20AA%20AU%20DR%20AS%20BI%20CM%20VP%20CT%20CF%20DA%20DB%20DF%20DH%20NN%20DO%20DS%20ET%20EC%20FH%20IT%20FI%20PO%20FL%20GD%20GC%20HD%20ES%20IE%20IA%20IP%20IC%20LP%20LS%20MG%20ME%20CO%20MJ%20DW%20MR%20MW%20AM%20MP%20MB%20MT%20NV%20OT%20OP%20DM%20PD%20AR%20BD%20BS%20CD%20CS%20PW%20PM%20RA%20RL%20RB%20RF%20RK%20RO%20RC%20RR%20TF%20SX%20SG%20SB%20SE%20SS%20LD%20PS%20SH%20MS%20VR%20VV%20CI%20RT%20SK%20SD%20CV%20SO%20DV%20WT%20PL%20XP%20SR%20RQ%20SZ%20HW%20EL%20SF%20ST%20SM%20ZC%20ID%20TA%20TR%20UV%20VE%20VN%20VT%20WA%20LH%20WL&docviewer=helpbrowser&docrelease=R2020b&s_cid=pl_webdoc&loginurl=https%3A%2F%2Flocalhost%3A31515%2Ftoolbox%2Fmatlab%2Fmatlab_login_framework%2Fweb%2Findex.html%3Fsnc%3DOHKPVM&searchsource=mw&snc=MDGHZE&container=jshelpbrowser#d122e852982

    在此处,t,y是最终要通过ode45函数得到的结果。odefun是要求解的函数,英文span是跨度的含义,time是时间的含义。因此,顾名思义,tspan 表示时间的跨度,即时间的范围。而y0则便是要求解y的初值。即计算给定初值的函数在给定时间范围内的值。

    如果还不是很清楚,那么,可以看官网给的一个简单的例子。

    y'=2t

    t=[0 5]

    y(0)=0

    对于这样的一个一阶导的函数,程序和结果如下:

      但由于该方程简单,因此也可以直接将2t写入主程序中。即下图所示:

     

     上述是求一阶导的,那么如果相求二阶导的呢。

    接下来,这个例子就是二阶微分方程了。方程如下所示:

     y''-(1-y^2)y'+y=0

    y(0)=2,y'(0)=0

    t=[0 20]

    对于该方程,采用ode45求解的思路为:让y=y(1),y'=dy(1)=y(2),y''=ddy(1)=dy(2),即y的自身为y(1),y的一阶导赋值为y(2),y的二阶导赋值为y(3),从而将y的二阶导转化为y(2)的一阶导。

    因为龙格库塔法是用来求一阶导的。理论内容可以参考数值分析等的书籍。通过将二阶导降阶成为一阶导,再用龙格库塔法ode45实现求解。

    回到例子,则上述方程可表示为

    dy(1)=y(2)

    dy(2)=(1-y(1)^2)y(2)-y(1)

    其求解程序和结果如下图。

     

     那么对于求解方程组即方程中存在分段函数,又该怎么处理呢。这将在后续进行记录。

     

     

    展开全文
  • matlab 多次求解偏微分方程 ode45

    千次阅读 2019-04-27 20:39:47
    师兄和我讨论了一个问题,就是在matlab中求解偏微分方程, 其中,偏微分方程中有的常数是一直变化的,要求很多次,而不是一个固定的常数求一次就行了。 其中,A1和A2是要求解的因变量,x是自变量,其他为...

    师兄和我讨论了一个问题,就是在matlab中求解偏微分方程,

    其中,偏微分方程中有的常数是一直变化的,要求很多次,而不是一个固定的常数求一次就行了。

     

    \frac{dA1}{dx} = k * A2 * exp(-i\delta x)

    \frac{dA2}{dx} = k * A1 * exp(-i\delta x)

    其中,A1和A2是要求解的因变量,x是自变量,其他为常数

    求解微分方程如下:

    %定义函数如下
    function  c = abss(x,A)
    k=1;
    % global k;
    deta = 1;
    c(1,1) =k*A(2)*exp(-1i*deta*x);
    c(2,1) =k*A(1)*exp(1i*deta*x);
    % c = c'; 
    end
    
    
    %注意 函数abss返回的值   必须返回列矢量 
    %所以c为2行1列,如果为1行2列,则 c = c'; 
    
    
    %求解
    xx = [1 2];
    yy = [1,0]';
    d,e = ode45(@abss,xx,yy);
    
    

    当,我们想让k的值的变化的,求解不同k值下的解,则设定k为全局变量。

    而不能在函数内加入k使得k成为变量。

     

    function  c = abss(x,A)
    %k=1;
    global k;
    deta = 1;
    c(1,1) =k*A(2)*exp(-1i*deta*x);
    c(2,1) =k*A(1)*exp(1i*deta*x);
    % c = c'; 
    end
    
    %求解
    xx = [1 2];
    yy = [1,0]';
    for k = 1:10;
      [d{k},e{k}] = ode45(@abss,xx,yy);
    end

     

     

     

    展开全文
  • matlab求解偏微分方程,相比较把偏微分转成长分为方程再调用ode函数,利用离散差分法,使用迎风格式迭代求解数值解。
  • 本篇将介绍用matlab求解微分方程的数值解和解析解,并非是一种完整的模型,仅仅是一些算法。由于数学原理过于复杂,故不探究背后的数学原理,仅将matlab求解的相关函数加以记录。所有代码均可跑通。 1.Matlab求常...

    本篇将介绍用matlab求解常微分方程的数值解和解析解,并非是一种完整的模型,仅仅是一些算法。由于数学原理过于复杂,故不探究背后的数学原理,仅将matlab求解的相关函数加以记录。所有代码均可跑通。

    1.Matlab求常微分方程的数值解

    1.1非刚性常微分方程的数值解法:

    功能函数:ode45,ode23,ode113
    例:用RK方法(四阶龙格—库塔方法)求解方程
    f=-2y+2x^2+2*x

    matlab程序:

    //doty.m
    function f=doty(x,y)
    f=-2*y+2*x^2+2*x;
    end
    
    //main.m
    [x,y]=ode45('doty',[0,0.5],1)
    

    注:[0,0.5]表示求解区间;1为初值列向量

    1.2刚性常微分方程的数值解法

    功能函数:如ode15s,ode23s,ode23t, ode23tb
    使用方法与非刚性类似

    1.3高阶微分方程的解法

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.Matlab求常微分方程的解析解

    2.1求常微分方程的通解

    在这里插入图片描述

    syms x y
    diff_equ='x^2+y+(x-2*y)*Dy=0'
    dsolve(diff_equ,'x')
    

    注:'x’代表x为自变量,D代表求导

    2.2求常微分方程的初边值问题

    在这里插入图片描述

    syms x y
    diff_equ='D3y-D2y=x'
    dsolve(diff_equ,'y(1)=8,Dy(1)=7,D2y(2)=4','x')
    

    2.3求常微分方程组

    在这里插入图片描述

    equ1='D2f+3*g=sin(x)';
    equ2='Dg+Df=cos(x)';
    [general_f,general_g]=dsolve(equ1,equ2,'x')
    [f,g]=dsolve(equ1,equ2,'Df(2)=0,f(3)=3,g(5)=1','x')
    

    3.Matlab求解偏微分方程

    在这里插入图片描述

    %(1)问题定义
    g='circleg'; %单位圆
    b='circleb1'; %边界上为零条件
    c=1;a=0;f=1; %2)产生初始的三角形网格 
    [p,e,t]=initmesh(g); %3)迭代直至得到误差允许范围内的合格解
    error=[]; err=1;
    while err > 0.01, 
        [p,e,t]=refinemesh(g,p,e,t);
        u=assempde(b,p,e,t,c,a,f); %求得数值解
        exact=(1-p(1,:).^2-p(2,:).^2)/4;
        err=norm(u-exact',inf);
        error=[error err];
    end %结果显示
    subplot(2,2,1),pdemesh(p,e,t);
    subplot(2,2,2),pdesurf(p,t,u)
    subplot(2,2,3),pdesurf(p,t,u-exact')
    

    在这里插入图片描述

    4.Matlab pdetool工具箱求解偏微分方程

    对于一般的区域,任意边界条件的偏微分方程,我们可以利用Matlab中pdetool提供的偏微分方程用户图形界面解法。pdetool提供的用户图形界面解法的使用步骤如下:
    (i)在Matlab命令窗口运行pdetool,出现PDE Toolbox界面。
    (ii)用鼠标点一下工具栏上的“PDE"按钮,在弹出的对话框中定义偏微分方程。
    (iii)用鼠标点一下工具栏上的区域按钮,在下面的坐标系中画出偏微分方程的大致定解区域。
    (iv)双击(iii)中画出的大致区域,在弹出的对话框中精确定位定解区域。
    (v)用鼠标点一下工具栏上的边界按钮“ ”,画出区域的边界。
    (vi)双击坐标系中的区域边界,定义偏微分方程的边界条件。
    (vii)用鼠标点工具栏上的剖分按钮,对求解区域进行剖分。
    (viii)如果求抛物型或双曲型方程的数值解,还需要通过“solve”菜单下的“parameters…”选项设置初值条件。
    (ix)用鼠标点一下工具栏上的“=”按钮,就画出偏微分方程数值解的图形。通过“solve”菜单下的“Export Solution…”选项可以把数值解u输出到Matlab的工作间。
    (x)如要画出数值解的三维图形,需要设置“plot"菜单下的“parameters…”选项。

    详细操作见
    Matlab偏微分方程快速上手:使用pde有限元工具箱求解二维偏微分方程
    偏微分方程的数值解(六): 偏微分方程的 pdetool 解法

    展开全文
  • Matlab ode45微分方程

    万次阅读 2013-09-19 18:48:09
    在用odesolver(ode45, ode15s, …)来解微分方程的时候,最基本的用法是: [t, y] = odesolver(odefun, tspan, y0);  这里的odefun是待求的微分方程。那么odefun中一般会含有多个系统参数,通常要通过改变参数来观察...

    在用odesolver(ode45, ode15s, …)来解微分方程的时候,最基本的用法是: 

    [t, y] = odesolver(odefun, tspan, y0); 

    这里的odefun是待求的微分方程。那么odefun中一般会含有多个系统参数,通常要通过改变参数来观察系统动态的变化。那么如何在调用odesolver的时候传递参数呢? 
    以前,我都是用全局变量的写法,将参数在主函数和子函数中分别都定义为global,这样做有一个弱点:针对系统不同,参数的表达与数量有变化的时候,程序通常要做变化,通用性不强。那么最好是在调用的时候进行传递,方法如下: 

    实际上很简单,就是将一切其他的参数都写在括号中就可以了!但是要注意的是:odesolver的第四个参数一定是options,也就是对微分方程添加补充功能的参数(类型为structure,要用odeset来定义),那么其他系统参数就只能从第五个参数写起。也就是说,第四个参数不可以为空,一定要定义某种option加进去,或者用使用空白矩阵(placeholder)。这样调用的时候格式就是:

     [t, y] = odesolver(odefun, tspan, y0, options, parameter1, parameter2); 或者 

    [t, y] = odesolver(odefun, tspan, y0, [], parameter1, parameter2);

     然后定义微分方程的时候也要有参数的地方:

     function dydt = odefun(t, y, parameter1, parameter2) dydt = [ eqn-1; eqn-2; …]; 就OK了。 


    另一种用法: 

    [T,Y] = ode45(@(t,y) rigid(t,y,Lambda,Lami,Cs,ionization,Ed),[0 100],[PHI_0,E_0,M_0,Gma_0],options); Lambda,Lami,Cs,ionization,Ed是参数 之前有声明 t y是变量 ,[PHI_0,E_0,M_0,Gma_0],是初始值 

    -------------------------------------------------- 

    function dy = rigid(t,y,Lambda,Lami,Cs,ionization,Ed) dy = zeros(4,1);    % a column vector dy(1) = y(2); 
    dy(2) = exp(y(1))-y(3)/y(4); 
    dy(3)=Lambda*ionization/Cs*exp(y(1)); 
    dy(4) = -y(4)*Lambda/Lami-Lambda*ionization/Cs-y(2)/y(4)-Ed/y(4); 

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

     [t,H]=ode45('solitiontry1',tspan,h0,[],m1,epsinon) 

    —————————————————————————————— 

    function solfi=solitiontry1(t,H,flag,m1,epsinon) %m1=1.15; 

    y=(1-epsinon)*(1-exp(H))+epsinon*m1^2*(1-sqrt(1+2*H*m1^-2))+m1^2*(1-sqrt(1-2*H*m1^-2)); solfi=-sqrt(-2*y); 


    注意前面两个函数之间的区别,第二个多了一股flag参数。应该是针对options为空的那个参数的,但是在这里,如果options不为空的话,还不知道有什么区别。

    展开全文
  • matlab使用杂谈4-偏微分方程求解之pdede函数使用

    千次阅读 多人点赞 2020-02-19 17:51:37
    matlab使用杂谈4-偏微分方程求解之pdede函数使用偏微分方程求解偏微分方程的数值方法Matlab解偏微分方程pdepe()函数pdepe函数使用示例PDE方程求解格式PDE方程初始条件格式PDE边界条件格式Matlab代码求解偏微分方程...
  • COMSOL求解微分方程

    万次阅读 2018-01-10 21:40:16
    COMSOL Multiphysics多物理场仿真软件也提供了求救常微分方程(ODE)和偏微分方程(PDE)的接口,下面详细介绍一下。 (1)建立模型,选择模型向导–>零维–>数学–>全局常微分和微分代数方程(ge),选择研究,选择...
  • 如何使用MATLAB求解微分方程(;Where ;Where ;When ;方法 特点 / 说明; 在数学中刚性方程是指一个微分方程其数值分析的解只有在时间间隔很小时才会稳定只要时间间隔略大其解就会不稳定 目前很难去精确地去定义哪些...
  • Matlab学习——求解微分方程()

    万次阅读 多人点赞 2018-05-29 17:18:58
    函数 dsolve 用来解决常微分方程)的求解问题,调用格式为 X=dsolve(‘eqn1’,’eqn2’,…) 如果没有初始条件,则求出通解,如果有初始条件,则求出特解 系统缺省的自变量为 t。 2.函数d...
  • 机器之心原创作者:蒋思源微分方程真的能结合深度神经网络?真的能用来理解深度神经网络、推导神经网络架构、构建深度生成模型?本文将从鄂维南、董彬和陈天琦等研究者的工作中,窥探微分方程与深度学习联袂前行的...
  • 数学建模-用Sympy库求解一些微分方程 例题1:解下列微分方程的特解 from sympy.abc import x #因为sympy的计算都是需要符号变量声明的 例如x=symbols('x'); 使用abc库可以将任何拉丁和希腊字母导出为符号型的 from ...
  • matlab求解微分方程

    千次阅读 2020-03-30 00:51:14
    dsolve函数用于求常微分方程组的精确解,也称为常微分方程的符号解。如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。 1)函数格式 Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’) 其中...
  • 采用R语言实现微分方程,偏微分方程以及差分方程及方程组求解方法
  • 背景求解真实问题中建模得到的非线性偏微分方程组, 尽可能少手写代码,如果用matlab, 可能的选项很有限。pdetoolbox有限元方法能够求解一些,但是要求对微分方程的类型以及pdetoolbox特有的书写方式非常熟悉,并能够把...
  • 图神经网络解偏微分方程系列(一)1....文章提出的模型主要创新点是允许任意空间和时间离散化,也就是说在求解偏微分划分网格时,网格可以是不均匀的,由于所求解的控制方程是未知的,在表示控制方程时,作
  • Python解微分方程

    万次阅读 多人点赞 2019-08-19 16:55:45
    Python解微分方程微分方程回顾微分方程:python 解析解(SymPy)微分方程:python数值解(SciPY)微分方程组:python数值解 微分方程回顾 微分方程是用来描述某一类函数与其导数之间的关系的方程,其解是一个符合方程...
  • scipy求解微分方程(scipy, torchdiffeq)

    万次阅读 多人点赞 2018-06-13 00:51:52
    使用scipy求解微分方程主要使用scipy.integrate模块,函数是odeint,solve_ivp(初值问题),可以求解一阶、二阶以及高阶方程或方程组。 下面直接上代码,已有详细注释 ''' 使用scipy求解微分方程,包括...
  • matlab求解时滞微分方程

    千次阅读 2019-06-25 13:33:22
    matlab求解时滞微分方程,dde23调用格式: sol = dde23(ddefun,lags,history,tspan); --ddefun函数句柄,求解微分方程y'=f(t,y(t),y(t-τ1),...,y(t-τk)) 必须写成下面形式: dydt =ddefun(t,y,Z); 其中t...
  • 偏微分方程的数值解系列博文: 偏微分方程的数值解(一):定解问题 & 差分解法 偏微分方程的数值解(二): 一维状态空间的偏微分方程的 MATLAB 解法 偏微分方程的数值解(三): 化工应用实例 ----------触煤反应...
  • 欧拉法(Euler)求解微分方程的Matlab程序及案例

    万次阅读 多人点赞 2021-02-27 23:07:56
    文章目录1. 概念1) 常微分方程2) 一阶常微分...自变量数量2个或以上时,称为偏微分方程。 绝大多数实际工程问题,常微分方程的自变量都是时间t,通常表达为: F(t,y,y˙,⋯ ,y(n−1),y(n))=0F\left( {t,y,\dot y, \cd
  • 我们提出了一种求解常微分方程(ode)和偏微分方程(PDEs)的一般方法,它依赖于前馈神经网络的函数逼近能力,并得到了一个可微分的封闭解析形式的解的构造。这种形式采用前馈神经网络作为基本的近似元素,其参数(权值和...
  • Matlab求解微分方程

    2019-11-06 23:19:55
    介绍: 1.在 Matlab 中,用大写字母 D 表示导数,Dy 表示 y 关于自变量的一阶导数,D2y 表示 y 关于自变量的二阶导数,依此类推.函数 dsolve 用来解决常微分方程)的求解问题,调用格式为 X=dsolve(‘eq...
  • Some options of the underlying ODE solver are available in  pdepe :  RelTol ,  AbsTol , NormControl ,  InitialStep ,  MaxStep , and  Events . In most cases, default values for these options ...
  • 第四十五篇 常微分方程编程基础 在工程分析的许多问题中,物理定律是用变量的导数表达的而不是变量本身来表示的,因此需要解决微分方程微分方程的解本质上涉及积分,有时可以用解析法得到。例如,最简单的微分...
  • 龙格-库塔方法是一种经典方法具有很高的精度它间接的利用了泰勒级数展开避免了高阶导数的...取步长h=0.1此处由数学知识可得该方程的精确解为 在这里利用MATLAB编程计算数值解并与精确解相比代码如下 (1)写出微分方程

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 299
精华内容 119
关键字:

ode45求解偏微分方程组