使用值数组作为输入获取函数的结果数组(在Matlab中)

时间:2016-04-01 16:50:49

标签: matlab anonymous-function

我希望使用值数组作为输入来获取函数的结果数组。该函数接收两个变量(x1,x2)和一个常量x3,所以我试图在一个范围内使用网格输入它的所有组合。

结果不正确,我遗漏了一些东西。

样品:

fun = @(x1,x2,x3) (x2-x1^2)^2+(1-x1)^2 + x3;
x3 = 7;
fun2 = @(x) fun(x(1,1),x(1,2),x3);

x0 = [2 3];
min = fminsearch(fun2, x0);
disp(min);

x = min(1)-10:1:min(1)+10;
y = min(2)-10:1:min(2)+10;

[X,Y] = meshgrid(x,y);

% I'm getting strange values here, like z < 0, how it is possible if everything is squared in the function.
Z = fun(X,Y,x3);

1 个答案:

答案 0 :(得分:1)

重要的是要注意matrix and element-wise operations in MATLAB之间存在差异。

矩阵运算是通过普通运算符定义的,例如*^。例如,A*B执行AB之间的矩阵乘法。

元素运算符在运算符之前使用点.,即.*.^等。因此,A.*B执行AB的逐元素乘法。此操作的最终结果是与AB(其大小必须相等)相同大小的数组,其中数组的jj'元素等于{ {1}}。

现在,请考虑您对A(jj)*B(jj)的定义:

fun

MATLAB评估此表达式时会发生的情况是它将矩阵运算(例如fun = @(x1,x2,x3) (x2-x1^2)^2+(1-x1)^2 + x3; )应用于输入数组。但是,要获得将操作应用于输入数组^x1中每个元素的所需结果,您应该使用按元素操作。

新定义

x2

应该提供所需的结果。