是否有将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
然而,允许a
和b
为数组的所需输出是
a =
(a.^2 - 4*b).^(1/2)/2 - a/2
- a/2 - (a.^2 - 4*b).^(1/2)/2
答案 0 :(得分:5)
solve('x^2 + a*x + b == 0')
返回2x1 sym。我知道你想要评估各种a和b值的解决方案。为此,首先需要使用matlabFunction
将sym转换为函数。
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]}))
答案 1 :(得分:1)
要获得您要求的字符串,有一个MATLAB函数来执行此操作。它被称为vectorize
。
在此处查看更多信息in the MATLAB documentation。该函数插入一个。在任何^,*或/之前。结果是一个字符串。
答案 2 :(得分:0)
我相信你有几个转换操作。
你实际上可以用(a。^ 2 - 4 * b)替换它。^(1/2)/ 2 - a./2
我建议使用3种不同的解决方案,具体取决于表达式中有多少个不同的变量:
编辑:我刚注意到你需要小心括号。
(a。^ 2 - 4 * b)。^(1/2)/ 2 - a./2有效 (a。^ 2 - 4 * b。)。^(1/2)/ 2 - a./2不起作用
所以如果你使用CTRL-F方法,你需要在结尾处用“var。”替换“var。”“