首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用一个值数组作为输入得到一个函数的结果数组(在Matlab中)

使用一个值数组作为输入得到一个函数的结果数组(在Matlab中)
EN

Stack Overflow用户
提问于 2016-04-01 16:50:49
回答 1查看 25关注 0票数 0

我希望使用一个值数组作为输入,得到函数的结果数组。函数接收两个变量(x1、x2)和一个常量x3,因此我尝试使用mesh在一个范围内输入所有组合。

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

示例:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-01 17:09:37

需要注意的是,MATLAB中的矩阵和元素分维运算之间存在差异。

矩阵操作是通过普通运算符(如*^ )定义的。例如,A*BAB之间执行矩阵乘法。

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

现在,考虑一下您对fun的定义

代码语言:javascript
复制
fun = @(x1,x2,x3) (x2-x1^2)^2+(1-x1)^2 + x3;

当MATLAB计算这个表达式时,它会将矩阵操作(如^ )应用于输入数组。但是,要获得将该操作应用于输入数组x1x2中的每个单独元素的预期结果,您应该使用按元素划分的操作。

一个新的定义

代码语言:javascript
复制
fun = @(x1,x2,x3) (x2-x1.^2).^2+(1-x1).^2 + x3;

应该提供想要的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36361734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档