diamFC | Дата: Четверг, 19.05.2011, 10:35 | Сообщение # 1 |
Полковник
Группа: Администраторы
Сообщений: 207
Статус: Offline
| найти коэффициенты уравнения y = a + b*x, показатель корреляции и средней ошибки аппроксимации Code Program z1; uses crt; const n = 7;
type mas = array[1..n] of real; {определяем пользовательский тип - массив из n чисел} {заполняем исходные данные} const x1: mas = (554, 560, 545, 672, 796, 0, 0); const y1: mas = (302, 360, 310, 415, 452, 0, 0);
const x2: mas = (777, 632, 688, 833, 577, 0, 0); const y2: mas = (502, 355, 416, 501, 403, 0, 0);
const x3: mas = (584, 949, 888, 831, 562, 665, 705); const y3: mas = (208, 462, 368, 399, 342, 354, 558);
{процедура, вычисляющая коэффициенты a, b, показатель корреляции и средней ошибки аппроксимации} procedure getFun(x,y: mas; n: integer); {процедура принимает в качестве аргументов массив исходных данных x, y и количество значимых элементов в массивах} var {описание переменных, используемых процедурой} y_r: mas; i: integer; y_sr, x_sr, yx_sr, x_kv_sr, x_sr_kv, y_sr_kv, y_kv_sr: real; aa, r, y_yr_m:real; a, b : real;
begin y_sr := 0; {присваиваем всем переменным начальные значения 0} x_sr := 0; yx_sr := 0; x_kv_sr := 0; x_sr_kv := 0; y_kv_sr := 0; y_sr_kv := 0;
for i := 1 to n do {в цикле по значащим элементам} begin {рассчитываем промежуточные значения} y_sr := y_sr + y[i] /n; {вычисление Yсреднего из значимых элементов Y} x_sr := x_sr + x[i] /n; {вычисление xсреднего из значимых элементов x} yx_sr := yx_sr + y[i]*x[i] / n; {вычисление среднего значения произведений x*Y} x_kv_sr := x_kv_sr + x[i]*x[i] / n; {вычисление среднего значения квадрата x} y_kv_sr := y_kv_sr + y[i]*y[i] / n; {вычисление среднего значения квадрата y} end; {конец цикла} x_sr_kv := x_sr * x_sr; {вычисление квадрата среднего значения x} y_sr_kv := y_sr * y_sr; {вычисление квадрата среднего значения y}
{определяем коэффициенты уравнения a и b и выводим их на экран} b := (yx_sr - y_sr * x_sr)/(x_kv_sr - x_sr_kv); a := y_sr - b * x_sr; writeln('a = ', a:5:2, '; b = ', b:5:2); writeln('y = ', a:5:2, ' + (', b:5:2, ')/x');
{ y_yr_kv := 0; y_ysr_kv := 0;} y_yr_m := 0; writeln('----------------------');{шапка таблицы реальных значений Y и расчетных y_r} writeln('| N | y | y_r |'); writeln('----------------------'); for i := 1 to n do {в цикле} begin y_r[i] := a + b * x[i]; {вычисляем расчетные значения У} {вычисляем сумму модуля разности реальных и расчетных значений У, деленного на реальное значение У} y_yr_m := y_yr_m + abs(y[i] - y_r[i])/y[i]; {выводим результаты на экран} writeln('|', i:2, ' | ',y[i]:5:2, ' | ', y_r[i]:5:2, '|'); end; writeln('----------------------'); y_yr_m := y_yr_m / n;
{Вычисляем Rxy и A} r := (yx_sr - y_sr * x_sr)/sqrt((x_kv_sr - x_sr_kv)*(y_kv_sr - y_sr_kv)); aa := y_yr_m * 100;
writeln('Rxy = ', r:5:2, '; A = ', aa:5:2, '%'); writeln;
readkey; {ожидаем нажатия клавиши} end;
begin {Начало тела главной программы} clrscr; {очистка экрана} writeln('Volgo-Vyatskiy rayon:'); getFun(x1, y1, 5); {вычисление значений для заранее определенных значений}
writeln('Centralno-Chernoxemye:'); getFun(x2, y2, 5);
writeln('Povolgskiy:'); getFun(x3, y3, 7); end.
|
|
| |
diamFC | Дата: Четверг, 19.05.2011, 10:40 | Сообщение # 2 |
Полковник
Группа: Администраторы
Сообщений: 207
Статус: Offline
|
|
|
| |