我需要在给定的符号函数中创建一个用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)
是否有人表现相似,或者有人指出我采取最佳方法吗?
答案 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