精华内容
下载资源
问答
  • matlab常微分方程和常微分方程组的求解-matlab常微分方程和常微分方程组的求解.pdf matlab常微分方程和常微分方程组的求解
  • TMU_BME_2013 Topic: 如何使用 MATLAB 求 解常微分方程组 a.What ? 微分方程 指描述未知函数的导数与自变 量之间的关系的方程未知函数是一元函 数的微分方程称作 常微分方程 未知函数 是多元函数的微分方程称作 偏...
  • 用MATLAB求解微分方程及微分方程组方法介绍和例子。Matlab
  • ·基础数学· 基于 Matlab 常系数线性微分方程组的求解* 严水仙 (赣南师范大学 数学与计算机科学学院,江西 赣州 341000) 摘 要: 在常微分方程课程教学中,常系数线性微分方程组可以通过线性代数的理论、矩阵指数、...

    ·基础数学· 基于 Matlab 常系数线性微分方程组的求解* 严水仙 (赣南师范大学 数学与计算机科学学院,江西 赣州 341000) 摘 要: 在常微分方程课程教学中,常系数线性微分方程组可以通过线性代数的理论、矩阵指数、拉普拉斯变 换等方法进行求解. 本文主要叙述利用 Matlab 数学软件在求解常系数线性微分方程组中的应用.关键词: 常系数线性微分方程;Matlab;矩阵指数 中图分类号: O175 文献标志码: A 文章编号:1004 -8332(2018)03 -0010 -05 微分方程课程是高校不少理工科专业(如数学、力学、控制等) 的重要基础理论课程. 常微分方程是描述自然科学、工程技术和社会科学中的运动、演化和变化规律的重要连续型模型. 物理、化学、材料、医学、经济学等领域中的许多原理和规律都可以描述成相应的微分方程,如生物种群中的生态平衡、流行病存在的阈值定理、化学反应中的稳定性、遗传基因变异、股票的涨幅趋势、利率的浮动、市场均衡价格的变化等. 描述、认识和分析其中的规律可以通过研究相应的微分方程数学模型来实现.[1] 在微分方程的理论中,线性微分方程组是非常值得重视的一部分内容,它是了解并掌握非线性微分方程、非线性动力系统、非线性控制等课程的基础. 常系数线性微分方程组的求解是线性微分方程组理论中最简单、最直观的部分,熟悉并掌握常系数线性微分方程的求解将有利于更好的理解线性系统的基本理论. Matlab 是由美国的 Cleve Moler 博士等[2 -3]于 1980 年提出的以矩阵运算为基础,把计算、程序设计等融合到了一个简单易用的交互式工作环境中. 可实现工程计算、算法研究、符号运算、建模和仿真、原型开发、数据分析及可视化、科学和工程绘图、应用程序设计等功能. Matlab 强大的运算功能和图形使其成为目前世界上应用最为广泛的科学计算软件之一,在教学中能快速的计算方程的解并描绘直观的几何图形.[4 -6]鉴于此,本文主要介绍借助于 Matlab 来求解常系数线性微分方程组,通过利用 Matlab 命令,计算系数矩阵的特征值、特征向量、矩阵指数求解线性微分方程组. 1 常系数线性微分方程的基本理论[1] 定理 1[1] 如果 A(t) 是 n × n 阶矩阵函数, f(t) 是 n 维列向量函数. 它们都在区间 a  t  b 上连续,则 对区间 a  t  b 上的任意 t0 ∈[ a, b]及任一常数 n 维列向量 η ,方程组 x' = A(t)x + f(t) (1) 存在唯一解 φ(t),定义于整个区间 a  t  b 上,且满足初值条件 φ(t0) = η.定理 2[1] 齐次线性微分方程组 x' = A(t)x 一定存在 n 个线性无关的解 x1(t), x2(t),…, xn(t). 定理 3[1] 齐次线性微分方程组 x' = A(t)x 一定存在一个基解矩阵 Φ(t). 如果 ψ(t) 是方程组的任意解,那么 ψ(t) = Φ(t)c, (2) 这里 c 是确定的 n 维常数列向量. 2018 年 赣南师范大学学报 №. 3 第三期 Journal of Gannan Normal University May. 2018 * 收稿日期:2017 -12 -12 DOI:10. 13698/j. cnki. cn36 -1346/c. 2018. 03. 003 基金项目: 江西省教育厅科学技术研究项目(GJJ170816). 作者简介: 严水仙(1981 - ),男,江西省高安市人,赣

    展开全文
  • MATLAB程序分享MATLAB求解混沌系统微分方程组源程序代码-MATLAB求解混沌系统微分方程组源程序代码.rar
  • matlab求解微分方程组和相平面图,通过编程实战掌握具体应用。包括matlab求解微分方程组和相平面图前、matlab求解微分方程组和相平面图中、matlab求解微分方程组和相平面图后。
  • MATLAB程序分享使用欧拉Euler法求解微分方程组源程序-MATLAB使用欧拉Euler法求解微分方程组 源程序代码.rar 程序代码见附件,拿资料请顺便顶个贴~~ 如果下载有问题,请加我 qq 1530497909,给你在线传
  • 欧拉法求解微分方程组,编程软件是VS2013,编程语言是C语言
  • Matlab求常微分方程组的数值解

    万次阅读 多人点赞 2020-03-08 09:50:50
    上篇博客介绍了Matlab求解常微分方程组解析解的方法:博客地址 微分方程组复杂时,无法求出解析解时,就需要求其数值解,这里来介绍。 以下内容按照Matlab官方文档提供的方程来展开(提议多看官方文档) 介绍一下...

    上篇博客介绍了Matlab求解常微分方程组解析解的方法:博客地址
    微分方程组复杂时,无法求出解析解时,就需要求其数值解,这里来介绍。
    以下内容按照Matlab官方文档提供的方程来展开(提议多看官方文档)

    介绍一下核心函数ode45()

    一般形式:[t,y] = ode45(odefun,tspan,y0) 其中 tspan = [t0 tf]
    功能介绍:求微分方程组 y′=f(t,y) 从 t0 到 tf 的积分,初始条件为 y0。解数组 y 中的每一行都与列向量 t 中返回的值相对应。

    1. 一阶微分方程求解(简单调用即可)

    方程:y’=2*t
    代码

    tspan=[1 6]; %定义自变量x的取值空间为1-6
    y0=0;%定义因变量的初值,当x=1(x取值空间的第一个数)时,y0=0
    [t,y]=ode45(@(t,y) 2*t,tspan,y0); %定义函数y'=2*t,使用ode45求解
    plot(t,y,'-o'); %绘制求得的数值曲线
    

    说明:简单的odefun参数就是这个形式,@(x,y) fun 中间是空格,不能用逗号
    结果
    在这里插入图片描述

    2. 二阶微分方程求解(引入函数文件)

    方程:范德波尔方程 y1’’-u(1-y1²)*y1’+y1=0;(这里设u=1)
    代码
    定义输入的方程,以函数形式定义

    function dydt=odefun(t,y)
    %二阶方程为y1''-(1-y1²)*y1'+y1=0;
    %降阶为两个方程:y1'=y2; 
    %               y2'=(1-y1²)*y2-y1;
    %t虽然没有使用,但必须要作为参数写入
    dydt=[y(2);(1-y(1)^2)*y(2)-y(1)];
    

    求解作图

    tspan=[0 20]; %定义自变量x的取值空间为0-20
    y0=[2;0];%定义因变量的初值,当x=0时,y1=2,y2=y1'=0;
    [t,y]=ode45(@odefun,tspan,y0); %使用ode45求解
    %%下面为作图过程,不解释
    plot(t,y(:,1),'-o',t,y(:,2),'-o')
    title('Solution of van der Pol Equation (\mu = 1) with ODE45');
    xlabel('Time t');
    ylabel('Solution y');
    legend('y_1','y_2')
    

    说明:先进行降阶,使y2=y1’,这时候y2’=y1’’,然后把两个方程写成列向量形式就行了
    结果
    在这里插入图片描述

    3. 求解微分方程组(和2类似)

    这里就和求解二阶方程类似的,只不过不需要降阶,仍旧需要一个函数来定义方程组。我们这里不用官方文档的例子,用同学的循坏摆问题来进行演示。
    方程在这里插入图片描述
    给定的初值(w接近0,但实际上不能设置为0):
    在这里插入图片描述
    代码
    定义输入的方程

    function dRvw=func(t,Rvw)
    %% 函数功能:为ode45提供微分方程
    %输入:t:时间序列,就是θ;Rvw:因变量,Rvw(1)代表R,Rvw(2)代表v,Rvw(3)代表w
    %输出:dRvw:因变量的一阶微分,dRvw(1)代表dR,dRvw(2)代表dv,dRvw(3)代表dw
    %% 初始化因变量的一阶微分,3×1的向量
    dRvw=zeros(3,1);
    %% 参数初始化
    r=0.01;u=0.1;g=9.8;M=10;m=1;
    %% 输入微分方程式
    dRvw(1)=-Rvw(2)/Rvw(3)-r;
    dRvw(2)=(M*g-(m*Rvw(3)^2*Rvw(1)+m*g*sin(t)) *exp(u*(t+pi/2)))/(Rvw(3)*(M+m));
    dRvw(3)=Rvw(3)*r/Rvw(1)+2*Rvw(2)/Rvw(1)+g*cos(t)/(Rvw(3)*Rvw(1));
    

    求解作图

    %% 参数初始化 start_Theta是θ的初始值 end_Theta是θ的结束值
    %R是半径初值;v是线速度初值;w是角速度初值
    start_Theta=0;end_Theta=2*pi;R=1;v=0;w=1e-5;
    %% 使用ode45方法计算微分方程组func的数值解
    %func是带有方程组的函数 
    %[start_Theta end_Theta]是自变量范围
    %[R;v;w]是方程初值
    %T是自变量的数组,Rvw是对应的因变量的数值。Rvw(:,1)=R;Rvw(:,2)=v;Rvw(:,3)=w;
    [T,Rvw]=ode45(@func,[start_Theta end_Theta],[R;v;w]);
    %% 组合自变量和因变量。TRvw(:,1)=θ;TRvw(:,2)=R;TRvw(:,3)=v;Trvw(:,4);
    TRvw=[T,Rvw];
    %% 绘制自变量-因变量图像.figure1是R-θ,figure2是v-θ,figure3是w-θ
    plot(T,Rvw(:,1),'-o',T,Rvw(:,2),'-o',T,Rvw(:,3),'-o')
    title('自变量-因变量图像');
    xlabel('Angle θ');
    ylabel('Solution');
    legend('R','v','w')
    

    说明:注释的应该是比较清楚的,把三个方程写成列向量的形式就行

    PS:有些人和我说不能运行,然后我看了他们出错的原因,有点儿哭笑不得。出错的基本上都是运行上面的dRvw=func(t,Rvw)这个函数的。说明一下,这是有参数的函数,不给参数不能直接运行的。下面的求解作图脚本才是需要运行的哈,它调用了函数,才得到的结果。如果大家还发现什么问题,欢迎私戳或评论。

    PS+ 有了PS之后,还是很多人问我参数的问题,我在这里直接把文件给大家:cupt.zip
    提取码:6k8n。
    解压后,有两个文件,大家直接运行cupt.m即可。

    结果
    在这里插入图片描述

    4. 更多形式

    讲到这里,大部分我们用到的微分方程形式都可以求解了,Matlab还支持带有时变项和额外参数的微分方程求解,这里不再赘述,大家可以自行参阅官方文档。

    展开全文
  • MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.docMATLAB实例源码教程龙格库塔法求解微分方程组源代码实例题目用经典 Runge-Kutta方法求下列一阶微分方程组的近似解y1 3y1 2y2 2x2 1e2x, y10 1 e2x表示 ...

    253b171540df25e1b84436cbe50dfc72.gifMATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc

    MATLAB实例源码教程龙格库塔法求解微分方程组源代码实例题目用经典 Runge-Kutta方法求下列一阶微分方程组的近似解y1 3y1 2y2 2x2 1e2x, y10 1 e2x表示 exp(2*x)y2 4y1 y2 x2 2x 4e2x, y20 1 y3 2y1 y2 xe3x, y30 1y4 y1 x2ex, y40 1y5 y2 e2x, y50 1其中初值条件 y0为一个五维数组,包含了这五个方程在区间0,1左端点 0的值,并假设 N10 为区间等分数程序function rkA,x,h,y0A为字符串函数的元胞数组x为 x轴上的各点h为点距y0为初值i1;yi,y0;mlengthA;bxlengthx;while xi y13*a22*a3-2*a121*exp2*a1; 解释a1为 x,a2、a3为 y1,y2 y24*a2a3a122*a1-4*exp2*a1; y32*a2-a3-a1*exp3*a1; y4a2a12*expa1; y5a3-exp2*a1; Ay1,y2,y3,y4,y5A 1x38 char 1x41 char 1x28 char 1x21 char a3-exp2*a1 rkA,00.11,0.1,ones1,5y 1.0000 1.0000 1.0000 1.0000 1.00001.4692 1.1649 1.1312 1.1226 0.99632.1246 1.5112 1.3309 1.3031 0.99303.0680 2.1507 1.6105 1.5679 1.00784.4629 3.2638 1.9873 1.9573 1.07186.5725 5.1403 2.4884 2.5335 1.23769.8237 8.2476 3.1587 3.3940 1.593014.9117 13.3402 4.0745 4.6925 2.283722.9721 21.6384 5.3681 6.6746 3.549735.8640 35.1212 7.2699 9.7346 5.784356.6365 57.0045 10.1818 14.5095 9.6315

    展开全文
  • 这里分别介绍怎么利用sympy.dsolve求解常微分方程和常微分方程组。#首先利用sympy.dsolve求解单个的常微分方程:#代码from sympy import Function, dsolve, Derivative, symbolsfrom sympy.abc importt#sympy.abc...

    这里分别介绍怎么利用sympy.dsolve求解常微分方程和常微分方程组。

    #首先利用sympy.dsolve求解单个的常微分方程:

    #代码

    from sympy import Function, dsolve, Derivative, symbols

    from sympy.abc importt

    #sympy.abc表示This module exports all latin and greek letters as Symbols。上行代码意思是导入字母t,因为t字母在dsolve函数中要被使用,而dsolve函数中的x这里不需要导入是因为在下一行会声明x变量

    x = Function('x')

    #上行代码等效于x = symbols('x', cls=Function),意思是声明x为因变量函数

    result=dsolve(Derivative(x(t), t, 4) - 22*Derivative(x(t), t, 2) - 24*x(t))

    #result=dsolve(Derivative(x, t, 4) - 22*Derivative(x, t, 2) - 24*x),这样写是不可以的

    #Derivative(x(t), t, i)可以写成diff(x(t), t, i),或者写成Derivative(x(t), t, t, t, t)和diff(x(t), t, t, t, t)都表示函数x(t)对t的四阶导数,注意如果要使用diff函数,在第一行代码中要加入from sympy import diff。此外,diff()除了作为函数使用,还可以作为一个表达式的属性,如x(t)对t的四阶导数可以表示为x(t).diff(t).diff(t).diff(t).diff(t)

    print (result)

    #result=Eq(x(t), C1*exp(-t*sqrt(11 + sqrt(145))) + C2*exp(t*sqrt(11 + sqrt(145))) + C3*sin(t*sqrt(-11 + sqrt(145))) + C4*cos(t*sqrt(-11 + sqrt(145))))

    #其次利用sympy.dsolve求解常微分方程组:

    #代码

    from sympy import Function, dsolve, Derivative, symbols, Eq

    #from sympy.abc importt

    t=symbols('t')

    x, y=symbols('x, y', cls=Function)

    #注意这里的x和y之间的逗号可以省略,即可以写成x, y=symbols('x y', cls=Function)。这行代码等效于x=Function('x')和y=Function('y')

    eq=(Eq(Derivative(x(t),t, 2), 12*(x(t) + y(t))), Eq(Derivative(y(t),t, 2), 12*x(t) + 10*y(t)))

    #注意这里使用了Eq()函数,所以在第一行导入了from sympy import Eq。Eq()函数内的逗号相当于是等于号,等号左边和右边分别为微分方程左边和右边的表达式,如对于本例的第一个微分方程,除了写成Eq(Derivative(x(t),t, 2),12*(x(t)+y(t)))外,还可以写成Eq(Derivative(x(t),t, 2)-12*(x(t)+y(t)), 0),注意这后面的0不能省略。

    #同样地,对于第一个例子求解单个微分方程的情况,如果要使用Eq函数,则应该写成eq=Eq(Derivative(x(t), t, 4) - 22*Derivative(x(t), t, 2) - 24*x(t), 0)和result=dsolve(eq),并且要在第一行代码导入Eq函数。

    #如果在该例中,我们不想使用Eq()函数,则上行代码应该写为eq=(Derivative(x(t), t, 2)-12*(x(t) + y(t)), Derivative(y(t), t, 2)- 12*x(t) - 10*y(t))

    #简而言之就是,如果要使用Eq函数,则需要写成微分方程等号左右两边的表达式,当右边为0时,也需要写出来;如果不使用Eq函数,则只需要写出微分方程等号左边的表达式,此时等号右边应为0,且不需要写出来。

    result=dsolve(eq)

    print (result)

    #result=[Eq(x(t), 12*C1*exp(t*CRootOf(l**4 - 22*l**2 - 24, 0)) + 12*C2*exp(t*CRootOf(l**4 - 22*l**2 - 24, 1)) + 12*C3*exp(t*CRootOf(l**4 - 22*l**2 - 24, 2)) + 12*C4*exp(t*CRootOf(l**4 - 22*l**2 - 24, 3))), Eq(y(t), C1*(-12 + CRootOf(l**4 - 22*l**2 - 24, 0)**2)*exp(t*CRootOf(l**4 - 22*l**2 - 24, 0)) + C2*(-12 + CRootOf(l**4 - 22*l**2 - 24, 1)**2)*exp(t*CRootOf(l**4 - 22*l**2 - 24, 1)) + C3*(-12 + CRootOf(l**4 - 22*l**2 - 24, 2)**2)*exp(t*CRootOf(l**4 - 22*l**2 - 24, 2)) + C4*(-12 + CRootOf(l**4 - 22*l**2 - 24, 3)**2)*exp(t*CRootOf(l**4 - 22*l**2 - 24, 3)))]

    #CRootOf(表达式, i)应该就是“表达式=0”的第i+1个根(CRootOf(表达式, i)相当于会形成“表达式=0”的根的列表),这一点我还不确定,可以进一步讨论。至于为什么CRootOf中的表达式看着像数字,但却不直接计算出来而是写成式子的形式这一点,我的学Python比较好的同学说是为了语言的形式简便所以利用了表达式的形式,但是我觉得CRootOf中的表达式的I像是复数符号,这一点我还不确定,可以进一步讨论。

    我们注意到其实第一个例子的单个微分方程就是第二个例子的微分方程组通过求导和互相代入得到的,因此第一个例子中求出来的x(t)应该和第二例子求出来的x(t)等价,有兴趣的可以验证这一点(应该会使用到欧拉方程exp(It)=cost+Isint,其中I为复数符号),这一点我还不确定,可以进一步讨论。

    展开全文
  • 耦合微分方程组的LaSalle定理
  • 洛仑兹方程组:定义和数值解洛仑兹方程组是常微分方程组(请参阅洛仑兹方程组)。对于实数常量 σ,ρ,β,方程组为dxdt=σ(y-x)dydt=x(ρ-z)-ydzdt=xy-βz.一个敏感系统的洛仑兹参数值是 σ=10,β=8/3,ρ=28。从 [x(0)...
  • 示波器微分方程组

    2019-02-02 22:45:12
    示波器微分方程组,微积分方程拉开了现代数学和现代物理的序幕,具有里程碑的意义,我们可以认为一个函数在某一点的微分方程解就是该点的Y向量除以该点的X向量
  • 为了研究一阶线性模糊微分方程组的模糊初值问题,提出了模糊微分方程组的刻画方程组和关联解的概念,讨论了精确初值对刻画方程组解的影响,利用精确初值与关联解之间的关系,定义了模糊微分方程组初值问题解,同时给出了...
  • 资源包含龙格库塔法的实现原理,利用从原理上matlab实现四阶龙格库塔法解微分方程组微分方程组为CPG震荡图
  • MATLAB求解混沌系统微分方程组 部分源码 function main() clc close all global c u %定义全局变量 c=3; u=7;
  • 微分方程组有多个显式解的证明,于力,李峰,首先,用二阶和三阶微分方程统解公式证明,由一阶微分方程所组成的二元和三元微分方程组具有多个显式解。然后,用二阶微分方程统
  • 目的 研究偏微分方程组的初值问题。方法广义条件对称方法。结果得到偏微分方程组所允许的广义条件对称和相应的常微分方程组的初值问题。结论将偏微分方程组的初值问题转化为常微分方程组的初值问题,为进一步研究该...
  • MATLAB解微分方程组

    千次阅读 多人点赞 2019-01-22 18:55:09
    解单一微分方程组 S=dsolve(eqn,cond) eqn是微分方程等式,其中微分用diff函数表示,cond是确定微分方程不定系数的条件。注意函数要用带括号的形式定义。即: y(x)=2∗x;y(x)=2*x;y(x)=2∗x; 不能是 y=2∗x;y=2*x...
  • Matlab求解微分方程组

    万次阅读 多人点赞 2017-04-26 16:55:58
    (1)求解普通微分方程组:使用ode45方法 1. 创建一个函数文件eq2.m,在函数文件中描述这个解的微分方程组: %eq2.m文件 %描述微分方程组 function dy=eq2(t,y) %说明微分变量是二维的,令y(1)=x,y(2)=y ...
  • 线性分数阶微分方程组的解,吴学科,,近年来,在力学、物理、生物学、工程学等许多科学领域中都涉及到分数阶微分方程的应用。由于分数阶微分方程比整数阶方程更精确地
  • 四届龙格库塔法求解线性、非线性单自由度振动系统微分方程
  • 求解微分方程组的ODE算法

    千次阅读 2017-03-03 13:48:51
    4阶5级龙格库塔法用于解一阶微分方程(组),对于高阶微分方程,可以将其转换为一阶微分方程组求解。原程序由John.H.Mathews编写(数值方法matlab版),但只能解微分方程,不能解微分方程组。由LiuLiu@uestc修改,使...
  • 四阶Runge-Kutta法解常微分方程组 四阶Runge-Kutta法解常微分方程组
  • 微分方程组的龙格库塔公式求解matlab版微分方程组的龙格-库塔公式求解matlab版南京大学 王寻1. 一阶常微分方程组考虑方程组   y'f x,y,z , y x y 0 0   z'g x,y,z , z x z 0 0其经典...
  • 最近同学毕设需要求解循坏摆的微分方程,我在帮忙过程中学习了一下常微分方程的解析解和数值解的求法,在此分享。以下讲解遵循Matlab官方文档提供的方程和写法。(强烈建议大家有问题多看官方文档,非常有用)介绍一下...
  • MATLAB使用欧拉Euler法求解微分方程组 部分源码 clear;clc c=2/3; %设置c的值 x(1)=0.1; %设置x初值为0.1 y(1)=0.3; %设置y初值为0.3 h=0.05; %设置步长为0.05
  • 练习。使用四阶龙格库塔法求解常微分方程组,通用性较佳。附加一个振动方程求解的案例。振动方程是一个二阶微分方程,转化为两个方程组以后用编写的代码求解。
  • 二是PDE工具箱,可以求解特殊PDE问题,PDEtool有较大的局限性,比如只能求解二阶PDE问题,并且不能解决偏微分方程组,但是它提供了GUI界面,从繁杂的编程中解脱出来了,同时还可以通过File->Save As直接生成M代...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,820
精华内容 8,328
关键字:

微分方程组