Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2013, 00:05   #1
Tasianka
Новичок
Джуниор
 
Регистрация: 23.11.2013
Сообщений: 2
По умолчанию ошибка в пятой регрессионной модели

Uses windows;
Type arrn=array[0..20] of real;
Var i, j, jo, n, nob, k, p, nm : integer;
a, b, c, b1, d1, d2, d3, sx, sy, sxy, sxx, sx3, sx3x,
syxx, xp, di, ex, nu, fkr, zkr, w, pr, s1, s2, s3,
kpk, diy, ma, mi, sd, mox, moy : real;
x, y, dy, yr, yp, py, dp : arrn;
f,o : text;
stroka, FNAME : string;
PROCEDURE Lin;
BEGIN FOR i:=1 TO 70 DO WRITE (o,'-'); WRITelN(o); END;

PROCEDURE ANALIZ;
BEGIN
di := 0; ex := 0;
FOR i := 1 TO n DO BEGIN
xp := x[i] + 1;
IF k=1 THEN BEGIN yr[i] :=a+b*x[i]; yp[k] :=a+b*xp; END;
IF k=2 THEN BEGIN yr[i] :=a*exp(b*ln(x[i]));yp[k] :=a*exp(b*ln(xp)); END;
IF k=3 THEN BEGIN yr[i] :=a*exp(x[i]*ln(b));yp[k] :=a*exp(xp*ln(b)); END;
IF k=5 THEN BEGIN yr[i] :=a+b*x[i]+c*sqr(x[i]); yp[k] :=a+b*xp+c*xp*xp; END;
dy[i] := ABS(y[i] - yr[i]);
py[i] := dy[i] * 100 / y[i];
ex := ex + py[i] / n;
di := di + (y[i] - yr[i])*(y[i] - yr[i]) / (n-p); END;
IF (di / diy) < 1 THEN nu := SQRt(1 - di / diy);
IF di > 0 THEN fkr := diy / di;
IF (1 - nu * nu) < 1 THEN
zkr:=1/2*Ln(nu*nu /(1-nu*nu))*(n-p)/(p-1)ELSE zkr:=0;
dp[k]:= yp[k]-y[n];
WRITE(o,ex:6:3,di:6:2,nu:7:3,fkr:7: 1,zkr:6:1);
WRITE(o,yp[k]:7:1,dp[k]:7:3);
IF (dp[k]<= ma) AND (dp[k]>=mi) THEN WRITElN(o,'<') ELSE
WRITElN(o) ; END;

