【问题标题】:Representing a vector-valued function in matlab在matlab中表示一个向量值函数
【发布时间】:2011-08-15 00:51:34
【问题描述】:

将以下简短的 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 变量?

【问题讨论】:

    标签: matlab cell iterable-unpacking


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

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

      1. 如果向量是二维的,您总是可以将它们打包为复数。

      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

      在我看来,第二个选项是最简洁的(或者您可以只声明 function 而不是使用内联函数。MATLAB 现在支持函数内的函数,类似于 python)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-11
        • 2011-08-05
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多