Matlab 如何解决以下错误";若要重新调整元素的数量,请不要更改“;?

Matlab 如何解决以下错误";若要重新调整元素的数量,请不要更改“;?,matlab,reshape,cell-array,Matlab,Reshape,Cell Array,我想在下面的代码中将一个2x2单元格转换成一个简单的2x2矩阵。在这样做的过程中,我面临着标题中提到的错误。代码如下所示 clc close all clear all A = [0 1;-2 1]; B = [0;1]; Q = [2 6;6 5]; R = 0.25; %x0 = [2;-3]; X0 = [1; 1; 1; 1]; Tf = 5; tm = 0:0.1:Tf; [T X] = ode45(@(t,X)mRiccati(t, X, A, B, Q, R), [0 Tf

我想在下面的代码中将一个2x2单元格转换成一个简单的2x2矩阵。在这样做的过程中,我面临着标题中提到的错误。代码如下所示

clc
close all
clear all

A = [0 1;-2 1];
B = [0;1];
Q = [2 6;6 5];
R = 0.25;
%x0 = [2;-3]; 
X0 = [1; 1; 1; 1];

Tf = 5;
tm = 0:0.1:Tf;

[T X] = ode45(@(t,X)mRiccati(t, X, A, B, Q, R), [0 Tf], X0)

[m n] = size(X);
P = mat2cell(X, ones(m,1), n);
fh_reshape = @(x)reshape(x,size(A));
P = cellfun(fh_reshape,P,'UniformOutput',false);
K= reshape(cat(1,P{:}),size(P))


错误是由于行“K=重塑(cat(1,p{:}),size(p))”引起的。这里怎么了?

您的矩阵
cat(1,p{:})
的大小为146x2,而
size(p)
返回
[73 1]
。你想把它做成什么形状?P包含73个2x2矩阵
P{i}
将返回
i
th 2x2矩阵。您不能将73个2x2矩阵重塑为2x2矩阵。
function dXdt = mRiccati(t, X, A, B, Q, R)
X = reshape(X, size(A)); %Convert from "n^2"-by-1 to "n"-by-"n"
dXdt = A.'*X + X*A - X*B*inv(R)*B.'*X + Q; %Determine derivative
dXdt = dXdt(:); %Convert from "n"-by-"n" to "n^2"-by-1
end