我希望使用值数组作为输入来获取函数的结果数组。该函数接收两个变量(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);
答案 0 :(得分:1)
重要的是要注意matrix and element-wise operations in MATLAB之间存在差异。
矩阵运算是通过普通运算符定义的,例如*
或^
。例如,A*B
执行A
和B
之间的矩阵乘法。
元素运算符在运算符之前使用点.
,即.*
,.^
等。因此,A.*B
执行A
和B
的逐元素乘法。此操作的最终结果是与A
和B
(其大小必须相等)相同大小的数组,其中数组的jj
'元素等于{ {1}}。
现在,请考虑您对A(jj)*B(jj)
的定义:
fun
MATLAB评估此表达式时会发生的情况是它将矩阵运算(例如fun = @(x1,x2,x3) (x2-x1^2)^2+(1-x1)^2 + x3;
)应用于输入数组。但是,要获得将操作应用于输入数组^
,x1
中每个元素的所需结果,您应该使用按元素操作。
新定义
x2
应该提供所需的结果。