如何在 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
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