我正在尝试解决学校项目的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
另外,条件运算符&amp;&amp;,运行时,MATLAB会抛出此错误,
Operands to the || and && operators must be convertible to logical scalar values.
更改为&amp;似乎是绕过它的唯一方法。
非常感谢任何帮助。
答案 0 :(得分:1)
第一个问题(“Operands to the || and && operators must be convertible to logical scalar values.
”)很容易解决。在if
语句条件的范围内,您必须使用双逻辑运算符(&&
或||
):
if (ec == 1) & (G == false) % WRONG
if (ec == 1) && (G == false) % CORRECT
未定义变量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
上面的陈述也可以简化如下,这应该解决问题,除非我误解了你想要完成的事情:
if (G)
if (z(5) >= 433)
w = 1;
else
w = 0;
G = false;
end
else
w = 0;
end