Дисциплина:
Раздел:
Выполнил:

Вычислительная математика

Метод наименьших квадратов.

физмат, Итаков С.

                                             www.domath.ru

>   

restart;

#Создадим процедуру, которая возвращает уравнение линейного тренда,
#созданного для X,Y.
#Пусть параметры линейного тренда отыскиваются методом наименьших квадратов

trend:=proc(X,Y)
              local i,n,a1,b1;
#объявление локальных переменных (область действия таких переменных только внутри процедуры)
 

>    n:=nops(X):#данная функция определяет мощность множества X             

>    #параметры линейного тренда, согласно МНК:
                                 a1:=(add(Y[i],i=1..n)*add(X[i]^2,i=1..n)-add(X[i],i=1..n)*add(X[i]*Y[i],i=1..n) )/
(n*add(X[i]^2,i=1..n)-add(X[i],i=1..n)^2):

b1:=(n*add(X[i]*Y[i],i=1..n)-add(Y[i],i=1..n)*add(X[i],i=1..n))/
(n*add(X[i]^2,i=1..n)-add(X[i],i=1..n)^2):

#возвращает линейный тренд в качестве функции a1+b1*ksi
return a1+b1*ksi;
#конец процедуры.

end proc;

trend := proc (X, Y) local i, n, a1, b1; n := nops(X); a1 := (add(Y[i],i = 1 .. n)*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)*add(X[i]*Y[i],i = 1 .. n))/(n*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)^...
trend := proc (X, Y) local i, n, a1, b1; n := nops(X); a1 := (add(Y[i],i = 1 .. n)*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)*add(X[i]*Y[i],i = 1 .. n))/(n*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)^...
trend := proc (X, Y) local i, n, a1, b1; n := nops(X); a1 := (add(Y[i],i = 1 .. n)*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)*add(X[i]*Y[i],i = 1 .. n))/(n*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)^...
trend := proc (X, Y) local i, n, a1, b1; n := nops(X); a1 := (add(Y[i],i = 1 .. n)*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)*add(X[i]*Y[i],i = 1 .. n))/(n*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)^...
trend := proc (X, Y) local i, n, a1, b1; n := nops(X); a1 := (add(Y[i],i = 1 .. n)*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)*add(X[i]*Y[i],i = 1 .. n))/(n*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)^...
trend := proc (X, Y) local i, n, a1, b1; n := nops(X); a1 := (add(Y[i],i = 1 .. n)*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)*add(X[i]*Y[i],i = 1 .. n))/(n*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)^...
trend := proc (X, Y) local i, n, a1, b1; n := nops(X); a1 := (add(Y[i],i = 1 .. n)*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)*add(X[i]*Y[i],i = 1 .. n))/(n*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)^...
trend := proc (X, Y) local i, n, a1, b1; n := nops(X); a1 := (add(Y[i],i = 1 .. n)*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)*add(X[i]*Y[i],i = 1 .. n))/(n*add(X[i]^2,i = 1 .. n)-add(X[i],i = 1 .. n)^...

>    #Итак, процедура готова. Продемонстрируем ее использование на примере следующих данных.

>    #подключим пакет графики

>    with(plots):

>    #объявим данные (X,Y) отдельно друг от друга

>    X := [1, 2, 3, 4, 5, 6, 7, 8, 9];
Y := [5, 6, 9, 8, 6, 9, 8, 8, 9];

X := [1, 2, 3, 4, 5, 6, 7, 8, 9]

Y := [5, 6, 9, 8, 6, 9, 8, 8, 9]

>    fr:=[seq([X[k],Y[k]],k=1..nops(X) )]:

>    #создадим графический объект для отображ. линейного тренда

>    tre:=plot(trend(X,Y),ksi=0.5..15,color=blue,
legend="тренд_линейный"):

#создадим графический объект, отобр. данные X,Y

er:=
plot([fr],t=0.5..15,style=[point],
      title="Уравнение регрессии",
      legend=[   "факт.значения"]):

#отображение на экране всёх граф. объектов

>    display(tre, er);

[Maple Plot]

>    #Данную процедуру можно сохранить
#и использовать её в своих приложениях Maple.

>    save trend "trend.m";
#функция Save сохранит процедуру trend в модуле trend.m
#Теперь всякий раз, когда захотите использовать данную процедуру
# в своих программах укажите в начале read "trend.m",;
#то есть подключите таким образом данный модуль.
#Модуль должен находится в той же папке, что и программа, иначе необходимо указать полный путь к файлу.