簡體   English   中英

Matlab中的矩陣

[英]Matrices in Matlab

我正在運行一個腳本,該腳本調用一個函數,並且在函數內它從矩陣中獲取一個值。 Matlab似乎認為該值仍然是矩陣,並要求一個值。 當其平方。 我應該從矩陣中得到一個值。 任何幫助,將不勝感激!

產量

使用^時出錯輸入必須是標量和方矩陣。 要計算逐元素的POWER,請改用POWER(。^)。

ls_error(第11行)中的錯誤partialSum =(vi-yi)^ 2;

這是我正在運行的腳本

Exp1H1 = 35.6;
Exp1H2 = 24.7;
Exp2H1 = 46.8;
Exp2H2 = 37.8;
Exp3H1 = 45.7;
Exp3H2 = 36.4;
Exp4H1 = 47.7;
Exp4H2 = 39.2;

Radius = 3.75;
L = 10;

ArrayOfHeightDiff = [(Exp1H1-Exp1H2),(Exp2H1-Exp2H2),(Exp3H1-Exp3H2),       (Exp4H1-Exp4H2)];
dhdl = ArrayOfHeightDiff./L
ArrayOfDarcys = [0.29,0.25,0.26,0.23];
v_meas = ((ArrayOfDarcys.*1000)./60)./(pi*Radius^2)

K = [-0.3 : 0.1 : 0.5];

for ii = 1 : 1 : length(K)
    ExportSum = ls_error(dhdl, v_meas, K)
    ExportSum(1,ii) = ExportSum
end

這是功能

function [ExportSum] = ls_error(dhdl, v_meas, K)

total = 0;           
L = length(dhdl);   

for ii = 1 : 1 : L
    dhdl1 = dhdl(1,ii);
    vi = v_meas(1,ii);        

    yi = 1*K* dhdl1;    
    partialSum = (vi - yi)^2;   
    total = total + partialSum;     
end

ExportSum = total;
end

在下面的代碼中,創建一個1xN向量K ,並將其傳遞給ls_error:

K = [-0.3 : 0.1 : 0.5];

for ii = 1 : 1 : length(K)
    ExportSum = ls_error(dhdl, v_meas, K)
    ExportSum(1,ii) = ExportSum
end

然后,您可以使用此向量K並將其乘以兩個標量,這將產生一個1xN的向量:

yi = 1*K* dhdl1;    
partialSum = (vi - yi)^2;   

由於您無法在向量上執行標量平方運算,所以partialSum計算會給您帶來錯誤。

從您的代碼中,我認為您的意思是:

for ii = 1 : 1 : length(K)
    ExportSum = ls_error(dhdl, v_meas, K(ii))
    ExportSum(1,ii) = ExportSum
end

在此處,而不是傳遞整個向量K ,您只想傳遞第ii個元素以在返回的ExportSum的計算中使用。

進一步說明,解決此錯誤之后,值得對Matlab函數進行矢量化處理 (即,有意將K的整個向量傳遞給它,並使用向量算術而不是在循環內一次計算所有ExportSum ),這將極大地加速您的代碼。 它可能很復雜,但可能會大大減少您的執行時間。

在調用腳本中,將K定義為向量。 因此,在函數中yi也是一個向量。 因此, (vi - yi)^2的誤差。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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