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

时间:2015-04-02 09:01:40

标签: matlab symbolic-math

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

1 个答案:

答案 0 :(得分:2)

如果您有字符串,则可以使用regexprep进行替换:

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

>> str = regexprep(str, '([\*\^\/])', '.$1')
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, '(?<!\.)([\*\^\/])', '.$1')
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生成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