我希望使用一个值数组作为输入,得到函数的结果数组。函数接收两个变量(x1、x2)和一个常量x3,因此我尝试使用mesh在一个范围内输入所有组合。
结果不正确,我漏掉了一些东西。
示例:
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);发布于 2016-04-01 17:09:37
需要注意的是,MATLAB中的矩阵和元素分维运算之间存在差异。
矩阵操作是通过普通运算符(如*或^ )定义的。例如,A*B在A和B之间执行矩阵乘法。
元素级运算符使用运算符之前的点.,即.*、.^等等。因此,A.*B执行A和B按元素方向的乘法.此操作的最终结果是一个与A和B相同大小的数组(其大小必须相等),其中数组的jj'th元素等于A(jj)*B(jj)。
现在,考虑一下您对fun的定义
fun = @(x1,x2,x3) (x2-x1^2)^2+(1-x1)^2 + x3;当MATLAB计算这个表达式时,它会将矩阵操作(如^ )应用于输入数组。但是,要获得将该操作应用于输入数组x1,x2中的每个单独元素的预期结果,您应该使用按元素划分的操作。
一个新的定义
fun = @(x1,x2,x3) (x2-x1.^2).^2+(1-x1).^2 + x3;应该提供想要的结果。
https://stackoverflow.com/questions/36361734
复制相似问题