2011-05-10 42 views
0

我正在嘗試向for循環中的匿名函數添加條款。 (N)log(N)-log(P);等溫線=(N)log(N)-log(P);在for循環中爲匿名函數添加條款

k = 0;等式2 = @(N)(1/T)* an * mpower(N,k);等溫線= @(N)等溫線(N)+等溫線2(N); k = k + 1; end

k = 0;對於bn = b 等於2(b)* mpower(N,k);等溫線= @(N)等溫線(N)+等溫線2(N); k = k + 1; 結束

我試過上面的代碼,但它不能正常工作。我需要使用m文件功能嗎?

+1

什麼不工作?更具體地說,你想完成什麼?等溫線就像一個嵌套的函數調用... – Rasman 2011-05-10 04:57:23

回答

4

這是有點難以遵循你打算做的事情。但是,如果N是一個標值,下面的矢量解決方案應執行所需的計算:

Isotherm = @(N) log(N)-log(P) + ... 
       (1/T)*sum(a.*N.^(0:numel(a)-1)) + ... 
       sum(b.*N.^(0:numel(b)-1)); 

順便說一下,像我希望以下的工作,它實際上:

>> f = @(x) x; 
>> for i = 2:4, f = @(x) f(x) + x.^i; end %# f(x) = x + x.^2 + x.^3 + x.^4 
>> f(2) 

ans = 

    30 %# 2 + 4 + 8 + 16 

>> f(3) 

ans = 

    120 %# 3 + 9 + 27 + 81 

因此,您添加匿名功能的方式可能不是問題的根源,儘管這是一種令人困惑的方式來完成任務,並且可能還有其他一些限制我還沒有找到。

+0

+1用於發現有史以來最不可維護的Matlab編碼習慣用法。 – 2011-05-10 17:37:05

+0

@Andrew:難道不是可怕的**!?但它的作品!我猜每次在循環中重新創建匿名函數時,舊匿名函數f都會被捕獲並保持其當前值不變,就像匿名錶達式中的任何其他非參數變量一樣。我想知道是否有任何限制,比如增加內存使用量以便存儲「凍結」的匿名函數。 – gnovice 2011-05-10 17:47:37