BEGIN {-------- main --------------}
FNAME :='lab1dan.txt' ; ASSIGN (f,FNAME); RESET(f);
FNAME :='lab1otv.txt' ; ASSIGN (o,FNAME); REWRITE(o);
READLN(f,n,nob); READLN(f,stroka);
WRITE(o,'X :'); mox := 0;
FOR i := 1 TO n DO BEGIN
READ(f,x[i]); WRITE(o,x[i]:6:1);
mox := mox + x[i] / n;
END; WRITELN(o); READLN(f);
READLN(f,stroka);
FOR jo:=1 TO nob DO BEGIN
WRITELN(o,'Объект',jo:2);
WRITE(o,'Y :'); moy :=0;
FOR i := 1 TO n DO BEGIN
READ(f,y[i]); WRITE(o,y[i]:6:1);
moy := moy + y[i] / n;
END; WRITELN(o);
WRITE(o, 'dY: ');
dy[1] := 0; y[0] := 0;
ma := -100; mi := 100; sd := 0;
FOR i := 2 TO n DO BEGIN
dy[i] := y[i] - y[i-1];
sd := sd + dy[i] / (n-1);
WRITE(o, dy[i]:6:1);
IF ma <= dy[i] THEN ma := dy[i];
IF mi >= dy[i] THEN mi := dy[i];
END; WRITELN(o);
WRITELN(o);
WRITELN(o, 'Max Cp Min');
WRITELN(o, ma:5:2,' ', sd:5:2,' ', mi:5:2);
s1 := 0; s2 := 0; s3 := 0;
FOR i := 1 TO n DO BEGIN
s1 := s1 + (y[i] - moy) * (x[i] - mox);
s2 := s2 + (y[i] - moy) * (x[i] - moy);
s3 := s3 + (y[i] - mox) * (x[i] - mox); END;
kpk := s1 / SQRt(s2 * s3);
diy := 0;
FOR i := 1 TO n DO
diy := diy + (y[i] - moy)*(y[i] - moy) / (n-1);
WRITE(o, 'Коэффициент парн корр - ', kpk:6:3, ' ');
WRITELN(o, 'Дисперсия У - ', diy:5:2);
Lin;
WRITE(o, 'МОДЕЛЬ СР.ОШ ДИ__ОСТ');
WRITELN(o,' KOP_O F_KP Z_Kp ПРО ДПРО ');
Lin;
{МОДЕЛЬ 1} k:= 1; p:= 2; sx:= 0; sy:= 0; sxy:= 0; sxx:=0;
FOR i := 1 TO n DO BEGIN
sx := sx + x[i];
sy := sy + y[i];
sxy := sxy + x[i] * y[i];
sxx := sxx + x[i] * x[i];
END;
b := (sx * sy - n * sxy) / (sx * sx - n * sxx);
a := (sy - b * sx) / n;
WRITE(o, 'Y=', a:5:3, '+', b:5:3, '*x ');
ANALIZ;
{Модель 2} k:= 2; sx:= 0; sy:= 0; sxy:= 0; sxx:=0;
FOR i := 1 TO n DO BEGIN
sx := sx + Ln(x[i]);
sy := sy + Ln(y[i]);
sxy := sxy + Ln(x[i]) * Ln(y[i]);
sxx := sxx + Ln(x[i]) * Ln(x[i]);
END;
b := (sx * sy - n * sxy) / (sx * sx - n * sxx);
a := EXP((sy - b * sx) / n);
WRITE(o, 'Y=' ,a:5:3, '*x[i]^' ,b:5:3, ' ');
ANALIZ;
Tasianka вне форума Ответить с цитированием
Старый 24.11.2013, 00:06   #2
Tasianka
Новичок
Джуниор
 
Регистрация: 23.11.2013
Сообщений: 2
По умолчанию

{Модель 3} k:= 3; sx:= 0; sy:= 0; sxy:= 0; sxx:=0;
FOR i := 1 TO n DO BEGIN
sx := sx + x[i];
sy := sy + Ln(y[i]);
sxy := sxy + x[i] * Ln(y[i]);
sxx := sxx + x[i] * x[i];
END;
b1 := (sx * sy - n * sxy) / (sx * sx - n * sxx);
b := EXP(b1);
a := EXP ((sy - b1 * sx) / n);
WRITE(o, 'Y=' ,a:5:3, '*' ,b:5:3, '^x[i] ');
ANALIZ;
{МОДЕЛЬ 5} k :=5; p := 3; sx := 0; sy := 0; sxy := 0;
sxx := 0; sx3 := 0; sx3x := 0; syxx := 0;
FOR i := 1 TO n DO BEGIN
sx := sx + x[i];
sy := sy + y[i];
sxy := sxy + x[i] * y[i];
sxx := sxx + x[i] * x[i];
sx3 := sx3 + x[i] * x[i] * x[i];
sx3x := sx3x + x[i] * x[i] * x[i] * x[i];
syxx := syxx + y[i] * x[i] * x[i];
END;
d1 := n * sx3 - sx * sxx;
d2 := n * sxx - sx * sx;
d3 := (n * syxx - sy * sxx + d1*(sx * sy - n * sxy)/d2);
c := d3 / (n * sx3x - sxx * sxx - d1 * d1 / d2);
b := (n * sxy - sx * sy - c * d1) / d2;
a := (sy - sx * b - sxx * c) / n;
WRITE(o, 'Y=' ,a:5:3, '+' ,b:5:1, 'X+' ,c:5:3, '*X2');
ANALIZ; Lin;
nm := 0; w := 1000;
FOR k := 1 TO 5 DO BEGIN
IF (dp[k] <= ma) AND (dp[k] >= mi) AND (w >= ex) THEN
BEGIN nm := k;
w := ex; END; END;
IF nm > 0 THEN BEGIN
WRITE(o, 'МОДЕЛЬ ', nm);
WRITELN (o, ' -> ПРОГНОЗ', yp[nm]:6:1); END
ELSE BEGIN pr := y[n] + sd;
WRITE(o, 'НЕТ АДЕКВАТНОЙ МОДЕЛИ . ПРОГНОЗ ПО СРЕДНЕЙ - ');
WRITELN(o, pr:6:1); END;
END; {---- nob ----} CLOSE(f); CLOSE(o); END.





