2015-09-15 235 views
0

我正在運行一個腳本調用一個函數,並在函數內它從矩陣中獲取一個值。 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 

回答

1

在調用腳本定義K作爲載體。因此,函數yi也是一個向量。因此,(vi - yi)^2中的錯誤。

2

在下面的代碼,創建一個1×N個矢量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和兩個標量相乘,這將產生一個1×N個向量:

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 s,而不是在循環內),這將極大地加快你的代碼。它可能很複雜,但可能會使您的執行時間大大減少。