在matlab中表示向量值函数

时间:2011-08-15 00:51:35

标签: matlab cell iterable-unpacking

将以下简短的python / numpy代码翻译成matlab的最佳方法是什么?

from numpy import *

F = lambda x, y: (-y, x)

points = array(meshgrid([1,2,3], [4,5,6,7]))
vx, vy = F(*points)
print vx, vy

在上面的代码中,F旨在表示矢量值速度字段。具体而言,是否应使用单元格表示向量值函数,还是有更好的方法来表示它?

首次尝试翻译上述代码:

F = @(x,y) {-y, x};

[X, Y] = meshgrid(1:3, 4:7);
rslt = F(X, Y); 
[vx, vy] = rslt{:};

有更优雅的方式吗?例如,匿名函数是否可以返回多个值,以便可以像[vx, vy] = F(X,Y);那样调用它而不必定义中间rslt变量?

2 个答案:

答案 0 :(得分:1)

您可以将其拆分为两个功能:

%# each is a function of two variables
Fx = @(x,y) -y;
Fy = @(x,y) x;

[X,Y] = meshgrid(1:3, 4:7);
vx = Fx(X,Y);
vy = Fy(X,Y);

答案 1 :(得分:1)

内联函数不能返回多个输出似乎很奇怪。有几种解决方法是可行的:

  1. 如果矢量是2D,您可以随时将它们打包为复数。

  2. 您可以将结果编入索引。例如。 v = f(x,y)并使用v(1)v(2)

  3. 使用deal,如下所示:

    f=@(x,y) deal(-y, x)
    [a,b] = f(1,2)
    

    返回:a=-2b=1

  4. 在我看来,第二个选项是最干净的(或者你只能声明一个function而不是使用内联函数.MATLAB现在支持函数内的函数,类似于python)。