我目前正在研究 Matlab 函数。
function d = sym_fun(E,A,C)
[n,m] = size(A);
if n==m
X = sym('X%d%d', [n,n]);
Xres = solve(A'*X*E+E'*X*A+E'*(C'*C)*E==0,X);
xres = sym('x%d%d', size(Xres));
for i=1:size(Xres)
xres(i)=Xres(i);
end %for
LD = reshape(xres, [n,n]);
d = diag(LD);
end %if
我正在尝试处理可变大小的符号矩阵。我需要以Xres
某种方式迭代解决方案向量以获得问题的所有解决方案。问题在于 line xres(i)=Xres(i)
,Xres(i)
返回一个结构,我实际上需要调用xres(i)=Xres.X%d%d
它%d=i
才能工作。我不知道如何编码。
如果我可以跳过所有这些并以某种方式将解决方案直接保存到矩阵中,则更好的解决方案是。类似于以下内容:
X = sym('X%d%d', [n,n]);
xres = sym('x%d%d', size(Xres));
xres = solve(A'*X*E+E'*X*A+E'*(C'*C)*E==0,X);
LD = reshape(xres, [n,n]);
d = diag(LD);
我对这个问题的工作,丑陋的解决方案。
function d = fun(E,A,C)
[n,m] = size(A);
if n==m
X = sym('X%d%d', [n,n]);
Xres = solve(A'*X*E+E'*X*A+E'*(C'*C)*E==0,X);
P = sym('x%d%d', [n,n]);
for i=1:n
for j=1:n
P(i,j)= eval(sprintf('Xres.X%d%d',i,j))
end %for
end %for
d = diag(P);
end %if
请给我看一个更好的;eval(sprintf())
是一个丑陋的解决方法。