2013-11-28 120 views
2

我有一個匿名函數匿名函數:Matlab的與陣列輸入

a = [1, 2]; 
b = [1, 1; 3, 2]; 
c = [4, 2]; 
ff = @(x) (exp(a .* x) .* c) * b; 

的問題是,當我有一個數組,說x = [1,2,3,4],MATLAB認爲我使用的陣列和乘法,在指數,而不是每個元素。 錯誤是

錯誤使用。* 矩陣尺寸必須一致。

錯誤 @(X)(EXP(A * X)。* C)* B

我只需要像c1 * exp(a1 *x) * b11 + c2 * exp(a2 * x) * b21 + ...

我可以用一個for循環,如果我想評估每個x元素的函數,它給了我想要的答案,但我認爲可能有一個最簡單的方法,就像我們可以簡單地使用f(x)並獲取函數中評估的每個元素的數組一樣。我嘗試使用arrayfun,但我得到了同樣的錯誤。我想跳過for循環,因爲它們對於較大的矩陣很慢。

+0

你肯定是說'C1 * EXP(A1 * X)* B11 + C2 * EXP(A2 * X)* B21 + ...'? –

+0

是的,對不起,我會糾正我的問題 –

+0

你的結果應該是多少(對於給定的示例值)? –

回答

1

這個怎麼樣:

results = arrayfun(ff, x , 'UniformOutput', false); 
results{:} 
+0

這似乎工作得很好,謝謝。 '{:}'做什麼?因爲用第一個命令,我得到'[1x2 double]' –

+1

@DavidWinchester'arrayfun'返回一個單元格。 'results {:}'只會輸出結果。 – Marcin

+0

我可以將結果存儲在新陣列中嗎?做結果=結果{:}'只給我第一個值 –

1

使用arrayfun(ff,x,'UniformOutput',false)返回對應於您的四個輸出的4個單元。 我認爲它應該是c1 * exp(a1 *x) * b11 + c2 * exp(a2 * x) * b21 + ...否則你需要在乘法之前轉置你的b矩陣。

+0

是的,有人在以前指出,我糾正了我的問題。謝謝。 –