Неопределенная переменная «xgetfile» в SciLab

#algorithm #variables #undefined #scilab

#алгоритм #переменные #не определено #scilab

Вопрос:

[ n ВВЕДИТЕ РАЗМЕР ВЫБОРКИ: 28428

n ВВЕДИТЕ ПРЕДЕЛ ДОПУСКА: 100

Неопределенная переменная: xgetfile] 1

Итак, в основном, когда я запускаю эту программу, которую я скачал из Интернета, она всегда сообщает мне, что переменная xgetfile не определена, а не предлагает мне выбрать файл с данными в нем. Полный код для указанной программы вставлен ниже. Мой вопрос в том, как исправить эту проблему и иметь возможность вводить мои данные. Строка с надписью xgetfile находится почти вверху, поэтому вам не нужно слишком много читать, чтобы добраться до нее.

 n=0;
tol_lim=0;

// ENTERING SAMPLE SIZE
while n<=5 | n==[] , n=input("n ENTER SAMPLE SIZE:");
  if (n<=5) printf("nn SAMPLE SIZE SHOULD BE GREATER THAN 5nn");end
  if n==[] printf("nn  SAMPLE SIZE CANNOT BE LEFT BLANKnn");end
end
  
//ENTERING TOLERANCE LIMIT
while tol_lim <= 0 | tol_lim==[], tol_lim=input("n ENTER TOLERANCE LIMIT:");
  if (tol_lim<=0) printf("n TOLERANCE LIMIT SHOULD BE GREATER THAN 0nn");end
  if tol_lim==[] printf("n TOLERANCE LIMIT CANNOT BE LEFT BLANKnn");end
end

//INITIALIZING VARIABLES
F = zeros(n,3);
Y = zeros(n,1);
OY = zeros(n,1);
EY = zeros(n,1);
DOY = zeros(n,1);
Estimated_Y = zeros(n,1);
d = zeros(3,1);

THETA = zeros(3,1);


GN1=0;GN2=0;GN3=0;
sig=0;y=0;
sigma_hat_square=0; y_bar=0; dff=0; R_square=0;
U_t_hat=0; U_t_hat_square=0; U_t_minusone_hat=0; dd=0; DW=0;Covariance_Matrix=zeros(3,3);
f_obs=0; l_obs=0; r=0; D1=0; D2=0;
S1=0;S2=0;S3=0;D1=0;D2=0;r=0;sum_Y=0;Y_bar=0;Y_square=0;D_den=0;D=0;
AY=zeros(n,1);

OBS=zeros(n,1);
EST=zeros(n,1);
g=[];gh=[];

EXISTING_DATA='';

//CHOOSING INPUT EXCEL DATA FILE
gh=xgetfile();

while gh==[],  gh=xgetfile('*.*',title='CHOOSE A FILE NAME');
      if g==[] printf("FILE NAME CANNOT BE LEFT BLANK");end
end


Sheets=readxls(gh);
EXISTING_DATA=Sheets(1);
typeof(EXISTING_DATA);

printf("nn");

//DISPLAYING EXISTING DATA FROM EXCEL FILE

EXISTING_DATA
  
for i=2:(n 1),DOY(i-1,1)=EXISTING_DATA(i,2);end  

while f_obs<=0 | f_obs==[] , f_obs=input("n ENTER FIRST OBSERVATION NO:");
  //if (f_obs<=0) printf("nn IT SHOULD BE GREATER THAN 0nn");end
  //if f_obs==[] printf("nn IT CANNOT BE LEFT BLANKnn");end
end


  while l_obs<f_obs | l_obs==[] , l_obs=input("n ENTER LAST OBSERVATION NO:");
  //if (l_obs<=f_obs) printf("nn IT SHOULD BE GREATER THAN FIRST OBSERVATION NO:nn");end
  //if l_obs==[] printf("nn  IT CANNOT BE LEFT BLANKnn");end
end

  
  for i=1:n,OY(i,1)=log(DOY(i,1));end

  
  
              r = ((l_obs - f_obs)   1)/3;
              
              for i=1:r, S1 = S1   OY(i,1);end
                for i=r 1:2*r, S2 = S2   OY(i,1);end
                     for i=2*r 1:3*r, S3 = S3   OY(i,1);end
                  
                D1 = S1 - S2;
                D2 = S2 - S3;
                
                A=0;B=0;C=0;

                // CALCULATING INITIAL ESTIMATES OF A, B, C

                C = (D2/D1)^(1/r);
              
                B = ((1 - C)/C)* [(D1^3)/(D1-D2)^2];
           
                
                A = (1/3)*(1/r)*[(S1   S2   S3) - (D1^2   D1*D2   D2^2)/(D1 - D2)];
                
                Ini_A=A; Ini_B=B;Ini_C=C;
                


