如何在matlab中用向量的元素和时间函数来表示向量

如何在matlab中用向量的元素和时间函数来表示向量,matlab,vector,symbolic-math,Matlab,Vector,Symbolic Math,我想用这种形式解一些微分方程 dU/dt=A*U,其中U是N个元素的向量,N是来自用户的输入 所以U=[u1(t);u2(t)…uN(t)],A是NxN矩阵 我想要一个向量,它的元素是时间的函数 我可以定义你如下 U=sym('u',[N 1]); 这是输出: u1 u2 . . uN 如果我写这个 eqn= diff(U)==A*U; U=dsolve(eqn); 这就是我犯的错误 {Error using symengine (line 58) Could not extract di

我想用这种形式解一些微分方程

dU/dt=A*U,其中U是N个元素的向量,N是来自用户的输入

所以U=[u1(t);u2(t)…uN(t)],A是NxN矩阵

我想要一个向量,它的元素是时间的函数

我可以定义你如下

U=sym('u',[N 1]);
这是输出:

u1
u2
.
.
uN
如果我写这个

eqn= diff(U)==A*U;
U=dsolve(eqn);
这就是我犯的错误

{Error using symengine (line 58)
Could not extract differential variables to solve for. Use 'solve' or
 'vpasolve' to compute the solutions of non-differential equations.

 Error in mupadengine/feval (line 155)
symengine('error',S(8:find(S=='[',1)-2));

 Error in dsolve>mupadDsolve (line 325)
 T = feval(symengine,'symobj::dsolve',sys,x,options);

 Error in dsolve (line 186)
 sol = mupadDsolve(args, options);
} 
他将U向量的元素视为变量,而不是时间的函数

我该怎么做?

您可以使用和正则表达式来创建字符串
'[u1(t);u2(t);…]'

str= mat2str((1:N).');     % create the string '[1;2;...;N]'
% replace the digit sequences with 'u<digit sequence>(t)'
str= regexprep(str,'(\d)+','u$&(t)');  
u= sym(str);
str=mat2str((1:N)。;%创建字符串“[1;2;…;N]”
%用“u(t)”替换数字序列
str=regexprep(str,“(\d)+”,“u$&(t)”;
u=sym(str);
您可以使用和正则表达式创建字符串
'[u1(t);u2(t);…]'

str= mat2str((1:N).');     % create the string '[1;2;...;N]'
% replace the digit sequences with 'u<digit sequence>(t)'
str= regexprep(str,'(\d)+','u$&(t)');  
u= sym(str);
str=mat2str((1:N)。;%创建字符串“[1;2;…;N]”
%用“u(t)”替换数字序列
str=regexprep(str,“(\d)+”,“u$&(t)”;
u=sym(str);

感谢您使用eqn=diff(u)==A*u输出diff(u1(t),t)==u1(t)+2*u2(t)diff(u2(t),t)==u2(t)-u1(t),但dsolve()u=dsolve(eqn){使用symmengine时出错(第58行)无法提取要求解的微分变量。请使用“solve”或“vpasolve”来计算非微分方程的解。mupadengine/feval(第155行)symengine中的错误('Error',S(8:find(S='[',1)-2));dsolve>MupadSolve(第325行)中的错误T=feval(symengine,'symobj::dsolve',sys,x,options);dsolve中的错误(第186行)sol=mupadDsolve(args,options);}@Marwa Saeed:(对不起,我不知道如何帮助你。该代码对我有用(我安装了MATLAB R2015b)非常感谢。你能给我看一下使用dsolve()的结果吗?谢谢你使用eqn=diff(u)==A*u输出diff(u1(t),t)==u1(t)+2*u2(t)diff(u2(t),t)==u2(t)-u1(t)但是dsolve()u=dsolve(eqn){Error using symmengine(第58行)无法提取要求解的微分变量。使用'solve'或'vpasolve'计算非微分方程的解。mupadeengine/feval(第155行)symmengine中的错误('Error',S(8:find(S='[',1)-2));dsolve>mupadsolve中的错误(第325行)T=feval(symengine,'symobj::dsolve',sys,x,options);dsolve(第186行)中的错误sol=mupadDsolve(args,options);}@Marwa Saeed:(对不起,我不知道如何帮助你。该代码对我有用(我已经安装了MATLAB R2015b)。非常感谢你能告诉我使用dsolve()的结果吗?