用matlab表示向量值函数

用matlab表示向量值函数,matlab,cell,iterable-unpacking,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]

将以下简短的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
您可以将其拆分为两个函数:

%# 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);

内联函数不能返回多个输出,这似乎很奇怪。可以采用以下几种解决方法:

  • 如果向量是二维的,则始终可以将其打包为复数

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

  • 使用
    deal
    如下:

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

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