for i=1:n, F(i,1)=1;end
  for i=1:n, F(i,2)=C^i;end
    for i=1:n, F(i,3)=i*B*(C^(i-1));end
      
   
        
        for i=1:n, EY(i,1)=A   B*(C^i);end
          for i=1:n, Y(i,1) = OY(i,1) - EY(i,1);end
                    
          d = inv(F'*F)*F'*Y;
          
          THETA(1,1) = A   d(1,1);
          THETA(2,1) = B   d(2,1);
          THETA(3,1) = C   d(3,1);
          
         if abs(d(1,1)/A) < tol_lim amp; abs(d(2,1)/B) < tol_lim amp; abs(d(3,1)/C) < tol_lim   
         
          break;
          end
          
                 
  
          for cnt=1:100
          
                              A = THETA(1,1);
                              B = THETA(2,1);
                              C = THETA(3,1);
          
                   for i=1:n, F(i,1)=1;end
                       for i=1:n, F(i,2)=C^i;end
                          for i=1:n, F(i,3)=i*B*(C^(i-1));end
      
        
        
                   for i=1:n, EY(i,1)=A   B*(C^i);end
                        for i=1:n, Y(i,1) = OY(i,1) - EY(i,1);end
                    
                      d = inv(F'*F)*F'*Y;
          
                      THETA(1,1) = A   d(1,1);
                      THETA(2,1) = B   d(2,1);
                      THETA(3,1) = C   d(3,1);
                      
                      
          
        if abs(d(1,1)/A) < tol_lim amp; abs(d(2,1)/B) < tol_lim amp; abs(d(3,1)/C) < tol_lim
        break;
        end
          
        end
          
        A=THETA(1,1);
        B=THETA(2,1);
        C=THETA(3,1);
          
          
         
            for i=1:n,
          
            GN1 = GN1   (OY(i,1) - A - B*(C^i));
            GN2 = GN2   (OY(i,1) - A - B*(C^i))*(C^i);
            GN3 = GN3   (OY(i,1) - A - B*(C^i))*B*i*(C^(i-1));
            
            end
            
            
                        
            p_GN1=GN1;
            p_GN2=GN2;
            p_GN3=GN3;
            
            for i=1:n, EY(i,1) = A   B*(C^i);end
              for i=1:n, Y(i,1) = OY(i,1) - EY(i,1);end
                  for i=1:n, sig =sig   Y(i,1)*Y(i,1);end
            
          sigma_hat_square = sig/n;
            
            for i=1:n, y = y   OY(i,1);end
            y_bar = y/n;
            
            for i=1:n, dff = dff   (OY(i,1) - y_bar)*(OY(i,1) - y_bar);end
            

           R_square = 1 - (sig/dff);
            
            
            for i=1:n, 
                      F(i,1)=1;
                      F(i,2)=C^i;
                      F(i,3)=i*B*(C^(i-1));
                      
             end
             
             
             //Showing Covariance Matrix
             
             Covariance_Matrix = sigma_hat_square*inv(F'*F);
             
             
             
             
             G = zeros(3,3);
             G = inv(F'*F);
             
             //Showing Standard Errors
             std_err_A = sqrt((sigma_hat_square)*G(1,1));
             std_err_B = sqrt((sigma_hat_square)*G(2,2));
             std_err_C = sqrt((sigma_hat_square)*G(3,3));
             
             for i=1:n, 
                      
                      U_t_hat_square = U_t_hat_square  ((OY(i,1) - A - B*(C^i))^2);
          
             end
             
             
             
             for i=2:n,
             
                    U_t_hat = OY(i,1) - A - B*(C^i);
                    U_t_minusone_hat = OY(i-1,1) - A - B*(C^(i-1));
                    
                    dd = dd   (U_t_hat - U_t_minusone_hat)*(U_t_hat - U_t_minusone_hat);
                    
              end
              
              
              
              DW = dd/U_t_hat_square;
              
              for i=1:n, EY(i,1) = A   B*(C^i);end
              for i=1:n, Y(i,1) = OY(i,1) - EY(i,1);end
              
              for i=1:n,sum_Y = sum_Y   OY(i,1);end
              Y_bar = sum_Y /n;
              
              
              for i=1:n, Y_square = Y_square   Y(i,1)*Y(i,1);end
              
              for i=1:n, D_den = D_den   (OY(i,1) - Y_bar)*(OY(i,1) - Y_bar);end
              
              
              D = Y_square/D_den;
              
              printf("nnnREPORT SHOWING RESULTSn");
printf("----------------------nnn");
printf("Sample Size = %d             Tolerance Limit=%fnn",n,tol_lim);
printf("PARAMETER INITIAL ESTIMATES   FINAL ESTIMATES      STD. ERRORS           DW    ");
printf("n------- -----------------     ----------------     ------------        ----   n");
printf("nA        %f                 %f           %f          %f", Ini_A,A, std_err_A, DW);
printf("nB        %f                 %f           %f        ", Ini_B,B, std_err_B);
printf("nC        %f                 %f           %f        ", Ini_C,C, std_err_C);
printf("nnn ");


printf("No. of Iterations: = %dnn",cnt 1);
printf("GN1 = %.7fnn", p_GN1);
printf("GN2 = %.7fnn", p_GN2);
printf("GN3 = %.7fnn", p_GN3);

printf("Sigma_Hat_Square= %f tt R_Square= %ft D=%f",sigma_hat_square, R_square,D);
printf("nn COVARIANCE MATRIX n");
printf("-------------------------n");
printf("%ftt%ftt%fn",Covariance_Matrix(1,1), Covariance_Matrix(1,2), Covariance_Matrix(1,3));
printf("%ftt%ftt%fn",Covariance_Matrix(2,1), Covariance_Matrix(2,2), Covariance_Matrix(2,3));
printf("%ftt%ftt%f",Covariance_Matrix(3,1), Covariance_Matrix(3,2), Covariance_Matrix(3,3));



printf("nn Residualsnn ");
printf("Y = %fn",Y);


              
              x=input("nn Exit Program??...Press 1 to exit or enter to save");
              if (x==1)
              exit();
              end
              
              g=x_dialog(['enter file name:']);

u=mopen(g,'w');

mfprintf(u,"REPORT SHOWING RESULTSn");
mfprintf(u,"----------------------nnn");
mfprintf(u,"Sample Size = %d                   Tolerance Limit = %fnnn",n,tol_lim);
mfprintf(u,"PARAMETER INITIAL ESTIMATES   FINAL ESTIMATES      STD. ERRORS           DW    ");
mfprintf(u,"n------- -----------------     ----------------     ------------        ------   n");
mfprintf(u,"nA        %f                 %f           %f          %f", Ini_A,A, std_err_A, DW);
mfprintf(u,"nB        %f                 %f           %f        ", Ini_B,B, std_err_B);
mfprintf(u,"nC        %f                 %f           %f        ", Ini_C,C, std_err_C);
mfprintf(u,"nnn ");


mfprintf(u,"No. of Iterations: = %dnn",cnt 1);
mfprintf(u,"GN1 = %.7fnn", p_GN1);
mfprintf(u, "GN2 = %.7fnn", p_GN2);
mfprintf(u, "GN3 = %.7fnn", p_GN3);

mfprintf(u, "Sigma_Hat_Square= %f tt R_Square= %ft D=%f",sigma_hat_square, R_square,D);
mfprintf(u,"nn COVARIANCE MATRIX n");
mfprintf(u,"-------------------------n");
mfprintf(u,"%ftt%ftt%fn",Covariance_Matrix(1,1), Covariance_Matrix(1,2), Covariance_Matrix(1,3));
mfprintf(u,"%ftt%ftt%fn",Covariance_Matrix(2,1), Covariance_Matrix(2,2), Covariance_Matrix(2,3));
mfprintf(u,"%ftt%ftt%f",Covariance_Matrix(3,1), Covariance_Matrix(3,2), Covariance_Matrix(3,3));



mfprintf(u,"nn SHOWING RESIDUALSnn ");
mfprintf(u, "Y = %fn",Y);
mclose(u);


t=[1:1:n]';
Estimated_Y=A   B*(C^t);


for i=1:n, OBS(i,1)=OY(i,1);end
for  i=1:n,EST(i,1)=Estimated_Y(i,1);end

plot2d(t,[OBS,EST],[2,3],leg="Observed@Estimated",nax=[1,n,1,n]);
legends(['t';'(Year)'],[1,1],opt="lr")
legends(['Y';'(Dependent Variable)'],[1,1],opt="ul")
xtitle("GOMPERTZ GROWTH CURVE");


end_prog=input("nn Continue??..PRESS 1 TO CONTINUE.....PRESS 2 TO EXIT");


if (end_prog==1)
exec("C:SCILABGompertz.sce");
end
if (end_prog==2)

printf("CLOSING PROGRAM........");
exit;
end








  

Комментарии:

1. Просто замечание для ваших будущих вопросов по SO: вам не нужно было публиковать всю свою программу. В следующий раз напишите минимальный пример. Здесь gh=xgetfile() было бы достаточно одной строки. Вы все равно можете отредактировать свое сообщение, даже если я уже ответил,

Ответ №1:

Ваша программа Scilab, похоже, написана для очень старой версии, поскольку xgetfile исчезла с версией 5.2 (2001 год). Просто замените строку на

 gh=uigetfile('*.*','CHOOSE A FILE NAME');
  

и эта часть вашей программы будет работать.