【问题标题】:Odes15 sub plotting, differential equationsOdes15 子绘图,微分方程
【发布时间】:2014-12-11 22:26:33
【问题描述】:

所以我有三个与糖尿病有关的微分方程,我必须绘制三个中的两个,它们是子图中的 G 和 I。出于某种原因,当我尝试运行它时,命令窗口会打印出:“输入参数不足”这是它的标准:

function dx = problem1(t,x)     
    P1 = 0.028735 ;
    P2 = 0.028344 ;
    P3 = 5.035 * 10^(-5) ;
    Vi = 12 ;
    n = 5/54 ;
    D_t = 3*exp(-0.05*t) ;
    U_t = 3 ;
    Gb = 4.5;
    Xb = 15;
    Ib = 15;

    G = x(1);
    X = x(2);
    I = x(3);

    dx = zeros(3,1);
    dx(1) = -P1*(G-Gb) - (X-Xb)*G + D_t ;
    dx(2) = -P2*(X-Xb) + P3*(I-Ib) ;
    dx(3) = -n*I + U_t/Vi ;

    [T,X] = ode15s(@problem1,[0 60*24],[4.5 15 15]) ;

subplot(3,1,1);
plot(T,X(:,1)); % Plot G
subplot(3,1,2); % Second subplot
plot(T,X(:,2)); % Plot I

【问题讨论】:

  • 你得到的最终输出是什么?
  • 它告诉我“输入参数不足”。
  • Matlab 错误信息非常有用。完整的消息是什么?它出现在哪一行?
  • 完整的错误信息是:Error using problem1 (line 7) Not enough input arguments.
  • 真的不知道从哪里开始。我已经尝试查看并关注 MATLAB 网站的 ode15s 示例。

标签: matlab matlab-figure ode differential-equations subplot


【解决方案1】:

当您运行该函数并且 MATLAB 尝试计算 D_t = 3*exp(-0.05*t); 时会引发错误。由于没有给出 t 的值,MATLAB 会抛出一个错误,指出必须指定到该点之前未使用的 t 变量。

代码的主要问题在于函数的设计。即,ode15s 需要一个接受tx 并返回dx 的函数;然而,按照目前的布局,对ode15s 的调用嵌入在problem1 中,而problem1 本身需要tx。这是一个先有鸡还是先有蛋的问题。

所有输入都是正确的,除了这个设计问题,可以使用 ODE 定义的单独函数轻松纠正:

function problem1

    [T,X] = ode15s(@ODE,[0 60*24],[4.5 15 15]) ;  
    subplot(3,1,1);
    plot(T,X(:,1)); % Plot G
    subplot(3,1,2); % Second subplot
    plot(T,X(:,2)); % Plot I

end

function dx = ODE(t,x)
    P1 = 0.028735 ;
    P2 = 0.028344 ;
    P3 = 5.035 * 10^(-5) ;
    Vi = 12 ;
    n = 5/54 ;
    D_t = 3*exp(-0.05*t) ;
    U_t = 3 ;
    Gb = 4.5;
    Xb = 15;
    Ib = 15;

    G = x(1);
    X = x(2);
    I = x(3);

    dx = zeros(3,1);
    dx(1) = -P1*(G-Gb) - (X-Xb)*G + D_t ;
    dx(2) = -P2*(X-Xb) + P3*(I-Ib) ;
    dx(3) = -n*I + U_t/Vi ;
end

注意事项:

  • 第一行function problem1function [] = problem1() 的简写。我自己更喜欢后一种形式,但我是少数。
  • 传递给ode15s @ODE 的函数句柄是@(t,x) ODE(t,x) 的简写。我自己更喜欢后一种形式,但只要你不是parametrizing functions,它就更有效了。
  • 您还可以使用嵌套函数并让 problem1 函数访问模型常量,但我在这里选择了单独的函数。

【讨论】:

  • 谢谢!!!我知道这是对的,因为当教授向我们展示时,我瞥见了解决方案!!!
猜你喜欢
  • 2016-03-08
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
相关资源
最近更新 更多