将meshgrid转换为2值函数的向量

时间:2016-05-23 07:25:40

标签: matlab octave

我有一个像

这样的功能
f = @(x) x(1).^2 + x(2);

我想通过surf绘制其绘图,因此我使用meshgrid生成输入数据:

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

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

z = f([x; y])

我只得到一个结果值。

除了创建一个接受两个参数(x,y)而不是向量的函数之外,有什么方法可以做到吗?

2 个答案:

答案 0 :(得分:2)

我认为你真的很想让request_room_recordset = self.env['request.room'].search( whatever_domain).ensure_one() et_pool = self.pool.get('email.template') mail_sent = et_pool.send_mail( self.env.cr, 1, template.id, request_room_recordset.id, force_send=True, context=self.env.context) 取两个参数而且我不能想出一个不这样做的好理由,但这可能就是你之后所做的:

f

然后你可能需要打电话

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

之后您可能需要在z = f([x(:),y(:)]) 上致电reshape,所以也许z

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

reshape(z,size(x))

现在你可以去

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

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

z = f2(x,y)

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

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

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

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

现在,在将f_wrapper = @(x) f(x.x1,x.x2) %// using structs f_wrapper = @(x) f(x(:,:,1),x(:,:,2)) %// using a 3D matrix f_wrapper打包成单个变量后,可以在fmincon之类的x中使用y,以便使用单元格数组,结构体或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)

答案 1 :(得分:0)

UITextField