2014-10-19 283 views
-2

我在MATLAB函數上做了一些功課。 任務是製作一個函數acc=accvec(m,rv,rl),其計算如下:
Matlab - 尺寸不匹配

其中m是3x1陣列,rv是3x3x3陣列而rl是3x3陣列。我的解決方案如下:

function acc=accvec(m,rv,rl) 
% calculate the acceleration of the object 
s=size(rv); 
acc=zeros(s(1),s(2)); 

global G 

for i=1:s(2) 
    for j=1:s(2) 
     if i ~= j 
      for k=1:3 
       acc(k,i)=acc(k,i)-G*m(j)*rl(i,j)./rv(k,i,j)^3; 
      end 
     end 
    end 
end 

這裏是一個link到包含使用的所有功能的RAR文件。如果你給rvr=[1 0 0; 0 1 0; 0 0 1]rl與新鮮計算rvm=[1 2 3]G=1;的結果應該是

acc = 
-1.7678 0.3536 0.3536 
0.7071 -1.4142 0.7071 
1.0607 1.0607 -1.0607 

但我的功能ac拋出一個尺寸不匹配,我只是想不通,爲什麼和我需要其他人看着它並去哦這很簡單。

回答

0

此代碼不工作的原因是因爲G尚未初始化,即使您已將其設置爲global。參照documentation on global,僅在特定程序的生命週期中變量爲global。另外,如果變量爲global,則在執行的腳本生命週期內的所有功能都將能夠看到此變量。

即使您在調用之前可能已將其設置爲您的函數之外的某個東西,但G實際上並未設置爲任何值。請記住,當在MATLAB中調用函數時,所聲明的變量僅在該函數的範圍內定義,因此您在執行函數之前設置的任何值都將不可見。因此,您需要在腳本中自行設置此變量。

如果您手動更改G以使其設置爲1(根據您的帖子),那麼您將能夠得到答案。因此,請改爲:

G = 1; 

您的程序現在應該運行。我其實只是做了一個隨機數據測試,它輸出一個3 x 3的矩陣。但是,您正在計算的公式的準確性我沒有檢查過,所以我將把這些作爲練習留給您。祝你好運!

+0

哦,沒錯。現在運行。我只是發現了錯誤(我翻了rv和rl)。所以現在它會產生正確的結果。謝謝。全局變量的原因是我們假設G被定義爲檢查我們的代碼的網站中的全局變量。我的錯。非常感謝! – SiGF 2014-10-19 17:26:51