我想将数组或向量传递给符号函数,如下所示:
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.
答案 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{:});