Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Линейный регрессионный анализ Pascal

15K
09 августа 2007 года
Фесс
14 / / 11.10.2006
Задана функция y=f(x)=b0+b1x на интервале [0,5; 5]. Сформировать массив М(10), каждый элемент которого Мi вычисляется по формуле Mi=f(xi)+дельта Ci
.
Шаг аргумента x - 0,5, дельта Ci - случайное отклонение, определяемое с помощью функции случайных чисел RANDOM в интервале от - 0.5 до +0.5.. Вычислить значения коэффициентов b1 и b0 для линейной регрессии 10 пар значений xi и yi, используя метод наименьших квадратов по приведенным ниже формулам:

b1=сумма(xi)*сумма(Mi) - N*сумма (xi*Mi)/(сумма (xi))^2 - N*сумма (xi^2)

b0= (сумма(Mi) - b1*сумма(xi))/N
(i=1…N)

В декартовой системе координат построить график полученной линейной регрессии и отметить рассчитанные по формуле точки с координатами xi и yi.

Функция : -1,6x+4.6


Помогите с задачей
257
10 августа 2007 года
kosfiz
1.6K / / 18.09.2005
вроде так:
Код:
uses crt, graph;

function Func(x:real):real;
begin
  Func:= -1.6 * x + 4.6;
end;

const
  a = 0.5;
  b = 5;
  dx = 0.5;
  N = 10;
  mm = 30;

var
  M: array[1..10]of real;
  C, x: real;
  i, j: integer;
  b0, b1: real;
  sumx, summ, sumxm, sumsqrx: real;
  gd, gm:integer;
begin
clrscr;
randomize;
sumx:=0;
summ:=0;
sumxm:=0;
sumsqrx:=0;
x:=a;
i:=1;
while (x<=b) do
  begin
    C:=random(11);
    M:=Func(x)+(C-5)/10;
    x:=x+dx;
    inc(i);
  end;
for i:=1 to N do
  writeln(M);
writeln;
for i:=1 to N do
  begin
    summ:=summ + M;
    sumx:=sumx + dx*i;
    sumxm:=sumxm + M*dx*i;
    sumsqrx:=sumsqrx + sqr(dx*i);
  end;
b0:=(summ/sumx*sumsqrx-sumxm)/(N/sumx*sumsqrx - sumx);
b1:=(summ - b0*N)/sumx;
writeln(b1);
writeln(b0);
readln;
gd:=Detect;
InitGraph(gd,gm,'e:\coding\BP\BGI');
MoveTo(0,300);
LineTo(300,300);
MoveTo(0,0);
LineTo(0,300);
MoveTo(round(dx*mm),round(300-mm*(b0+b1*dx)));
for i:=2 to N do
  begin
    LineTo(round(dx*i*mm), round(300-mm*(b0+b1*dx*i)));
    MoveTo(round(dx*i*mm), round(300-mm*(b0+b1*dx*i)));
  end;
for i:=1 to N do
  begin
    Circle(round(dx*i*mm),round(300-mm*Func(dx*i)),2);
  end;
readln;
CloseGraph;
end.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог