具有按元素运算的 MATLAB 符号输出

标签 matlab symbolic-math

是否有函数或技术可以将 MATLAB 的符号表达式转换为可以按元素计算的表达式?

作为示例,命令

a = solve('x^2 + a*x + b == 0')

给出输出

a = 
   (a^2 - 4*b)^(1/2)/2 - a/2
 - a/2 - (a^2 - 4*b)^(1/2)/2

但是,允许 ab 为数组的所需输出是

a = 
   (a.^2 - 4*b).^(1/2)/2 - a/2
 - a/2 - (a.^2 - 4*b).^(1/2)/2

最佳答案

solve('x^2 + a*x + b == 0') 返回 2x1 符号。我了解您想要评估各种 a 和 b 值的解决方案。为此,您首先需要使用 matlabFunction 将符号转换为函数。

s = solve('x^2 + a*x + b == 0');
f = matlabFunction(s);

现在 f 是两个输入参数 a 和 b 的函数。在三个 a 和 b 值的两个向量上尝试一下:

f([1 2 3],[1 1 1])

您将得到一个 2x3 的解决方案数组。

您还可以使用 subs 来实现您想要做的事情:

subs(s,{'a' 'b'},{[1 2 3 ] [1 1 1]})

将用 [1 2 3] 代替 a,用 [1 1 1 ] 代替 b 并返回 2x3 sym。如果你想评估它,只需使用 eval:

eval(subs(s,{'a' 'b'},{[1 2 3 ] [1 1 1]}))

关于具有按元素运算的 MATLAB 符号输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21291778/

相关文章:

matlab - 生成1到10之间的随机数,matlab中的单个数字除外

Matlab lsqcurvefit() 函数的 Python 等价性

从 Java 调用时,Matlab 在库初始化时崩溃

matlab - 创建一个空的符号矩阵并在 Matlab 中预定义维度?

python - `type` 和 `tuple` 的子类

matlab - matlab中N维曲面与向量的卷积

matlab - MATLAB 中的级联 if/elseif/else 构造是否有简洁的替代方案?

python - SymPy 是否正确求解此 ODE?

python - 将 sympy 表达式分解为矩阵系数?

python - 使用 Sympy 查找系数不包括平方根 (sqrt) 作为值