【发布时间】:2020-03-11 00:49:45
【问题描述】:
看起来很多人都遇到了这个问题,但没有一个解决方法对我有用。
我正在使用带有 Simulink 8.4 的 Matlab 2014b。 我正在解决一个描述涡轮增压发动机的 DAE 系统。该系统由 4 个方程组成,其中 2 个是 DAE,2 个是 ODE。对于我尝试使用代数约束块的 DAE,但无法正确模拟。这两个 DAE 的形式为: x = 0中的6次多项式,并且在模拟的每一步都计算系数。我知道一个事实,即系数在一个范围内,该范围仅导致多项式的一个实正根。那就是我要找的那个。
尝试了以下代码:
function x_4 = fcn(A, B)
c = [1, -1, 2*B, -2*B, B^2, -B^2, -A^2];
r = roots(c);
realR = r(imag(r)==0);
posR = realR(realR>0);
x_4 = posR^0.25;
这个错误信息是
Data 'x_4' is inferred as a variable size matrix, while its specified type is something else.
和
An error occurred while propagating data type 'double' through 'gleichungssystem_poly/Gleichung 4/x_4_calc/A'.
我也试过这个代码:
function x_4 = fcn(A, B)
c = [1, -1, 2*B, -2*B, B^2, -B^2, -A^2];
r = roots(c);
x_4 = zeros(1);
if isreal(r(1)) && real(r(1))>0
x_4 = r(1)^0.25;
elseif isreal(r(5)) && real(r(5))>0
x_4 = r(5)^0.25;
elseif isreal(r(2)) && real(r(2))>0
x_4 = r(2)^0.25;
elseif isreal(r(3)) && real(r(3))>0
x_4 = r(3)^0.25;
elseif isreal(r(4)) && real(r(4))>0
x_4 = r(4)^0.25;
elseif isreal(r(6)) && real(r(6))>0
x_4 = r(6)^0.25;
end
也在 for 循环中尝试了整个过程。有趣的是它让我编译和模拟模型,但是 x_4 永远不会是初始化的 0... ..
我非常感谢您对此提供意见!
【问题讨论】:
-
你得到的错误:
Data 'x_4' ...是因为在simulink的Matlab嵌入式代码块中,所有的变量都应该被初始化,并且它们的大小在块内不能改变。另外,我很确定您的第一个代码和第二个代码不会输出相同的内容。 -
嘿安德,我跳过了第二个代码的前三行,因为它们是相同的。现在改变了。你还觉得输出应该不一样吗?关于错误消息,我也可以在第一个代码中初始化
x_4。问题是 Matlab 在编译时不知道posR的大小,但我知道它始终是单个标量。
标签: matlab compiler-errors simulink