Unable to perform assignment because the size of the left side is 1-by-1

조회 수: 2 (최근 30일)
I'm writing code to perform a signal simulation (stochastic systems) and it throws me the error "Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 1-by-2." in the code line "L(k,k+i)=L(k,k+i-1)*Phi*(ones(1, k+i)-K(k+i));" of course, I understand that it is a dimensionality problem, I know that the left side is a scalar and the right side a vector of 2 columns. However, I do not know how to solve it, I have tried to modify the dimensions of L(k, k + i) but it does not work for me. I appreciate any help in this regard.
%%%%%Condiciones iniciales
Phi=0.95;
n=50;
P0=1;
x0=sqrt(P0)*randn(1,1);
Q0=0.1;
w0=sqrt(Q0)*randn(1,1);
x(1)=Phi*x0+w0;
%%%%Estado%%%%%%
for k=1:n
Q(k)=0.1;
w(k)=sqrt(Q(k))*randn(1,1);
x(k+1)=Phi*x(k)+w(k);
end
%%%%%Observaciones%%%%%
R0=0.5;
v0=sqrt(R0)*randn(1,1);
z0=x0+v0;
for k=1:n
R(k)=0.5;
v(k)=sqrt(R(k))*randn(1,1);
z(k)=x(k)+v(k);
end
%%%%Filtrado%%%
Cpred0=P0;
K0=Cpred0*[P0+R0]^-1;
fil0=K0*z0;
Cfil0=[1-K0]*Cpred0;
pred(1)=Phi*fil0;
Cpred(1)=Phi^2*Cfil0+Q0;
for k=1:n
K(k)=Cpred(k)*[Cpred(k)+R(k)]^-1;
fil(k)=pred(k)+K(k)*[z(k)-pred(k)];
Cfil(k)=[1-K(k)]*Cpred(k);
pred(k+1)=Phi*fil(k);
Cpred(k+1)=Phi^2*Cfil(k)+Q(k);
end
%%%%%Suavizamiento de punto fijo N=2%%%%%
for k=1:n
L(k,k)=Cfil(k);
pf(k,k)=fil(k);
Cpf(k,k)=Cfil(k);
end
for k=1:n
for i=1:2
kpf(k,k+i)=L(k,k+i-1)*Phi*(Cpred(k+i))^-1;
L(k,k+i)=L(k,k+i-1)*Phi*(ones(1,k+i)-K(k+i));
pf(k,k+i)=pf(k,k+i-1)+kpf(k,k+i)*(z(k+i)-pred(k+i));
Cpf(k,k+i)=Cpf(k,k+i-1)-kpf(k,k+i)*(pred(k+i)+R(k))*kpf(k,k+i);
end
end
Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 1-by-2.
  댓글 수: 1
the cyclist
the cyclist 2022년 7월 31일
Great. (I deleted my comment about the other problem, after I saw you had fixed it.)

댓글을 달려면 로그인하십시오.

답변 (1개)

the cyclist
the cyclist 2022년 7월 31일
My best guess as to the problem is that in this expression
ones(1,k+i)-K(k+i)
you don't really intend to add a vector of ones to the scalar K(k+i). Did you just intend to add the scalar 1? If so, you could do
1 + K(k+i)
  댓글 수: 3
the cyclist
the cyclist 2022년 7월 31일
When k==49, and i==2, you are trying to access the 51st column of a 50-column array.
You possibly need
for k=1:n-2 % instead of k=1:n
but then I don't know if you are truly calculating the result you need.
César Guillermo Rendón Mayorga
I've done the modification, it seems to work for what I need. I'll continue to work for now. Thank you very much for your help!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by