精华内容
下载资源
问答
  • 数学建模(5.5)利用matlab求解微分方程问题 解析解:dsolve MATLAB求解微分方程解析解的命令是dsolve 调用格式: dsolve('eq1','eq2',...,'cond1','cond2',...,'v'), %其中eq1、eq2、...为输入方程() %...

    数学建模(5.5)利用matlab求解微分方程问题

    解析解:dsolve

    MATLAB求解微分方程解析解的命令是dsolve
    调用格式:

    dsolve('eq1','eq2',...,'cond1','cond2',...,'v'),
    
    %其中eq1、eq2、...为输入方程(组)
    %cond1、cond2、...为初始条件
    %b表示求导变量,省略时系统默认为t
    %Dy表示关于y关于自变量的一阶导数,D2y表示y关于自变量的二阶导数,以此类推

    数值解:solver

    对于大部分的微分方程来说,都难以得到解析解,但对于难以求解析解的微分方程,可以求取其的数值解,命令为solver

    调用格式:

    [TY] = solver(odefun,tspan,y0)
    
    %表示求解微分方程y'=f(t,y)项
    %odefun为微分方程中的f(t,y)项
    %tspan为求解区间,要获得问题在指定点的解可取(分量单调)
    %y0为初始条件

    对于微分方程问题,一般来说难以有一个算法可以解决所有问题的情况,所以要针对不同的问题使用不同的算法:

    solver名称,特点与适用条件
    在这里插入图片描述

    具体求解思路请进传送门:

    https://blog.csdn.net/qq_43649786/article/details/98606183

    展开全文
  • 文章目录一、dsolve:解微分方程组1. 解一阶微分方程组2. 解二阶微分方程组3. 非常系数的二阶微分方程二、ode23:数值解微分方程 一、dsolve:解微分方程组 1. 解一阶微分方程组 使用 MATLAB解: 或者: % diff(y...

    一、dsolve:解微分方程组

    在这里插入图片描述

    1. 解一阶微分方程组

    在这里插入图片描述
    使用 MATLAB解:
    在这里插入图片描述
    或者:

    % diff(y,x)表示dy/dx
    eqn = diff(y,x) == 1+y^2;
    %cond 表示初始条件
    cond = y(0) == 1;
    ySol(x) = dsolve(eqn,cond);
    

    在这里插入图片描述

    2. 解二阶微分方程组

    在这里插入图片描述
    利用 MATLAB 得出通解和特解:
    在这里插入图片描述

    3. 非常系数的二阶微分方程

    在这里插入图片描述
    在这里插入图片描述
    当不存在解析解时,可以采用数值解方程组
    在这里插入图片描述
    在这里插入图片描述

    二、ode23:数值解微分方程

    Matlab中求微分方程数值解的函数有七个:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb 。

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

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

    数值解主要用于,解不出解析解时,也就是 dsolve 不存在解时
    在这里插入图片描述
    在这里插入图片描述
    (1)建立M文件

    function f = weif(x,y)
        f=-y+x+1;
    end
    

    (2)求解,作图,与精确解比较

    [x,y]=ode23('weif',[0,1],1);
    plot(x,y,'b--')
    hold on
    % 可以通过 dsolve 解出 y=x+exp(-x)
    fplot(@(x) x+exp(-x),[0,1],'r')
    legend('数值解','精确解')
    

    或者:

    [x,y]=ode23(@(x,y) -y+x+1,[0,1],1);
    plot(x,y,'b--')
    hold on
    % 可以通过 dsolve 解出 y=x+exp(-x)
    fplot(@(x) x+exp(-x),[0,1],'r')
    legend('数值解','精确解')
    

    在这里插入图片描述
    注意:
    使用Matlab软件求数值解时,高阶微分方程必须等价地变换成一阶微分方程组。
    在这里插入图片描述
    在这里插入图片描述
    示例:
    在这里插入图片描述
    在这里插入图片描述
    (1)编写 vdpol M文件

    function yp = vdpol(t,y)
        yp(1,1)=y(2);
        yp(2,1)=(1-y(1)^2)*y(2)-y(1);
    end
    

    (2)得出曲线图

    [t,y]=ode23('vdpol',[0,20],[3,0]);
    y1=y(:,1);
    y2=y(:,2);
    %曲线图
    plot(t,y1,'b',t,y2,'r--')
    legend('y1','y2')
    

    在这里插入图片描述

    展开全文
  • 1求解常微分方程的MATLAB程序为 2求解常微分方程的MATLAB程序为 3求常微分方程组通解的MATLAB程序为 4求常微分方程组通解的MATLAB程序为 5求解常微分方程的MATLAB程序如下 6求解常微分方程的解并画出解的图形 ?...
  • 一、常微分方程的符号解 ...其中,dsolve函数用于求解微分方程的符号解,Equation为微分方程),Condition为约束条件,Value为自变量名(默认为t)。 若未给定约束条件,则给出通解;若给出约束条件,...

    一、常微分方程的符号解

    §1.1 符号说明

    在这里插入图片描述

    §1.2 求解

    y=dsolve('Equation1,Equation2,…,','Condition1,Condition2,…,','Name');
    

    其中,dsolve函数用于求解常微分方程的符号解,Equation为微分方程(组),Condition为约束条件,Value为自变量名(默认为t)。
    若未给定约束条件,则给出通解;若给出约束条件,则给出特解。

    二、常微分方程的数值解

    对于大部分的常微分方程,理论上其解是存在的,但我们无法求出其解析解,只能求出满足方程的一个近似的数值解。

    §2.1 方程的标准形式

    在这里插入图片描述

    §2.2 求解函数

    [t,y]=solver('odefun',tspan,y0,options);
    

    符号说明:

    变量名 意义
    t 满足方程的数值解对应的自变量t的值
    y 满足方程的数值解
    solver 求解器
    odefun 显式微分方程中的f(t,y)函数
    tspan 求解区间[t0,tf]
    y0 约束条件(列向量)
    options 求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等

    求解器solver说明:

    求解器 说明
    ode45 适用于非刚性ODE;一步算法;4,5阶Runge—Kutta方程;累计截断误差(△x)^5;大部分尝试的首选方法
    ode23 适用于非刚性ODE;一步算法;2,3阶Runge—Kutta方程;累计截断误差(△x)^5;适用于精度较低的情形
    ode113 适用于非刚性ODE;多步算法;Adams算法;计算时间短于ode45
    ode23t 适用于刚性ODE;梯形算法;适用于适度刚性情形
    ode15s 适用于刚性ODE;多步法;Gear’ s反向数值积分;中等精度;若ode45失效时,可以尝试使用
    ode23s 适用于刚性ODE;单步法;2阶Rosebrock算法;低精度;精度较低时,计算时间短于ode15s
    ode23tb 适用于刚性ODE;梯形算法;低精度;精度较低时,计算时间短于ode15s

    §2.3 odefun函数的编写

    function dx=odefun[t,x]
    %% dx为返回值,是一个列向量
    %% t表示时间(自变量),x是一个列向量
    dx=zeros(n,1);
    dx(1)=......;
    dx(2)=......;
    ......
    dx(n)=......;
    end
    

    其中,自定义函数odefun中的dx、x与一阶微分方程组的关系为:
    在这里插入图片描述

    展开全文
  • 利用MATLAB求解一阶线性常系数非齐次微分方程组

    千次阅读 多人点赞 2020-04-16 23:25:07
    用矩阵函数求解一阶线性常系数齐次微分方程组主要步骤1.问题形式2.求矩阵函数3.代入矩阵A的指数函数得最终解 主要步骤 本来想用在矩阵论期中开卷考试验证计算结果的,结果一个解方程组的题也没考…在一些学习网站白...

    用矩阵函数求解一阶线性常系数非齐次微分方程组

    主要步骤

    本来想用在矩阵论期中开卷考试验证计算结果的,结果一个解方程组的题也没考…在一些学习网站白嫖惯了,也该分享一下知识,希望这里的code能对搜索到的人有帮助。
    主要应用了matlab的符号矩阵,讲解不侧重推导,只侧重编程实现,详情可以看矩阵论相关的参考书。

    1.问题形式

    一阶线性常系数齐次微分方程组形式为:
    dξ1dt=a11ξ1+a12ξ2++a1nξn+β1(t)dξ2dt=a21ξ1+a22ξ2++a2nξn+β2(t)dξndt=an1ξ+an2ξ2++amξn+βn(t) \begin{array}{rl} \frac{\mathrm{d} \xi_{1}}{\mathrm{d} t} & =a_{11} \xi_{1}+a_{12} \xi_{2}+\cdots+a_{1 n} \xi_{n} +\beta_1(t) \\ \\ \frac{\mathrm{d} \xi_{2}}{\mathrm{d} t} & =a_{21} \xi_{1}+a_{22} \xi_{2}+\cdots+a_{2 n} \xi_{n} +\beta_2(t) \\ & \vdots \\ \frac{\mathrm{d} \xi_{n}}{\mathrm{d} t} & =a_{n 1} \xi+a_{n 2} \xi_{2}+\cdots+a_{m} \xi_{n}+\beta_n(t) \end{array}
    将其改写为矩阵方程:
    x=dxdt=Ax+b(t) \boldsymbol{x^{\prime}}=\frac{d\boldsymbol{x}}{d t}=\boldsymbol{Ax}+\boldsymbol{b}(t)
    其一般解为:
    x(t)=e(tt0)Ax0+etAt0tesAb(s)ds \boldsymbol{x}(t)=\mathbf{e}^{\left(t-t_{0}\right) \boldsymbol{A}} \boldsymbol{x}_{0}+\mathrm{e}^{t\boldsymbol{A}} \int_{t_{0}}^{t} \mathrm{e}^{-s\boldsymbol{A}} \boldsymbol{b}(s) \mathrm{d} s
    其中x0\boldsymbol{x}_0为变量的初始值。

    2.求矩阵函数

    矩阵函数etAe^{t\boldsymbol{A}}的求解采用若当标准型法。
    代码如下:
    定义函数,输出为矩阵函数的矩阵

    function [EtA,P,J] = my_expm( A )
    

    首先求若当标准型,这里注意一定要将矩阵AA转化为符号矩阵形式,标准型和特征向量会以分数和根号形式表示,并将所有若当块用元组(cell)存储

    syms t x%x表示奇异值
    [P,J] = jordan(sym(A));%先求若当标准型
    n = size(A,1);
    J_ = {};
    %num存储若当块的个数
    num = 1;pre = 1;
    for i = 2:n
        if J(i-1,i) == 0
            J_{num} = J(pre:i-1,pre:i-1);
            pre = i;
            num = num + 1;
            if i == n 
                J_{num} = J(pre,pre);
            end
        end
        if i == n && J(i-1,i) == 1
            J_{num} = J(pre:n,pre:n);
        end
    end
    

    搜索尺寸最大的若当块,因为特征多项式的导数次数由最大的若当块尺寸决定,这个尺寸可以和上一次遍历合并,这样一次遍历就可以得到所有的若当块和最大若当块尺寸。

    %搜索最大维度
    mSize = 0;
    for i = 1:num
        if size(J_{i},1) > mSize
            mSize = size(J_{i},1);
        end
    end
    

    在这里定义特征多项式和其n1n-1次导数除以(n1)!(n-1)!的形式,存入数组备用。

    %定义矩阵多项式的导数
    f_J = [exp(t*x)];
    for j = 1:mSize-1
        f_J = [f_J,diff(exp(t*x),x,j)/prod(1:j)];
    end
    f_J = simplify(f_J);
    

    对每一个若当块求特征函数矩阵,将所有特征函数矩阵对角合并到一起。

    EtJ = [];
    %blkdiag对角合并
    for i = 1:num%若当块索引
        n1 = size(J_{i},1);
        etJ = subs(f_J(1),x,J_{i}(1,1))*diag(ones(1,n1));
        if n1 >= 2
            for j = 1:n1-1%若当块维度索引
                etJ = etJ + diag(subs(f_J(j+1),x,J_{i}(1,1))*ones(1,n1-j),j);
            end
        end
        EtJ = blkdiag(EtJ,etJ);%若当块合并
    end
    EtJ = simplify(EtJ);
    EtA = P*EtJ*(inv(P));
    

    输入:
    A=[210420101] A=\left[\begin{array}{rrr} -2 & 1 & 0 \\ -4 & 2 & 0 \\ 1 & 0 & 1 \end{array}\right]
    输出:

    ans =
    [          1 - 2*t,              t,      0]
    [             -4*t,        2*t + 1,      0]
    [ 2*t - exp(t) + 1, exp(t) - t - 1, exp(t)]
    

    3.代入矩阵A的指数函数得最终解

    定义函数

    function [x,EtA] = my_solve_equation( A,b,co,to )
        %输入:A系数矩阵,b非齐次项(齐次为0,co初始值,to初始时刻
        %一阶线性常系数非齐次\齐次微分方程组
    

    tt替换为tt0t-t_0求解解得第一项

    %先求矩阵A指数函数
    [EtA,~,~] = my_expm( A,1 );
    syms t s
    Firs = subs(EtA,t,t-to)*co;
    

    求解第二项矩阵积分项

    b = subs(b,t,s);%一步符号替换
    E_tA = subs(EtA,t,-s);
    Secn = EtA*int(E_tA*b,s,to,t);
    x = simplify(Firs + Secn);
    

    输入:
    A=[210420101]b(t)=[12et1]x(0)=[111]t0=0 \boldsymbol{A}=\left[\begin{array}{rrr} -2 & 1 & 0 \\ -4 & 2 & 0 \\ 1 & 0 & 1 \end{array}\right]\quad \boldsymbol{b}(t)=\left[\begin{array}{rrr} 1\\ 2\\ e^{t}-1 \end{array}\right]\quad \boldsymbol{x}(0)=\left[\begin{array}{rrr} 1\\ 1\\ -1 \end{array}\right]\quad t_0 = 0
    输出:

    ans =
                  1
                  1
     exp(t)*(t - 1)
    
    展开全文
  • 实验八:用 MATLAB 函数编写并求解微分方程 一实验原理 为了对连续系统进行方针, 首先需要建立其数学模型, 然后利用计算机求这些数学模型, 从而得出数学模型的数值解 由于连续系统是通过微分方程老建模的, 因此对此的...
  • matlab求解微分方程数值解

    千次阅读 2017-08-16 19:06:27
    求解如下常微分方程组,其中有s和i两个变量 首先声明这个函数文件 function y=infect(t,x) lamp=11; u=3; y=[lamp*x(1)*x(2)-u*x(1),-lamp*x(1)*x(2)]'; x(1)代表i x(2)代表s 利用ode45对其求数值解 ode...
  • 求微分方程的解 自牛顿发明微积分以来微分方程在描述事物运动规律上已发挥了...本实验主要探讨如何用 Matlab 来计算微分方程组的数值解并重点介绍一个求解微分方程的基本数值解法Euler折线法 问题背景和实验目的 考虑
  • 这是一个如何将二阶微分方程改写成两个一阶微分方程以便利用MATLAB的诸如ODE45等求解求解的例子。下面的方程组包含了一个一阶与一个二阶微分方程: x'= - y*exp(-t/5) y' * exp(-t/5) 1; (1) y''= -2*...
  • 实验2 利用matlab解非线性微分方程组 一实验目的 1线性方程组的解法直接求解法和迭代法 2非线性方程以及非线性方程组的求解 3微分方程的数值解 二实验内容 1对于下列线性方程组 请用直接法求解 > x=A\B x = 2.1295 0...
  • 利用左除运算符的直接解法利用矩阵分解求解线性方程组迭代法雅可比迭代法高斯迭代法 直接法 1.利用左除运算符的直接解法 == Ax=b→x=A\b== ps:如果矩阵A是奇异的或者接近奇异的,则matlab会给出警告。 利用矩阵分解...
  • 1、如下公式: 其中x、y、m、n为参数,a、b为未知数,利用MATLAB求解方程; syms x y m n a b; [a,b]=solve('x=m*cos(a)+n*cos(a+b)','y=m*sin(a)+n*sin(a+b)','a','b'); 会得到四解;对a(3)、b(3)、a(4)、b...
  • 引入首先用高数知识求解非齐次常系数微分方程image.png再利用信号与系统中冲激响应求解验证image.png利用MATLAB求解验证y=dsolve('D2y+3*Dy+2*y=exp(-t)','y(0)=1','Dy(0)=2','t')得出结果:y =(t - 2 exp(-t) + 3) ...
  • 2.1 建立偏微分方程组 2.2 利用PDE Modeler求解 2.3 误差分析 附录 MATLAB代码1 PDE Modeler使用方法介绍物理学中的偏微分方程(PDE)无处不在,如热传导方程、扩散方程、电磁场方程,甚至量子力学中也能大量...
  • PAGE / NUMPAGES 第7章 MATLAB解方程与函数极值 7.1 线性方程组求解 7.2 非线性方程数值求解 7.3 常微分方程初值问题的数值解法 7.4 函数极值 7.1 线性方程组求解 7.1.1 直接解法 1利用左除运算符的直接解法 对于...
  • 工程中有许多问题可以归结为偏微分方程问题,如弹塑性力学中研究对象(结构、边坡等)内部的应力应变问题、地下水渗流问题等。这些由偏微分方程及边界条件、初始条件等组合...Matlab采用有限元法求解微分方程的数值解
  • MATLAB 线性方程组求解 MATLAB 非线性方程数值求解 MATLAB微分方程初值问题的数值解法 MATLAB 最优化问题求解 6.1 线性方程组求解 6.1.1 直接解法 1 利用左除运算符的直接解法 高斯消元法主元素消元法平方根法...
  • 01-线性方程组求解 % 第六节-数值微分与方程求解 % 01-线性方程组求解 % 1、直接法 % 2、迭代法 % 线性方程组的直接解法 % 高斯(Gauss)消去法 % 列主元消去法 % 矩阵的三角分解法 % 1、利用左除运算符的...
  • “有关数值微分于积分的命令。...利用LU、QR分解求解线性方程组;Jacobi、Gauss-Serdel迭代法求解线性方程组;(这个不作要求,能看懂最好)单变量非线性方程求解;fzero、fsolve、optimset07—MATLAB数值微分...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

利用matlab求解微分方程组

matlab 订阅