2011-05-10 40 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