如何将Vector / Array传递给符号函数?

时间:2015-09-06 15:35:32

标签: matlab

我想将数组或向量传递给符号函数,如下所示:

syms x y
rosenbrock(x, y) = 100 * (y - x^2)^2 + (1 - x)^2;

value = [0, -1];

rosenbrock(value)

但我找不到办法做到这一点。我还尝试将输入声明为[]

rosenbrock([x, y]) = ...

但我还是得到了

Error using symfun/subsref (line 135)
Symbolic function expected 2 inputs and received 1.

2 个答案:

答案 0 :(得分:1)

如果要传入数组,那么函数的输入参数需要设计为处理数组:

syms x
rosenbrock(x) = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;

value = [0, -1];
rosenbrock(value)

使用类似问题的函数,你需要传入两个与向量value的索引相对应的参数:

syms x y
rosenbrock(x, y) = 100*(y - x^2)^2 + (1 - x)^2;

value = [0, -1];
rosenbrock(value(1), value(2))

这个问题并不是特定于符号数学的 - 你需要为任何Matlab函数做同样的事情。

答案 1 :(得分:0)

实际上,我遇到了类似的问题,你绝对不希望这样 a)设计你的函数来处理数组 要么 b)传递像:

这样的表达式
rosenbrock(value(1), value(2))

解决方案是:

v = num2cell(value);
rosenbrock(v{:});