error while using iddata
    7 views (last 30 days)
  
       Show older comments
    
Hi i wrote the code below but when i run it i face two errors that i dont get it can anyone help me 
Error using iddata/numArgumentsFromSubscript (line 8) The syntax "Data{...}" is not supported. Use the "getexp" command to extract individual experiments from an IDDATA object.
Error in arma (line 29)
plot(t,yhat1{1}.y,'--',t,y);
I have this two erros please help me 
Thanks
%% Generate the data
N = 250; 
Ts = 1; 
u_var = 1; 
noise_var = 1;
a = [1 -1.5 0.7]; 
b = [0 1 .5]; c = [1 -1 0.2];
u = sign(randn(2*N,1))*sqrt(u_var); 
v = randn(2*N,1);
M = idpoly(a,b,c,1,1,noise_var,Ts);
y = sim(M,[u v]);
uv = u(N+1:end); 
vv = v(N+1:end); 
yv = y(N+1:end);
u = u(1:N); 
v = v(1:N); 
y = y(1:N);
DATe = iddata(y,u,Ts); DATv = iddata(yv,uv,Ts);
DATe1 = get(DATe);   DATv1= get(DATv)
%% Identification
na = 2; nb = 2; nc = 2;
theta_pem = armax(DATe,[na nb nc 1]); % ARMAX using PEM
%% Compare the measured output and the model output
[yhat1,fit1] = compare(DATe,theta_pem);
[yhat2,fit2] = compare(DATv,theta_pem);
t = 1:N;
figure;
subplot(2,1,1);
plot(t,yhat1{1}.y,'--',t,y);
legend('model','measured');
title('Comparison on estimation data set','FontSize',16);
ylabel('y');xlabel('t');
subplot(2,1,2);
plot(t,yhat2{1}.y,'--',t,yv);
legend('y2','y');
legend('model','measured');
title('Comparison on validation data set','FontSize',16);
ylabel('y');xlabel('t');
0 Comments
Accepted Answer
  Walter Roberson
      
      
 on 8 Jan 2021
        Is there a reason you are not using
plot(yhat1)
??
But if you insist...
plot(t, getexp(yhat1,1).y, '--', t, y);
3 Comments
  Walter Roberson
      
      
 on 9 Jan 2021
				Please try this code and see what you get.
%% Generate the data
N = 250; 
Ts = 1; 
u_var = 1; 
noise_var = 1;
a = [1 -1.5 0.7]; 
b = [0 1 .5]; c = [1 -1 0.2];
u = sign(randn(2*N,1))*sqrt(u_var); 
v = randn(2*N,1);
M = idpoly(a,b,c,1,1,noise_var,Ts);
y = sim(M,[u v]);
uv = u(N+1:end); 
vv = v(N+1:end); 
yv = y(N+1:end);
u = u(1:N); 
v = v(1:N); 
y = y(1:N);
DATe = iddata(y,u,Ts); DATv = iddata(yv,uv,Ts);
DATe1 = get(DATe);   DATv1= get(DATv)
%% Identification
na = 2; nb = 2; nc = 2;
theta_pem = armax(DATe,[na nb nc 1]); % ARMAX using PEM
%% Compare the measured output and the model output
[yhat1,fit1] = compare(DATe,theta_pem);
[yhat2,fit2] = compare(DATv,theta_pem);
t = 1:N;
figure;
subplot(2,1,1);
plot(t, getexp(yhat1,1).y, '--', t, y);
legend('model','measured');
title('Comparison on estimation data set','FontSize',16);
ylabel('y');xlabel('t');
subplot(2,1,2);
plot(t, getexp(yhat2,1).y, '--', t, yv);
legend('y2','y');
legend('model','measured');
title('Comparison on validation data set','FontSize',16);
ylabel('y');xlabel('t');
More Answers (0)
See Also
Categories
				Find more on Analyze Data in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!