精华内容
下载资源
问答
  • ode45求解微分方程组
    千次阅读
    2020-08-19 13:12:18

    适用非刚性方程

    [T,Y] = ode45(odefun,tspan,y0)
    解算 y′=f(t,y) 形式的方程组
    [t,y] = ode45(odefun,tspan,y0,options) 还使用由 options(使用 odeset 函数创建的参数)定义的积分设置。例如,使用 AbsTol 和 RelTol 选项指定绝对误差容限和相对误差容限

    odefun 是函数句柄,可以是函数文件名,或匿名函数句柄
    tspan是区间[t0 tf] 或者一系列时间散点[t0,t1,…,tf]
    y0是初始值向量
    T返回列向量的时间点
    Y返回对应T的求解列向量
    生成的输出即为时间点 t 的列向量和解数组 y。y 中的每一行都与 t 的相应行中返回的时间相对应。y 的第一列与 y 1 y_1 y1 相对应,第二列与 y 2 y_2 y2 相对应。

    ode45 仅适用于使用两个输入参数(t 和 y)的函数。但是,可以通过在外部定义参数并在指定函数句柄时传递这些额外参数。

    A = 1;
    B = 2;
    tspan = [0 5];
    y0 = [0 0.01];
    [t,y] = ode45(@(t,y)[y(2);(A/B)*t.*y(1)], tspan, y0);
    plot(t,y(:,1),'-o',t,y(:,2),'-.')
    

    - [example 1]

    function Testode45
    tspan=[3.9 4.0]; %求解区间
    y0=[8 2]; %初值
    [t,y]=ode45(@odefun,tspan,y0);
    plot(t,y(:,1),'-o',t,y(:,2),'-*')
    legend('y1','y2')
    title('y"=-t*y + e^t*y"+3sin2t')
    xlabel('t')
    ylabel('y')
    end
    function dx=odefun(t,x)
    dx=zeros(2,1); % 列向量
    dx(1)=x(2);
    dx(2)=-t*x(1)+exp(t)*x(2)+3*sin(2*t); %常微分方程公式
    end
    

    tspan=[3.9 4.0]; %求解区间
    y0=[8 2]; %初值
    [t,y]=ode45(@(t,y)[y(2);-t*y(1)+exp(t)*y(2)+3*sin(2*t)],tspan,y0);
    plot(t,y(:,1),'-o',t,y(:,2),'-*')
    legend('y1','y2')
    title('y"=-t*y + e^t*y"+3sin2t')
    xlabel('t')
    ylabel('y')
    

    tspan=[3.9 4.0]; %求解区间
    y0=[8 2]; %初值
    fcn=@(t,y)[y(2);-t*y(1)+exp(t)*y(2)+3*sin(2*t)];
    [t,y]=ode45(fcn,tspan,y0);
    plot(t,y(:,1),'-o',t,y(:,2),'-*')
    legend('y1','y2')
    title('y"=-t*y + e^t*y"+3sin2t')
    xlabel('t')
    ylabel('y')
    

    - [ example 2]

    % 表示该方程组
    m = 1;
    dy = @(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m];
    y0=[1;-10];
    tspan = [0, 5];
    
    % m = 1,质量为1
    [t_m_1, y_m_1] = ode45(dy, tspan, y0);
    % m = 2质量为2
    m = 2;
    dy = @(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m];
    [t_m_2, y_m_2] = ode45(dy, tspan, y0);
    
    % plot
    subplot(1, 2, 1);
    plot(t_m_1, y_m_1(:, 2));
    hold on
    plot(t_m_2, y_m_2(:, 2));
    title('dy/dt')
    legend('m=1','m=2')
    
    subplot(1, 2, 2);
    plot(t_m_1, y_m_1(:, 1));
    hold on
    plot(t_m_2, y_m_2(:, 1));
    title('y')
    legend('m=1','m=2')
    
    m = 1;
    y0=[1;-10];
    tspan = [0, 5];
    [t_m_1, y_m_1] = ode45(@(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m], tspan, y0);
    
    % m = 2
    m = 2;
    [t_m_2, y_m_2] = ode45(@(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m], tspan, y0);
    
    % plot
    subplot(1, 2, 1);
    plot(t_m_1, y_m_1(:, 2));
    hold on
    plot(t_m_2, y_m_2(:, 2));
    title('dy/dt')
    legend('m=1','m=2')
    subplot(1, 2, 2);
    plot(t_m_1, y_m_1(:, 1));
    hold on
    plot(t_m_2, y_m_2(:, 1));
    title('y')
    legend('m=1','m=2')
    
    更多相关内容
  • ode45求解微分方程

    千次阅读 2021-03-27 19:15:23
    如何利用matlab中的ode45求解一阶和二阶微分方程 建议大家先看ode45的使用文档,再来看我的博客,拿我这个当个练习做吧,文档链接在文章底部 1.求解一阶微分方程 这是随机共振中的Langevin方程,现在我们来求解x ...

    如何利用matlab中的ode45来求解一阶和二阶微分方程

    建议大家先看ode45的使用文档,再来看我的博客,拿我这个当个练习做吧,文档链接在文章底部

    1.求解一阶微分方程

    这个在这里插入图片描述
    这是随机共振中的Langevin方程,现在我们来求解x
    先在matlab中新建一个脚本写一个函数
    注:图中的D=0.31

    function dx=funct(x,t)
    dx=1*x-1*x^3+0.3*sin(2*pi*0.01*t)+sqrt(2*0.31)*randn(size(t));
    end
    

    在另一个脚本中调用这个函数

    hh=ode45('funct',[0,1000],0);
    

    这样就可以了,比一般的自己写一个利用龙格库塔四阶方法求解要简单的多,下边放一下这个方法

    function x=sr(a,b,h,x1)
    x=zeros(1,length(x1));
    for i=1:length(x1)-1
        k1=a*x(i)-b*x(i).^3+x1(i);
        k2=a*(x(i)+k1*h/2)-b*(x(i)+k1*h/2).^3+x1(i);
        k3=a*(x(i)+k2*h/2)-b*(x(i)+k2*h/2).^3+x1(i);
        k4=a*(x(i)+k3*h)-b*(x(i)+h*k3).^3+x1(i);
        x(i+1)=x(i)+(h/6)*(k1+2*k2+2*k3+k4);
    end
    

    这个里边还是有一点错误的(有几个参数写的不对,大家可以对照着数值分析的课本改一下)
    好,下边来解一下二阶的微分方程

    2.求解二阶微分方程

    在这里插入图片描述

    (这个图片不知道为啥正不过来0.0)
    要先将二阶方程化成这种形式,然后就可以编写函数了

    function xp=func(t,x)
    xp=zeros(2,1);
    xp(1)=x(2);
    xp(2)=(157*x(1)-5*10^7*x(1).^3-0.29*x(2)+0.1*sin(50*t))/0.01;
    end
    
    [t,x]=ode45('func',[0,50],[0,0]);
    plot(x(:,1),x(:,2));
    

    (我这里t的取值本来是1000的,我给取小了一点,太大的话,程序要运行好久)
    结果如下
    在这里插入图片描述
    好了,以上就是利用matlab中的ode45来求解一阶或者二阶的微分方程了,妈妈再也不用担心我不会解方程了。。。。。。。
    链接:https://pan.baidu.com/s/1BMxvd_J4Qorz1hYf3LDsyg
    提取码:2333
    复制这段内容后打开百度网盘手机App,操作更方便哦

    展开全文
  • ode45的格式: [t,y] = ode45(odefun,tspan,y0) [t,y] = ode45(odefun,tspan,y0,options)...一阶微分方程: 示例: 首先创建一个func2.m函数存放方程表达式: functionBiubiu = func2(h, t) g = 9.8; Biubiu = (100

    ode45的格式:

    
        [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(___)
        
    

    一阶微分方程:
    示例:
    在这里插入图片描述
    首先创建一个func2.m函数存放方程表达式:

    functionBiubiu = func2(h, t)
    g = 9.8;
    Biubiu = (10000*pi/sqrt(2*g))*(h.^(3/2) - 2*(h.^(1/2)));
    end
    

    接着在MATLAB命令窗口输入:

    tspan = [1 0];%函数范围
    t_1 = 0;%初值
    [h,t] = ode45(@func2, hspan, t_1);
    plot(h,t);%绘图
    

    在这里插入图片描述

    展开全文
  • % 调用语句 [T1,Y1] = ode45( @odefun, tspan, y0); % 绘图 figure plot(T1,Y1(:,1)) xlabel 时间 ylabel S title '\Lambda=0.2' figure plot(T1,Y1(:,2)) xlabel 时间 ylabel E title '\Lambda=0.2' figure plot...

    1、内容简介


    418-可以交流、咨询、答疑

    2、内容说明


    3、仿真分析

    function dy = odefun(t,y)
    lameda = 0.2;
    alpha = 0.35;
    beta = 15;
    miu = 0.3;
    theta = 0.05;
    phi = 0.4;
    dy = zeros(4,1);    % 
    S = y(1);
    E = y(2);
    I = y(3);
    R = y(4);
    dy(1) = -lameda*beta*I*S-theta*beta*I*S;
    dy(2) = lameda*beta*I*S-(alpha+phi)*E;
    dy(3) = alpha*E-miu*I;
    dy(4) = theta*beta*I*S+phi*E+miu*I;
    end
    %-----------------------------------------------------
    % 清空所有变量
    clear
    % 清空屏幕
    clc
    close all
    % 时间跨度取0-120,可以空格分隔,也可以用逗号分隔
    tspan = [0,40];
    % 初始值
    S_0 = 0.9998;E_0 = 0; I_0 = 0.0002; R_0 = 0;
    y0 = [S_0 E_0 I_0 R_0];
    % 调用语句
    [T1,Y1] = ode45( @odefun, tspan, y0);
    % 绘图
    figure
    plot(T1,Y1(:,1))
    xlabel 时间
    ylabel S
    title '\Lambda=0.2'
    figure
    plot(T1,Y1(:,2))
    xlabel 时间
    ylabel E
    title '\Lambda=0.2'
    figure
    plot(T1,Y1(:,3))
    xlabel 时间
    ylabel I
    title '\Lambda=0.2'
    figure
    plot(T1,Y1(:,4))
    xlabel 时间
    ylabel R
    title '\Lambda=0.2'


    4、参考论文

     

    展开全文
  • 导入matlab后添加另一个gearsolve函数,使用ode45进行t为0.001:0.001:1000和刚度ky数组,即可获得齿轮的全自由度运动图像
  • ode45微分方程组,结果数量级居然为10e304,请各位帮忙看看啊。问题为求解一个7自由度系统(两个移动5个转动)在初始位移激励下个自由度的的位移和加速度。目标函数function dq=Est(t,q)globalH I1 I4 I5 tha10 tha...
  • odetb23求解二阶微分方程,采用固定步长,并且可以显示计算结果,供大家参考。
  • 用MATLAB中的ode45函数求解微分方程

    万次阅读 多人点赞 2021-09-09 21:03:07
    在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...
  • 假设要解下面这个微分防方程:我们把这个Second order differential equation(二阶微分方程)改写乘一阶微分方程组的形式。令 则。ode45这个微分方程求解器的用法如下: 我们编写如下代码,把微分方程写出来。这里的...
  • matlab求解含时微分方程组-ode45龙格库塔方法.docx
  • %函数function dxdt=differential(t,x)dxdt=[x(1)*(1-x(1))*(195.75-223.23*x(2));x(2)*(1-x(2))*(51.75-38....end复制代码clear%y-xfor i=0:0.1:1for j=0:0.1:1[T,Y]=ode45('differential',[0 5],[i j]);figure(1...
  • ODE45——求解状态变量(微分方程组

    万次阅读 多人点赞 2020-03-10 21:06:07
    ode45实际上是数值分析中数值求解微分方程组的一种方法,4阶五级Runge-Kutta算法。 调用方法 [t,x]=ode45(Fun,tspan,x0,options,pars)[t,x]=ode45(Fun,tspan,x_0,options,pars)[t,x]=ode45(Fun,tspan,x0​,options,...
  • 毕业论文卡在这一步了,有人指点的话,万分感谢。 大概就是一个耦合方程,好像是语句问题,我第一次学习ODE45,不太清楚应该怎么修改。
  • Matlab通过ode求解微分方程

    千次阅读 2022-04-06 23:03:59
    并不是所有的微分方程都可以用同样的方法求解,所以MATLAB提供了许多不同的常微分方程求解器,如ode45ode23、ode113等。 考虑一个细菌种群数学模型 b=1,p=0.5 function dx = bacteriadiff(t,x) b=1; p=0.5;...
  • 简单的微分方程边值问题(BVP),1stOpt很容易求解:Variable t=[0,2*pi],y=[1,1],y'=[0,0];Plot t[x],y, y'[y2];ODEFunction y'''=y''-y'+y;复制代码目标函数: 1.04603504250813E-13边值估算:y''(t=0): -1....
  • 使用 matlab 自带的 ode45方程组用句柄表示。
  • 本人需要用ODE15s解一个微分方程组,形式如图中圈出来的。看过matlab help文件后还是不知道具体怎么使用,参数怎么设置。有没有大神能举个类似例子让我看一下。(我要解的方程质量矩阵里面不是常数,包含了y) 看图...
  • 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
  • 0.19443*X(41)^50 + 0.19175*X(42)^50 + 0.18942*X(43)^50 + 0.18742*X(44)^50 + 0.18572*X(45)^50 + 0.18433*X(46)^50 + 0.18323*X(47)^50 + 0.18241*X(48)^50 + 0.18186*X(49)^50 + 0.18159*X(50)^50 - 8364.2*X...
  • Matlab(1)使用ode45求解微分方程

    万次阅读 多人点赞 2018-07-08 12:29:44
    这里是使用Matlab中的ode45求解微分方程数值解的简单说明。具体可使用"help ode45"命令查看它的帮助文档。ode45求非刚性微分方程的解,中阶方法。使用语法为 [T,Y] = solver(odefun,tspan,y0)下面举例...
  • matlab关于ode45解二阶微分方程的困惑

    千次阅读 2021-04-18 17:30:04
    matlab关于ode45解二阶微分方程的困惑matlab关于ode45解二阶微分方程...过程:先降阶为一阶微分方程组y'=zz'=-z-y+sin(t)编制如下函数m文件function dy=weifen(t,x)dy=zeros(2,1);%y=x(1)%z=x(2)dy(1)=x(2);dy(2)=s...
  • 通过ode45算法来解决一类微分方程和微分方程组求解问题,matlab源代码
  • Matlab使用ode45求解高阶微分方程

    千次阅读 2021-04-18 03:18:30
    原问题为利用ode45求解下面微分方程:初值为可以转为二阶微分方程利用Matlab求解,下面为源代码functionMyode45tspan = [2,4]; %求解区间y0 = [1 0]; %y0的初值形式为行向量[t,x] = ode45(@odefun,tspan,y0); %使用...
  • 问下当设置tspan为0-1.7的时候,图中显示黑线和蓝线在1.4到1.6秒之间相交,但当设置tspan为1.4-1.6的时候,新的图里两条线又不相交了,这是怎么回事啊
  • matlab求解微分方程组——dsolve与ode45

    万次阅读 多人点赞 2020-02-08 22:12:49
    本文主要介绍matlab中求解常微分方程(组)的dsolve和ode系列函数,并通过例子加深读者的理解。 一、符号介绍    D: 微分符号;D2表示二阶微分,D3表示...dsolve函数用于微分方程组的精确解,也称为常...
  • 这个是我目前求得的结果,现在想要把其中第一个解和第二个解的比值作为得到的结果,但是不知道应该要怎么写。请求指教。谢谢。
  • 求解微分方程组 依赖 用 Fortran 90 编写的代码 gfortran 编译器 使用 Matlab/Octave 绘制解决方案 如何使用 运行代码 代码在 Fortran 90 中运行,您将需要一个 Fortran 编译器,例如 gfortran。 在代码中更改了...

空空如也

空空如也

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

ode45求解微分方程组