2016-09-20 85 views
1

我需要創建一個函數,用給定的符號函數中的diff(variable,t)替換variable_dot的所有實例。我不想告訴函數要查找哪些變量,我希望它對以_dot結尾的任何內容進行操作。Matlab:在符號方程中用diff(*,t)代替* _dot表示法

例如:

func = x_dot + y_dot 

我想打電話給newFunc = convertFunction(func)

syms x(t) y(t); 
newFunc = diff(x,t) + diff(y,t) 

是否有人進行類似的,或任何人可以點我朝着最好的辦法採取?

回答

0

您可以使用正則表達式:

s= 'func = x_dot + y_dot' 
expr='\w+_dot' 
new_s= regexprep(s,expr,'diff(${strrep($0,''_dot'','''')},t)') 
0

下面是我使用的基礎上,AVK的答案的解決方案。當他的方法接近時,我遇到了以有效的方式在字符串和符號方程之間轉換的問題。請原諒使用eval,這是我能想到的最快的方式,我更願意改進。

function [ newFunc ] = replaceDotNotation(func) 

vars = symvar(func); 
newFunc = func; 

for i = 1:numel(vars) 
    if endsWith(char(vars(i)), '_dot') 
     expr ='\w+_dot'; 
     newVarName = regexprep(char(vars(i)),expr,'${strrep($0,''_dot'','''')}(t)'); 
     s = ['syms ', newVarName]; 
     eval(s); 
     s = ['newVal = ', regexprep(char(vars(i)),expr,'diff(${strrep($0,''_dot'','''')},t)')]; 
     eval(s); 
     newFunc = subs(newFunc, vars(i), newVal); 
    end 
end 
end