我正在Simulink中编写一款游艇速度预测程序(VPP)(由于我是该论坛的新用户,因此无法上传图片)。解决这个问题需要我知道表观风速和角度(VA和beta),以便获得帆船产生的力,并进而得到净力、加速度和最终速度。然而,VA取决于船速(VS)。我试图通过积分器模块将后者的初始值输入进去,但我一直在“表观风”m函数内收到以下错误:“索引表达式超出范围。尝试访问元素3。有效范围是1-1。”请注意,如果我重新排列模型并向函数提供一个恒定的数值,则它将起作用(虽然所得到的船速不是物理上正确的)。下面是m函数列表。
简化的模块图:
[VT,gamma] -> 表观风 -> 空气动力学和水动力学 -> 力/质量 -> 加速度 -> 1/s -> VS
简化的模块图:
[VT,gamma] -> 表观风 -> 空气动力学和水动力学 -> 力/质量 -> 加速度 -> 1/s -> VS
function [VA, beta] = fcn(inputs)
% 1 - gamma % true wind heading [deg]
% 2 - VT % true wind speed [kts]
% 3 - VS
%#codegen
% apparent wind angle [deg]
beta=atan(sin(inputs(1)*pi/180)/(cos(inputs(1)*pi/180)+inputs(3)/inputs(2)))/pi*180;
% apparent wind speed [kts]
VA=sin(inputs(1)*pi/180)/sin(beta*pi/180)*inputs(2);
end
编辑:现在我可以上传流程图,请查看附加的模型流程图。
VS
是从哪里来的(在方程式beta=atan(sin(inputs(1)*pi/180)/(cos(inputs(1)*pi/180)+VS/inputs(2)))/pi*180;
中使用)? - grungettainput
输入到你的MATLAB函数中。所以输入应该是一个由3个元素组成的数组(顺便提一下,你可以使用Mux而不是Bus Creator块来实现相同的结果)。为了访问信号VS,你需要做类似于VS=input(3);
这样的操作。因为你没有这样做,我不清楚在你的代码中变量VS
(而不是模型中的信号VS)是否真的被赋值了。 - grungetta