2015-11-12 41 views
0

我想運行一個包含函數句柄的循環。如果我爲n使用任何特定值,代碼運行良好。然而,當我試圖在循環中運行代碼它給人的錯誤:循環中函數句柄的錯誤(Matlab)

Nonscalar arrays of function handles are not allowed; use cell 
arrays instead. 

我是比較新的MATLAB,所以想了幾個小時,我已經江郎才盡後...任何幫助將不勝感激。

的代碼如下

for m=1:N 
     for n=1:N 
     int(n) = @(w,s0,v,r,t) chfun_norm(s0,v,r,t,w(n)-(alpha+1)*1i)/(alpha^2 + alpha - w(n)^2 + 1i*(2*alpha+1)*w(n)); 
     int(n) = @(w)int(w,s0,v,r,t); 
     g(n) = exp(1i*(b-log(s0))*w(n)-alpha*k(m)-r*t)*int(n)*pond(n); 
     g(n) = exp(-1i*2*pi/N*(n-1)*(m-1))*g(n); 
     end 
y(m) = real(sum(g))*stepw; 
end 

編輯

我一直在使用電池陣列重新循環,但現在我收到以下錯誤

Undefined function 'mtimes' for input arguments of type 'function_handle' 

下面是更新代碼:

y = zeros(N,1); 
intCell = {zeros(N,1)}; 
gCell = {zeros(N,1)}; 
for m=1:N 
    for n=1:N 
     intCell{n} = @(w,s0,v,r,t) chfun_norm(s0,v,r,t,w(n)-(alpha+1)*1i)/(alpha^2 + alpha - w(n)^2 + 1i*(2*alpha+1)*w(n)); 
     intCell{n} = @(w)intCell{n}(w,s0,v,r,t); 
     gCell{n} = exp(1i*(b-log(s0))*w(n)-alpha*k(m)-r*t)*intCell{n}*pond(n); 
     gCell{n} = exp(-1i*2*pi/N*(n-1)*(m-1))*g(n); 
    end 
y(m) = real(sum(g))*stepw; 
end 

回答

1

錯誤消息告訴你到底該做什麼。不看你的代碼實際做什麼,一個非標量數組(你的int)不能保存函數句柄。您必須將多個函數句柄放入單元格數組中。那些能夠容納不同的和混合類型的數據。 int因此需要是單元陣列。

請閱讀如何在Matlab中使用單元格數組。

在一個不相關的註釋中,在具有較強類型的語言中,int可能是一個類型,爲了防止混淆,改變該變量的名稱可能是合理的。

編輯

的第2次故障可能是由8行最後的乘法()你正在嘗試繁殖的功能句柄引起的。我想你想乘以所述函數的返回值?如果是這樣,存儲在intCell中的句柄引用的函數仍然需要執行的參數,如第6行和第7行。

+0

感謝您的回答。 Upvoted。我已經使用單元陣列重新構建了循環。但是我仍然遇到錯誤。如果您可以請指導我更進一步 – sets

+1

我編輯我的答案對應於您的編輯,我會很高興接受您的答案。關於你實際想要計算的一些描述可能會有所幫助。 – freiform

+0

解決。謝謝 – sets