___________________________________ ________________
Преподаватель решает через дельфи.
Я же делаю через паскаль 7.
все ответы сходятся, кроме ответов в пятой модели.
в чем ошибка?


Исходные данные:
8 1
вектор х
1 2 3 4 5 6 7 8
вектор у
340 347 352 363 375 381 385 388


Ответ преподавателя:
X : 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0
Объект 1
У : 340.0 347.0 352.0 363.0 375.0 381.0 385.0 388.0
dУ: 7.0 5.0 11.0 12.0 6.0 4.0 3.0

Max Cp Min
12.00 6.86 3.00
Коэффициент парн корр - 0.986 Дисперсия У - 341.70
----------------------------------------------------------------------
МОДЕЛЬ СР.ОШ ДИ_ОСТКОР_О F_КР Z_Кр ПРО ДПРО
----------------------------------------------------------------------
У=332.893+7.440*x 0.586 11.12 0.984 30.7 10.2 399.9 11.857<
У=333.747*x[i]^0.070 1.120 27.26 0.959 12.5 7.3 388.8 0.825
У=333.857*1.021^x[i] 0.648 12.86 0.981 26.6 9.7 401.2 13.159
У=327.446+ 10.7X+-0.363*X2 0.553 8.92 0.987 38.3 4.5 394.4 6.411<
----------------------------------------------------------------------
МОДЕЛЬ5 -> ПРОГНОЗ 394.4
Tasianka вне форума Ответить с цитированием
Старый 24.11.2013, 09:57   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Код надо оформлять по правилам, используя теги CODE вручную или кнопочкой #
Иначе код нечитаем и вряд ли кто будет в него вчитываться, т.к. сломает глаза.

Конкретно Ваш код чрезвычайно сложен для понимания и мало кто захочет с ним разбираться. У него практически нет разбиения по процедурам, что могло бы сильно упростить поиск ошибки, очень много неосмысленно названных переменных, что сильно ухудшают возможность "читать " алгоритм. Советую изучить и применять http://www.gunsmoker.ru/2011/01/blog-post.html

Однако, у Вашей проблемы может быть вполне простое и логичное объяснение.
В турбопаскале тип Integer это 2байтное целое с диапазоном -32768..32767, а в дельфи это 4байтный тип с диапазоном -2^31..2^31-1
Из-за этого различия в дельфи может получаться другой результат (есть вероятность что тип Real тоже может влиять). Чтобы это исправить, стоит в дельфи задекларировать соответствующие типы как SmallInt (соотв паскалевскому Integer) и Real48 (соответствует паскалевскому Real)/
Если не поможет, то значит дело глубже, но это гораздо менее вероятно, т.к. алгоритмы из паскаля обычно идентичны в дельфи, а вот типы (то что я выше описал) как раз отличаются.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ERwin BPwin Rational Rose UML модели бизнес-процессов, логическая и физическая модели КОНТРОЛЬНАЯ РАБОТА iJohnny Фриланс 0 05.06.2012 05:52
ошибка отображения 3D модели Кинельски Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 01.11.2011 20:05
В пятой степени. Водонька Помощь студентам 0 16.10.2011 18:47
пятой точкой чувствую - потоки BoozZzilla Общие вопросы Delphi 16 15.03.2011 17:52
Помогите написать задачу на тему: Исследование кореляционной и регрессионной зависимости. RosOnDon Паскаль, Turbo Pascal, PascalABC.NET 0 24.04.2009 13:11