【发布时间】:2015-10-21 20:58:07
【问题描述】:
我在 MATLAB 中实现了以下用户定义函数:
function Q = Calc_Q(Head, freq)
b6 = [3.7572E-07 -1.5707E-05 6.0490E-03 5.0018E-02 2.1180E-01];
b5 = [-9.0927E-06 8.9033E-04 -3.2415E-02 5.4525E-01 -8.1649E+00] / 10e2;
b4 = [7.5172E-06 -5.6565E-04 1.0024E-02 3.5888E-01 3.8894E-02] / 10e5;
b3 = [-4.8767E-06 4.8787E-04 -1.3311E-02 -1.2189E-01 -5.3522E+00] / 10e8;
b2 = [5.9227E-06 -8.1716E-04 3.5392E-02 -4.5413E-01 1.9547E+00] / 10e11;
b1 = [-2.0004E-06 2.9027E-04 -1.3754E-02 2.3490E-01 -1.2363E+00] / 10e14;
a = [polyval(b1,abs(freq)), polyval(b2, abs(freq)), polyval(b3, abs(freq)), polyval(b4, abs(freq)), polyval(b5, abs(freq)), polyval(b6, abs(freq)) - Head];
Q_roots = roots(a);
%Delete roots with imaginary part
i = 1;
while i <= length(Q_roots)
if(imag(Q_roots(i)) ~= 0)
Q_roots(i) = [];
i = i - 1;
end
i = i + 1;
end
%Delete roots with real part greater then 3100
i = 1;
while i <= length(Q_roots)
if(Q_roots(i) >= 3100 || Q_roots(i) < 0)
Q_roots(i) = [];
i = i - 1;
end
i = i +1;
end
if freq < 0
Q = real(Q_roots(1)) * -1;
else
Q = real(Q_roots(1));
end
end
当我在 Matlab 中调用此函数时,它工作正常。但是,如果我在 simulink 中使用这个确切的代码作为 MATLAB 函数,它将停止工作。 (实际上它有效,但输出始终为零。)
我确实怀疑问题可能是什么。在调试模式下运行脚本时,我无法查看 Q_roots 的结果(它只是不显示任何内容)。
Q_roots = roots(a);
有什么想法吗?
【问题讨论】:
-
您使用了哪个 Simulink 模块来调用此函数? Simulink 中函数的输入是否正常?
-
我使用了“MATLAB 函数”块...我猜输入没问题...我只是将 2 个常量连接到输入
标签: matlab simulink matlab-coder