【问题标题】:Apply constant-value MATLAB function to array将常数值 MATLAB 函数应用于数组
【发布时间】:2015-07-12 23:31:52
【问题描述】:

假设我使用符号表达式生成 MATLAB 函数,它有时可以是一个常数。例如,如果我计算不同曲线的梯度,向量分量之一可以是一个数字:

syms x y;
expr = x^2 - 4*y;
grad = gradient(expr, [x, y]);

grad_func = matlabFunction(grad, 'Vars', [x, y]);

假设我想将其应用于点数组。有没有办法使生成的 MATLAB 函数足够健壮,以始终返回与输入大小相同的数组,即使原始分析表达式(或其某个组件)是常数?

我尝试以下方法:

X = [-1:0.2:1]; 
Y = [-1:0.2:1];
[Gx, Gy] = grad_func(X,Y);

但得到错误:

使用 vertcat 时出错

被连接的矩阵的维度不一致。

symengine 中的错误>makeFhandle/@(x,y)[x.*2.0;-4.0]


我也试过用ARRAYFUN:

[Gx, Gy] = arrayfun(grad_func,X,Y);

但也失败了:

此赋值右侧的值太少,无法满足左侧的要求。

symengine 中的错误>makeFhandle/@(x,y)[x.*2.0;-4.0]

【问题讨论】:

    标签: arrays matlab function symbolic-math


    【解决方案1】:

    数组函数的实现方法

     g = cell2mat(arrayfun(@(x,y) grad_func(x,y), X(:)',Y(:)', 'uni', 0));
     Gx = reshape(g(1, :), size(X));
     Gy = reshape(g(2, :), size(Y));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多