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

3 次查看(过去 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
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 中查找有关 Matrix Indexing 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by