如何在 MATLAB 中将符号表达式转换为矢量化函数?

How to convert symbolic expressions to vectorized functions in MATLAB?

MatLab 可以转换类似

的东西吗
syms t real
2*t^2+5*t+6

2.*t.^2+5.*t+6

自动?

例子

syms t real
a=2;
v=int(a,t);

现在v=2*t所以我想把它转换成v=2.*t

如果你有一个字符串,你可以用regexprep:

替换
>> str = '2*t^2+5*t+6-3/t'
str =
2*t^2+5*t+6-3/t

>> str = regexprep(str, '([\*\^\/])', '.')
str =
2.*t.^2+5.*t+6-3./t

如您所见,这会将所有出现的 *^/ 更改为其点分版本。

如果字符串可能已经包含一些点分运算符,修改正则表达式如下以避免双点:

>> str = '2.*t^2+5*t+6-3./t'
str =
2*t^2+5*t+6-3/t

>> str = regexprep(str, '(?<!\.)([\*\^\/])', '.')
str =
2.*t.^2+5.*t+6-3./t

或者,按照@knedlsepp 的建议,使用vectorize 函数:

>> str = '2.*t^2+5*t+6-3./t'
str =
2.*t^2+5*t+6-3./t

>> str = vectorize(str)
str =
2.*t.^2+5.*t+6-3./t

如果你有一个符号函数,使用matlabFunction to generate an anonymous function:

>> syms t real
>> a=2;
>> v=int(a,t)
v =
2*t
>> v = matlabFunction(v)
v = 
    @(t)t.*2.0

所以现在

>> v(3)
ans =
     6