[英]Simulink cannot determine sizes and/or types of the outputs for block 'MATLAB Function'
我有一個小的Simulink模型,如下所示:
和替換代碼:
function [xdot,y] = fcn(x,u)
% define your constants
g = 9.81;
m = 0.05;
R = 1;
L = 0.01;
C = 0.0001;
x1 = 0.012;
x2 = 0;
x3 = 0.84;
% nonlinear set of equations
xdot = [x2; g-((C/m)*(x3/x1)^2); -((R/L) +(((2*C)/L)*(((x2*x3)/((x1)^2)))))] + [0;0;1/L]*u;
y = x';
但是,當我嘗試運行時,Simulink會產生以下錯誤:
數據“ y”的推斷大小(“ [1 3]”)與指定大小(“標量”)不匹配。 組件:MATLAB函數| 類別:編碼器錯誤由於塊體中的錯誤或底層分析的限制,Simulink無法確定塊“ MATLAB功能”的輸出的大小和/或類型。 錯誤可能不准確。 修正所指示的錯誤,或為所有塊輸出明確指定大小和/或類型。
我在一些文檔中搜索了可變大小的輸入和輸出 ,選中了可變大小復選框,還輸入了上限[1 3]。
當我再次嘗試運行時,我得到:
表示數據“ y”最大的表達式“ [1 3]”必須為標量。
我不確定如何解決此錯誤。 我也看了這里 ,但仍然無法正常工作。 任何幫助,將不勝感激。
您可能會發現,通過進行以下更改,您的代碼將可以正常工作,
您沒有大小可變的數據,可以將所有這些選項設置回其默認值。
(如其他答案之一所示),您需要更改輸入x
進入方程式的方式,因為此刻它還不用於計算xdot
。
將x1
, x2
和x3
移動為Integrator
塊初始條件的3比1向量。 (假設這就是它們的真實含義。)
進行了這些更改后,該塊應檢測到x
信號為3 x
1(因為Integrator
塊具有3個初始值),因此xdot
輸出為3×1, y
輸出為1×3。 。
為了安全起見,您還可以考慮將以下兩行放在函數頂部。
xdot = zeros(3,1);
y = zeros(1,3);
這些行將在塊初始化期間使用,以告知編譯器輸出信號的大小。
注意:為什么要使y
為1×3向量? 這是非常不尋常的,我懷疑您真的希望它是3比1的向量(如果要輸出狀態), 或者應該對x
的值求和以獲得y
在這種情況下,它只是一個標量。
與上述內容無關,但您也可以考慮在塊中設置常量參數,以便無需編輯功能即可更改它們。
我認為您必須像嘗試過的那樣,在“端口和數據”管理器中為功能塊的所有輸入和輸出設置大小設置。
對於大小設置y
到[1 3]
x
至[3 1]
和xdot
至[3 1]
此外,我認為您的非線性狀態空間有一個錯誤,因為您的“ A”矩陣現在是常數。 因此,要使它們依賴於當前狀態,請將x1
等的聲明替換為:
x1 = x(1);
x2 = x(2);
x3 = x(3);
我假設您現在擁有的值是微分方程的初始條件,您必須在積分器塊中進行設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.