Matlab:用符号方程中的di​​ff(*,t)以编程方式替换* _dot表示法

时间:2016-09-20 15:11:50

标签: matlab

我需要在给定的符号函数中创建一个用diff(variable,t)替换variable_dot的所有实例的函数。我不想告诉函数要查找哪些变量,我希望它能在_dot中以任何结尾操作。

例如:

func = x_dot + y_dot

我想致电newFunc = convertFunction(func)致电

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

是否有人表现相似,或者有人指出我采取最佳方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

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

答案 1 :(得分: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