0

我有以下问题。我正在尝试创建一个函数句柄,它是一个向量。特别是,我有这样的东西

    EQ0 = @(W) m1.^2*(exp(W))-m2.^2

其中 m1 和 m2 是相同维度的向量。因此,对于每个 m1(i) 和 m2(i),我想要一个句柄 W(i)。我需要它以便在下一步中使用 fsolve 在看起来像这样的东西中找到那些 W(i)

    n=size(m1)        
    x0 = zeros(n);
    Wbar = fsolve(EQ0,x0)

我曾尝试使用 arrayfun,但收到以下错误

   EQ0 = arrayfun( @(W) m1.^2*(exp(W))-m2.^2, m1=m1e, m2=m2e)
   Error: The expression to the left of the equals sign is not a valid target for an assignment.

使用 arrayfun 的另一种尝试导致了这种情况(这里我只是直接使用 m1 和 m2 向量,而不是像以前的情况那样作为输入)

    EQ0 = arrayfun( @(W) m1.^2*(exp(W))-m2.^2,:)
    Undefined variable arrayfun.

我显然错过了一些东西。我查看了一些关于 arrayfun 的提要,但看起来我的问题有些不同。

任何建议表示赞赏。

4

1 回答 1

0

因此,如果我理解正确,您希望为每个 m1(i) 或 m2(i) 拥有一个单独的函数句柄 EQ0(i),它可以通过以下方式与向量 W 一起操作 EQ0(i) = @(W) m1 (i)^2*(exp(W))-m2(i)^2。它是否正确?如果是这样,您可以创建一个与 m1 相同维度的元胞数组,并在每个维度中使用函数句柄:

EQ0 = cell(size(m1));
for ii = 1:numel(m1)
   EQ0(ii) = {@(W) m1(ii)^2*exp(W)-m2(ii)^2};
end

编辑:另一种选择可能是:

EQ0 = @(W)arrayfun(@(Wel,m1el,m2el)m1el^2*exp(Wel)-m2el^2,W,m1,m2);
fsolve(EQ0, W_Values)

这里 m1, m2 应该预先定义。否则,您必须将它们添加为第一个匿名函数的参数。因此,通过调用arrayfun(@(Wel, m1el, m2el)..., W, m1, m2)您对W, m1, m2传入 arrayfun 的第一个参数的匿名函数句柄定义的条目进行元素计算。但是由于您想W每次都定义不同的,因此您创建了该 arrayfun 命令的匿名函数,该函数将其W作为参数。

于 2016-07-06T22:53:24.137 回答