2015-04-02 82 views
1

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

+2

是输入'2 * T^2 +5吨+ 6'存储为一个字符串?另外,在输入中不应该是'.5 * t'吗? – Divakar 2015-04-02 09:25:19

+0

@Divakar:我现在编辑了这个问题。 – user172675 2015-04-02 09:33:33

+1

你错过了回答第一个问题。 – Divakar 2015-04-02 09:34:31

回答

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 
+2

['vectorize'](http://de.mathworks.com/help/matlab/ref/vectorize.html)! (还处理替换后突然发生的'..') – knedlsepp 2015-04-02 09:34:25

+0

@knedlsepp哦,现在我明白你的意思了! – 2015-04-02 09:47:20

+0

谢谢。你最后的回答正是我所追求的。 – user172675 2015-04-02 09:53:46

相关问题