Matlab 未定义的函数或变量';w';

Matlab 未定义的函数或变量';w';,matlab,Matlab,我正试图解决一个学校项目的ODE,但我遇到了一个关于一个变量的问题。想知道我是否能得到一些帮助。 我正在使用ODE15s解算器 options = odeset('RelTol',2.22045e-14, 'AbsTol', 1e-6); [T,Y] = ode15s(@odeHMCase5,[0,200],[4.3,5.1,3,0,422],options); 所讨论的变量是条件语句块的一部分,调试时它确实会显示在工作区中 %define G as a global variable glo

我正试图解决一个学校项目的ODE,但我遇到了一个关于一个变量的问题。想知道我是否能得到一些帮助。 我正在使用ODE15s解算器

options = odeset('RelTol',2.22045e-14, 'AbsTol', 1e-6);
[T,Y] = ode15s(@odeHMCase5,[0,200],[4.3,5.1,3,0,422],options);
所讨论的变量是条件语句块的一部分,调试时它确实会显示在工作区中

%define G as a global variable
global G

%Define ec
if z(5) < 453
    ec = 0;
else
    ec = 1;
end

if (ec == 1) & (G == false)
    G = true;
elseif (ec == 1) & (G == true)
    G = true;
elseif (ec == 0) & (G == true)
    G = true;
elseif (ec == 0) & (G == false)
    G = false;
end

if G == false
    w = 0;
elseif (G == true) & (z(5) >= 433)
    w = 1;
elseif (G == true) & (z(5) < 433)
    w = 0;
    G = false;
end
换成&似乎是唯一的解决办法

任何帮助都将不胜感激。

第一个问题(“and&&运算符的操作数必须可转换为逻辑标量值。”)非常容易解决。在
if
语句条件的范围内,必须使用双逻辑运算符(
&&
|
):

未定义变量
w
错误是由于上一个
if
语句以
elseif
结尾,并且没有定义
else
子句。因此,当所有指定条件均未计算为
true
,则不会为变量
w
赋值:

if G == false % THIS CAN ALSO BE REWRITTEN AS: if (~G)
    w = 0;
elseif (G == true) && (z(5) >= 433) % FIX THE LOGICAL OPERATOR
    w = 1;
elseif (G == true) && (z(5) < 433) % FIX THE LOGICAL OPERATOR
    w = 0;
    G = false;
else
    w = ?; % WRITE SOMETHING HERE
end
请显示完整的错误,特别是它发生在哪一行。另外,请提供
odeHMCase5
的完整实现。如果只是添加了函数签名,那么就这样做。另外,由于
G
是全局性的,如果您告诉我们这到底是什么以及如何设置它,将会有所帮助。而且,我们不知道z应该是什么。当你发布一个问题时,错误应该是可以重现的。你的问题并非如此。也请看。
if (ec == 1) & (G == false)  % WRONG
if (ec == 1) && (G == false) % CORRECT
if G == false % THIS CAN ALSO BE REWRITTEN AS: if (~G)
    w = 0;
elseif (G == true) && (z(5) >= 433) % FIX THE LOGICAL OPERATOR
    w = 1;
elseif (G == true) && (z(5) < 433) % FIX THE LOGICAL OPERATOR
    w = 0;
    G = false;
else
    w = ?; % WRITE SOMETHING HERE
end
if (G)
    if (z(5) >= 433)
        w = 1;
    else
        w = 0;
        G = false;
    end
else
    w = 0;
end