【问题标题】:Convert meshgrid to vector for 2-value function将网格网格转换为向量以获得 2 值函数
【发布时间】:2016-05-23 07:25:40
【问题描述】:

我有一个类似的功能

f = @(x) x(1).^2 + x(2);

我想通过surf绘制它的情节,所以我使用meshgrid生成输入数据:

[x, y] = meshgrid(-2:.2:2);

但是如果我尝试将它传递给这样的函数

z = f([x; y])

我在结果中只得到一个值。

除了制作一个接受两个参数(x,y)而不是向量的函数之外,还有其他方法吗?

【问题讨论】:

  • 你确定需要让你的函数接受两个参数吗?你为什么不想呢?
  • fminsearchnonlin_min 等函数想要这种形式,所以我需要使用匿名函数将向量转换为 x、y。
  • 那么你有两个选择,要么使用包装函数将其从一种形式转换为另一种形式(我会将其添加到我的答案中),要么像我展示的那样矢量化你的函数f我回答的第一个例子。如果您使用fminsearch 添加您的实际问题,而不是使用surf 顺便说一句,这将更有意义。

标签: matlab octave


【解决方案1】:

我认为你真的不想让f 接受 2 个参数,我想不出一个很好的理由不这样做,但这可能就是你所追求的:

f = @(x) x(:,1).^2 + x(:,2)

那你可能需要打电话

z = f([x(:),y(:)])

之后您可能需要在z 上致电reshape,所以也许reshape(z,size(x))

但我真的认为 2 参数函数是更好的方法:

f2 = @(x1,x2)x1.^2 + x2

现在你可以走了

z = f2(x,y)

另一种方法可能是使用包装函数,所以如果

f = @(x1,x2)x1.^2 + x2

但是你真的需要一个只接受一个参数的函数,那么呢

f_wrapper = @(x) f(x{1},x{2}) %// using a cell array

或者如果您不想使用元胞数组,那么您可以使用结构体或 3D 数组

f_wrapper = @(x) f(x.x1,x.x2) %// using structs
f_wrapper = @(x) f(x(:,:,1),x(:,:,2)) %// using a 3D matrix

现在,您可以在将xy 打包成单个变量后,将f_wrapper 用于fmincon 之类的东西,因此可以是元胞数组、结构体或3D 矩阵。因此,例如,如果您使用的是上面的单元格数组版本,请尝试

inputVariable = {x,y}

所以写出完整的例子

[x, y] = meshgrid(-2:.2:2);
f = @(x1,x2)x1.^2 + x2;
f_wrapper = @(x) f(x{1},x{2});
inputVar = {x,y};
z = f_wrapper(inputVar)

【讨论】:

  • 为什么是元胞数组和结构体? fminsearch(@(x) f(x(1), x(2))) 还不够吗?
  • 你测试了吗?如果您问我,@(x) f(x(1), x(2))) 看起来与您的原件相同。它只会使用x 的前两个元素,因此它将完全忽略第二个之后的任何元素。
  • 是的,我说的是带有 2 个参数 (@(x, y) x.^2 + y) 的函数的包装器,您回答的第二部分,
  • @AlexP11223 是的,我也是。你测试过吗,我很确定这不会起作用。如果您调用 @(x) f(x(1), x(2))) 但您的 x 有 4 个元素,则永远不会使用 x(3)x(4)。但是,如果您使用我建议的解决方案之一,那么所有元素都会被使用。
  • 是的,我以前试过。 tutorialspoint.com/… 不确定 4 个元素是什么意思,看起来你的解决方案是一样的,只使用了 2 个元素。 fminsearch(@(x) f(x{1}, x{2}) 也因错误而失败,因为 x 不是元胞数组。
【解决方案2】:
clear
f = @(x) (x(:,:,1) - 1).^2 + 5 * (x(:,:,2) - 1).^2;
[x, y] = meshgrid(-2:.05:2); 
q(:,:,1)=x;
q(:,:,2)=y;
z = f(q);
surf(x,y,z)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多