精华内容
下载资源
问答
  • matalb dsolve

    2013-09-13 11:01:12
    matlab翻译 dsolve Symbolic solution of ordinary differential equations. dsolve常微分方程的符号解
  • 本文主要介绍matlab中求解常微分方程(组)的dsolve和ode系列函数,并通过例子加深读者的理解。 一、符号介绍  D: 微分符号;D2表示二阶微分,D3表示三阶微分,以此类推。 二、函数功能介绍及例程 1、dsolve ...

    本文主要介绍matlab中求解常微分方程(组)的dsolveode系列函数,并通过例子加深读者的理解。

    一、符号介绍

       D: 微分符号;D2表示二阶微分,D3表示三阶微分,以此类推。

    二、函数功能介绍及例程

    1、dsolve 函数

    dsolve函数用于求常微分方程组的精确解,也称为常微分方程的符号解。如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。

    1)函数格式  

    Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)

    其中,‘eq1,eq2,…’:表示微分方程或微分方程组;

                ’cond1,cond2,…’:表示初始条件或边界条件;

                ‘Name’:表示变量。没有指定变量时,matlab默认的变量为t;

    2)例程

    例1.1(dsolve 求解微分方程)

    求解微分方程:

      

    在命令行输入: dsolve('Dy=3*x^2','x') ,摁下enter键后输出运行结果。

    例1.2(加上初始条件)

    求解微分方程:

    只需要在命令行添加初始条件即可,此时求出的即为方程的特解。可以看到上例中的C9变为了2。

    例2(dsolve 求解微分方程组)

    求解微分方程组: 

    由于x,y均为t的导数,所以不需要在末尾添加’t’。

    2、ode函数

    在上文中我们介绍了dsolve函数。但有大量的常微分方程,虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解。

    怎么理解数值求解呢?数值分析是一门专门的学科,在此不过多介绍。我主要想通过一个简单的例子来向大家阐述数值求解的思想。

    比如,求解微分方程  。我们就可以转化为,那么。因此,我们可以通过迭代的方式来求解y。即可理解为步长

    odeMatlab专门用于解微分方程的功能函数。该求解器有变步长(variable-step)和定步长(fixed-step)两种类型。不同类型有着不同的求解器,具体说明如下图。 

    非刚性ode求解命令

    求解器solver

    功能

    说明

    ode45

    一步算法:4、5阶龙格库塔方程:累计截断误差(Δx)^5

    大部分尝试的首选算法

    ode23

    一步算法:2、3阶龙格库塔方程:累计截断误差(Δx)^3

    适用于精度较低的情形

    ode113

    多步算法:Adams

    计算时间比ode45短

    刚性ode求解命令

    ode23t

    梯形算法

    适度刚性情形

    ode15s

    多步法:Gear’s反向数值微分:精度中等

    若ode45失效时,可以尝试使用

    ode23s

    一步法:2阶Rosebrock算法:精度低

    当精度较低时,计算时间比ode15s短

    ode23tb

    梯形算法:精度低

    当精度较低时,计算时间比ode15s短

    其中,ode45求解器属于变步长的一种,采用Runge-Kutta算法;其他采用相同算法的变步长求解器还有ode23ode45表示采用四阶-五阶Runge-Kutta算法,它用4阶方法提供候选解,5阶方法控制误差,是一种自适应步长(变步长)的常微分方程数值解法,其整体截断误差为(Δx)^5。解决的是Nonstiff(非刚性)常微分方程。

    ode45是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,可换用ode15s试试。

    下面将以ode45为例具体介绍函数的使用方法。

    1)函数格式  

    [T,Y] = ode45(‘odefun’,tspan,y0)

    [T,Y] = ode45(‘odefun’,tspan,y0,options)

    [T,Y,TE,YE,IE] = ode45(‘odefun’,tspan,y0,options)

    sol = ode45(‘odefun’,[t0 tf],y0...)

    其中: odefun是函数句柄,可以是函数文件名,匿名函数句柄或内联函数名;

              tspan 是求解区间 [t0 tf],或者一系列散点[t0,t1,...,tf]

              y0 是初始值向量

              T 返回列向量的时间点

              Y 返回对应T的求解列向量

              options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等

               TE 事件发生时间

               YE 事件发生时之答案

                IE 事件函数消失时之指针i

    2)微分方程标准化

    利用ode45求解高阶微分方程时,需要做变量替换。下面说明替换的基本思路。

    微分方程为

     

    初始条件

     

    首先做变量替换 

    原微分方程可以转换为下面的微分方程组的格式:

    下面就可以利用转换好的微分方程组来编写odefun函数。

    3)例程

    例3.1(编写odefun函数)

     

    在matlab中新建脚本文件,编写函数如下:

    本例中只需在例3.1的基础上编写主函数,加上求解区间和边值条件即可。需要注意的是,ode45的运行结果以列向量形式给出。因此在本例中,x的第一列为y,第二列为y’。如果遇到变量不是列向量形式的,可以考虑利用reshape函数做矩阵变换。

    则,plot(t,x(:,1))画出来的是x的第一列数据,即为y;

            plot(t,x(:,2))画出来的是x的第二列数据,即为y’;

     

    三、总结

    在使用matlab中,如遇到命令格式记不清楚等情况,建议直接在命令行输入指令’help+函数名称’,如,在matlab命令窗口输入help dsolve后,显示如下:

    参考:

    1、https://jingyan.baidu.com/article/e52e36154448e940c60c51aa.html

    2、https://baike.baidu.com/item/ode45/6674723?fr=aladdin

    3、https://wenku.baidu.com/view/45a0a0b54b73f242326c5f7f.html

     

     

    展开全文
  • sympy的dsolve函数

    千次阅读 2020-02-26 19:38:08
    sympy的dsolve函数 小记 翻译官方sympy库之ODE 想用来sympy求解线性方程,可是苦于网上资料太少,就想试着翻译。 后来发现有2个博客写的不错,传送门1,传送门2 User Functions dsolve函数属于这个user functions ...

    小记

    翻译官方sympy库之ODE

    想用来sympy求解线性方程,可是苦于网上资料太少,就想试着翻译。

    后来发现有2个博客写的不错,传送门1传送门2

    User Functions

    dsolve函数属于这个user functions 范畴内的。

    这些函数是用 from sympy import *导入全局名称空间。这些函数(不像hint Functions),它只是为了普通用户使用Sympy。

    sympy.solvers.ode.dsolve\color{#008b45}{sympy.solvers.ode.dsolve}

    (eq,func=None,hint=default,simplify=True,ics=None,xi=None,eta=None,x0=0,n=6,kwargs)\color{#008b45}(*eq*, *func=None*, hint='default', simplify=True, ics=None, xi=None, \\*eta=None*, *x0=0*, *n=6*, kwargs)

    可求解任意(支持的)常微分方程和常微分方程方程组。

    对于单常微分方程

    Usage

    将认为它的方程组中的方程个数为1,

    dsolve(eq,f(x)hint)\color{#008b45}dsolve(eq, f(x), hint) ->使用方法 hint在常微分方程组eq中求解f(x)。

    Details

    • eq 它可以是可支持的任何常微分方程。它可以是一个等式,也可以是一个表达式,假设它等于0。
    • f(x) 它的导数构成了微分方程。在大多数情况下,我们不需要提供它,它会被自动算出(如果它不能被算出就会报错)
    • hint 它是你想让dsolve使用的求解方法。使用classify_ode(eq,f(x))\color{#008b45}{classify\_ode(eq, f(x))} 可以获得一个ODE的所有可以使用的方法。默认使用classify_ode()\color{#008b45}{classify\_ode()}.
    • simplify 可以用odesimp()\color{#008b45}{odesimp ()}来简化。有关更多信息,请参见它的DocString。例如,关闭此选项可以禁用func解的求解或任意常数的简化。它仍然会与这个提示整合。注意,如果启用此选项,解决方案可能包含比ODE的顺序更多的任意常数。
    • xi and eta 是常微分方程的无穷小函数。它们是微分方程不变的点变换的李群的无穷小。用户可以为无穷小指定值。如果没有指定,xi和eta将在各种启发式的帮助下使用infinitesimals()\color{#008b45}{infinitesimals()}进行计算。
    • ics 为微分方程的初始/边界条件集。它应该以类似于的形式{f(x0):x1,f(x).diff(x).subs(x,x2):x3}\color{#0000ff}{\{f(x0): x1, f(x).diff(x).subs(x, x2): x3\}}给出。对于幂级数解,如果没有指定初始条件,则假定为f(0)为c0,幂级数解为0。
    • x0 是那个要求解出的点。
    • n 给出要求解出的变量的指数

    Hints

    先跳

    Tips

    • 你可以这样声明一个未知函数的导数:
    from sympy import Function,Derivative
    from sympy.abc import x    # x是一个独立变量
    f= Function("f")(x)   #f是x的函数
    f_=Derivative(f,x)   #f_是f对x的导数
    
    • 在test_ord .py可以看到一系列如何使用dsolve()\color{#008b45}{dsolve()}的示例。
    • dsolve()\color{#008b45}{dsolve()}总是返回一个等式类(除了提示是all或all_Integral的情况)。如果可能的话,它将显式地为所求解的函数求解。否则,它返回一个隐式解。任意常数是名为C1、C2等的符号。
    • 因为所有的解在数学上都是等价的,所以对于ODE,一些提示可能会返回完全相同的结果。但是,通常两个不同的提示会以不同的格式返回相同的解决方案。两者应该是等价的。还要注意,有时任意常数在两个不同解中的值可能不相同,因为一个常数可能“吸收”了其他常数。
    • help(ode.ode<hintname>)\color{#008b45}{help(ode.ode_<hintname>)}可以获取关于特定提示的更多信息,其中是不带_Integral的提示的名称。

    对于常微分方程组

    Usage

    dsolve(eq,func)\color{#008b45}{dsolve(eq, func)} ->解常由x(t),y(t),z(t)等构成的微分方程组eq。

    Details

    eq 它可以是任意支持的常微分方程组它可以是一个等式,也可以是一个表达式,假设它等于0。

    func 设x(t)和y(t)是一个变量的函数,该变量及其部分导数构成常微分方程的方程组。它将被自动检测(如果无法检测,则会引发一个错误)。

    Examples

    from sympy import Function, dsolve, Eq, Derivative, sin, cos, symbols
    from sympy.abc import x
    f=Function('f')
    ans=dsolve(Derivative(f(x),x,x)+9*f(x),f(x))
    print(ans)
    #Eq(f(x), C1*sin(3*x) + C2*cos(3*x))
    
    展开全文
  • Solve differential equation in Mathematica with dsolve.
  • MATLAB中dsolve与syms

    千次阅读 2017-04-21 14:53:06
    dsolve 在matlab命令窗口输入help dsolve 可以得到关于dsolve函数的一些帮助。基本的使用方式是dsolve('equ'); 其中,equ表示方程,返回结果为带有常量的符号解, 例一: dsolve('Dy = y + 1','x')...

    dsolve

    在matlab命令窗口输入help dsolve

    可以得到关于dsolve函数的一些帮助。基本的使用方式是dsolve('equ');

    其中,equ表示方程,返回结果为带有常量的符号解,

    例一:

    dsolve('Dy = y + 1','x') 是dy/dx = y + 1 的解



    syms是定义多个符号是符号变量的意思  。

    定义未知数:syms x

    x是变量 。
    syms是定义符号变量。

    补充:
    syms是定义多个符号是符号变量的意思。
    sym只能定义一个符号变量, 但可以具体到这个符号变量的内容。
    例如 syms f z; 定义下x和y。
    f=sym(`a+b+c`); 就只能定义一个f=a+b+c 。
    如果先用 syms 定义了 符号变量f , 在下边直接 就可以写 f=a+b+c。

    展开全文
  • Solving with DSolve The Mathematica function DSolve finds symbolic solutions to differential equations. (The Mathe- matica function NDSolve, on the other hand, is a general numerical differential ...
  • DSolve-源码

    2021-03-22 02:14:48
    溶解 该项目是使用版本10.1.6生成的。 开发服务器 为开发服务器运行ng serve 。...如果您更改任何源文件,该应用程序将自动重新加载。 代码脚手架 运行ng generate component component-name生成一个新的组件。...
  • dsolve()函数求解微分方程

    千次阅读 2019-09-11 14:37:03
    一、dsolve()函数 用法:y=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var') eqni表示方程,condi表示初值,var表示微分方程中的自变量,系统默认为t。 D为微分符号,D2表示二阶微分,D3表示三阶微分。 二...

    本为主要介绍matlab解微分方程的符号解法

    一、dsolve()函数

    用法:y=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var')

    eqni表示方程,condi表示初值,var表示微分方程中的自变量,系统默认为t。

    D为微分符号,D2表示二阶微分,D3表示三阶微分。

    二、subs()函数

    subs能够在符号表达是和符号矩阵中进行置换操作。

    R = subs(S,old,new)  %用new置换表达式中的old,然后将置换完成的表达式附值给R

    举个例子

    syms x y a b x0
    x = dsolve('Dx + a*x = b','x(0) = x0','y');
    
    x = subs(x,{'a','b','x0','y'},{1,2,3,6});
    
    x = double(x)

    先写这些吧持续更新中……

    展开全文
  • MATLAB与高等数学--dsolve命令
  • 本文主要介绍matlab中求解常微分方程(组)的dsolve和ode系列函数,并通过例子加深读者的理解。 一、符号介绍    D: 微分符号;D2表示二阶微分,D3表示三阶微分,以此类推。 二、函数功能介绍及例程 1、...
  • matlab微分方程dsolve使用

    千次阅读 2016-09-28 09:04:00
    y=dsolve('Dy=exp(-x-y-2)','y(0)=-2','x') dy/dx 写成Dy (注意大小写) y(0)=-2 表示初始条件 'x'表示积分变量
  • Matlab求微分方程的解析解(dsolve

    千次阅读 2020-08-10 16:11:54
    dsolve('方程1','方程2',...,'方程n','初始条件','自变量') 注意 1)在表达微分方程时,用字母D表示微分,D2、D3分别表示二阶、三阶微分,后面跟的是求解的因变量; 2)自变量可以指定,不写时默认为t; 3)...
  • dsolve('DP=r*(M-P)*P') ans = M/(1+exp(-r*M*t)*C1*M) >> dsolve('DP=r*(M-P)*P','P(t0)=P0') ans = M/(1+exp(-r*M*t)*exp(t0*r*M)*(M-P0)/P0) 使用dsolve求解微分程注意 方程中的乘法号’*'必须要...
  • dsolve的常见用法示例: >> dsolve('Dy = y + 1','x') 警告: Support of character vectors and strings will be removed in a future release. Use sym objects to define differential equations instead. ...
  • dsolve函数是matlab中自带的可以用来解决部分常微分方程的函数(方法),下面以物理学中的热传导问题为例展示如何使用这个函数。 热力学模型假设物体和恒温的环境接触,温度随时间的变化率和温差成正比,我们假设...
  • 这里分别介绍怎么利用sympy.dsolve求解常微分方程和常微分方程组。#首先利用sympy.dsolve求解单个的常微分方程:#代码from sympy import Function, dsolve, Derivative, symbolsfrom sympy.abc importt#sympy.abc...
  • ode45函数无法求出解析解,dsolve可以求出解析解(若有),但是速度较慢. 1.      ode45函数 ①求一阶常微分方程的初值问题 [t,y] = ode45(@(t,y)y-2*t/y,[0,4],1); plot(t,y); ...
  • 我用MATLAB的solve函数还有dsolve函数解方程组的时候未知量一直都解不出来而且老是有这个警告,你知道这是什么原因吗 Warning: Explicit solution could not be found. > In dsolve at 194 In Untitled at 2
  • 本文主要介绍matlab中求解常微分方程(组)的dsolve和ode系列函数,并通过例子加深读者的理解 matlab求解常微分方程(组)---dsolve、ode系列函数详解(含例程)
  • 本博文源于matlab中dsolve命令,这个命令主要解决常微分方程求解x'(t)+4x(t)=sin2t/对于方程降阶x'(t)=t/求解x''(t)+2*x'(t)-3*x(t)=e^t/求解常微分方程组:x'(t)=-3y(t) y'(t)=4x(t)/求解常微分方程初值问题
  • Dsolve PDE基础

    2019-07-11 16:45:14
    线性和拟线性偏微分方程 一阶偏微分方程通常可分为线性、拟线性或非线性.... 一个关于未知函数的一阶偏微分方程被称为是线性的,如果它能表示为如下形式: ...如果一个偏微分方程能表示成如下形式,则称它为拟线性的:...
  • 我们可以使用dsolve函数解具有解析解的微分方程,比如 https://blog.csdn.net/weixin_41855010/article/details/104188103 这篇博客中给出的热传导问题微分方程,我们再把这个方程matlab解的代码复习一遍: ...
  • 用matlab解常微分方程,调用dsolve是老出错 y=dsolve,用matlab解微分方程y=dsolve(’D2y+Dy2用matlab解常微分方程,调用dsolve是老出错 y=dsolve('Dy=x*sin(x)/cos(y...,用matlab解微分方程y=dsolve('D2y+Dy-2y=2x','y...
  • dsolve 的 用法

    千次阅读 2017-03-27 21:15:33
    点击打开链接 https://wenku.baidu.com/view/797c7be9998fcc22bcd10d64.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,850
精华内容 740
关键字:

dsolve