Matlab:无法执行逆运算-如何创建非奇异方矩阵

Matlab:无法执行逆运算-如何创建非奇异方矩阵,matlab,time-series,covariance,correlation,matrix-inverse,Matlab,Time Series,Covariance,Correlation,Matrix Inverse,我在尝试矩阵运算。数据是一个时间序列模型-自回归模型,AR(2),其中模型顺序p=2由高斯白噪声激发的变量Y表示,epsilon。我被概念性问题所困扰,对此我将不胜感激。该代码在将1个采样的时间延迟向量Y与1个采样的时间延迟向量的转置相乘后计算自相关矩阵。相关性的一般公式是E(Y*Y')。在这种情况下,我需要执行E(Y(1:end)*Y(1:end)。如果这样做,答案是标量。但是,根据沃尔特·罗伯茨的回答,我可以得到一个9乘9的矩阵。然而,我并没有得到一个非奇异矩阵 如何为自相关矩阵创建一个奇异

我在尝试矩阵运算。数据是一个时间序列模型-自回归模型,AR(2),其中模型顺序
p=2
由高斯白噪声激发的变量
Y
表示,
epsilon
。我被概念性问题所困扰,对此我将不胜感激。该代码在将1个采样的时间延迟向量Y与1个采样的时间延迟向量的转置相乘后计算自相关矩阵。相关性的一般公式是
E(Y*Y')
。在这种情况下,我需要执行
E(Y(1:end)*Y(1:end)
。如果这样做,答案是标量。但是,根据沃尔特·罗伯茨的回答,我可以得到一个9乘9的矩阵。然而,我并没有得到一个非奇异矩阵

如何为自相关矩阵创建一个奇异矩阵,以便可以计算逆矩阵?请帮忙

守则:

clc;
clear all;
 var_eps = 1;
    epsilon = sqrt(var_eps)*randn(5000,1); % Gaussian signal exciting the AR model

   Y(1) = 0.0;
    Y(2) = 0.0;
    for n= 3:5000
    Y(n)=  0.1950*Y(n-1) -0.9500*Y(n-2)+ epsilon(n); %AR(2) model
    end

  y_tminus1 = Y(1:end-1).';
    mult = y_tminus1*y_tminus1';  %This creates a square matrix
    autocorr = xcorr2(mult);  %To perform autocorrelation of 1 sampled lag time series with itself(1 sampled lag)
  inverse_autocorr = inv(autocorr);  **%PROBLEM**        


%Warning: Matrix is singular to working precision. 
  trace_inv=trace(inverse_autocorr);
更新:我面临这个问题,因为我试图实现等式(20)表达式中的矩阵项和等式(24)的RHS

更新:12月1日

在此代码中,问题、变量的分析形式

CRB_LHS = (b_transpose_b/N)*tr(inv(E[y(t-1)y(t-1)']))

CRB_RHS = sigma2_v*tr(inv(sum_t =1 to N E[y(t-1)y(t-1)']))
其中y(t-1)=

[y(t-1), y(t-2),..,y(t-p)]'
CRB_LHS由本文的等式(19)计算得出

`Y_ARMA(n)=  0.1950*Y_ARMA(n-1)- 0.1950*Y_ARMA(n-2) + b*x_gauss(n);` where

 x_gauss = N(0,1)
y_tminus1 = Y(end-2:end-1).' 
CRB_RHS由式(1)计算得出

Y_-AR(n)=0.1950*Y_-AR(n-1)-0.9500*Y_-AR(n-2)+x_混沌(n); 在哪里

我假设等式(19)的ARMA模型中白噪声的系数
b=1

对于每个SNR级别,
snrbd=-3:1:2
我正在模拟
M
时间序列的数量(M次独立运行)。关于实现,有两个疑问:(1)对于等式(25)的RHS,在代码中,期望值接管独立运行(根据答案中的建议,如果我理解正确的话)-表达式显示,总和接管了所有数据点&对于(t-1)的M个样本的期望值。这很难实现。 (2) 由于反向,代码抛出错误。无法解决这个问题

对于每个信噪比,结果应为
CRB_LHS>CRB_RHS

clc;
clear all;
N = 10;
M = 100;  % number of independent runs over which the 

  snrdb = -3:1:2;
for snr_levels = 1:length(snrdb)



for monte_carlo = 1: M
     x_gauss = randn(1,N);
     x_chaos(1) = rand();
% generate the chaotic code
    for i =1 : N
        x_chaos(i+1) = 4*x_chaos(i)*(1-x_chaos(i));
    end

    x_chaos = x_chaos-mean(x_chaos);
    Y_AR(1) = 0.0;
    Y_AR(2) = 0.0;

   Y_ARMA(1) = 0.0;
    Y_ARMA(2) = 0.0;
    for n= 3:N
    Y_ARMA(n)=  0.1950*Y_ARMA(n-1)- 0.1950*Y_ARMA(n-2) + x_gauss(n); %Eq(19) model
    Y_AR(n) =   0.1950*Y_AR(n-1) -0.9500*Y_AR(n-2)  + x_chaos(n); %Eq(1)
    end
    % signalPower_Y_AR = var(Y_AR);
 signalPower_Y_AR = 1;

    sigma2_v = signalPower_Y_AR .*(10^(-snrdb(snr_levels))) ;
    v = sqrt(sigma2_v)*randn(1,length(Y_AR));
    z = Y_AR + v;  %Eq(3)

Y_LHS = Y_ARMA(end-2:end-1).';
Y_RHS = z(end-2:end-1).';

A1(:,monte_carlo) = Y_LHS;
B1(monte_carlo,:) = Y_LHS.';

A2(:,monte_carlo) = Y_RHS;
B2(monte_carlo,:) = Y_RHS.';
end


dimension = length(Y_LHS);
sum_of_products_LHS = zeros(dimension,dimension);
sum_prod_RHS = zeros(dimension,dimension);

for runs = 1:M
A = A1(:,runs);
B = B1(runs,:);
mult_LHS = A*B;

C = A2(:,runs);
D = B2(runs,:);
mult_RHS = C*D;

sum_of_products_LHS = sum_of_products_LHS+ mult_LHS;
sum_of_products_RHS = sum_prod_RHS + mult_RHS;
end 

  b_transpose_b = 1;

Expectation_LHS = mean(sum_of_products_LHS);
% Inverse_LHS = inv(Expectation_LHS);
% trace_LHS = tr(Inverse_LHS);

Expectation_RHS = mean(sum_of_products_RHS);

% Inverse_RHS = inv(Expectation_RHS);
% trace_RHS = tr(Inverse_RHS);
%MANUALLY MAKING A SQUARE MATRIX
size_Inverse = 7;
InverseMatrix_LHS = eye(size_Inverse,size_Inverse);
InverseMatrix_RHS = eye(size_Inverse,size_Inverse);

for i = 1:size_Inverse
    InverseMatrix_LHS(i:size_Inverse,i) = Expectation_LHS(1:size_Inverse-i+1);
    InverseMatrix_LHS(i,i:size_Inverse) = Expectation_LHS(1:size_Inverse-i+1);

    InverseMatrix_RHS(i:size_Inverse,i) = Expectation_RHS(1:size_Inverse-i+1);
    InverseMatrix_RHS(i,i:size_Inverse) = Expectation_RHS(1:size_Inverse-i+1);

end
  trace_LHS = tr(InverseMatrix_LHS);
  CRLB_RHS(snr_levels)=  (b_transpose_b/N).*trace_RHS;

  trace_RHS = tr(InverseMatrix_RHS);
  CRLB_RHS(snr_levels)= sigma2_v*trace_RHS;

 end

对于p=2,y_tminus1的表达式应为(见本文等式1后的表达式)


你的骡子还好。对于等式20,需要取期望值E(mult)。为此,您需要生成多个路径,并对其进行平均。对于等式25的RHS,您需要对ARMA过程的每一步使用y_tminus1,对相应的多个矩阵求和,对集合求期望值,然后求逆。也许,试着按照这些思路调整代码,我会纠正它。

谢谢您的回复。我有两个问题(A)1个样本滞后的自相关公式是E[y(t-1)*y(t-1)']。E[y(t-1)*y(t-1)']是否等于xcorr2(mult),其中mult=y(t-1)*y(t-1)'?(B) 有没有办法手动使单数矩阵非单数?嗯,关于(a)我不确定你的表达式是否正确。你使用的是哪种参考资料?关于(B),你们需要矩阵的秩等于它的维数,并且它的det是非零的。例如,删除线性相关的行和列(在您的情况下,对应于Y(1)和Y(2))使其成为非奇异的。我正在尝试实现“AR系统的盲识别使用混沌”一文中关于电路和系统IEEE事务的Cramer-Rao界的表达式。这里给出了滞后格式的相关性表达式。我在问题中附上了图片供您参考。你能喝一杯吗?太好了!我将根据您的指示实施,并将在此处或当我作为新问题发布时通知您。谢谢。你好,再一次。很抱歉我没有及时回复,我花了很长时间才弄清楚代码的流程。然而,我无法实现它,没有任何错误。如果你忘记了这个问题(很明显),这里是一个快速回顾。我试图实现文中给出的等式(25)的解析表达式。我跳过了情商(20)这对我来说太复杂了。等式(25)有两部分-左侧和右侧。等式(25)显示了ARMA模型的Cramer-Rao下界,其中MA部分是等式(1)中AR模型的高斯噪声>CRLB,使用等式(2)表示的确定性信号。(另一个问题中,删除了大量工作项,包括代码)。
y_tminus1 = Y(end-2:end-1).'