簡體   English   中英

Simulink無法確定模塊“ MATLAB功能”的輸出大小和/或類型

[英]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

  • x1x2x3移動為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM