#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');
и эта часть вашей программы будет работать.