Страница 1 из 1

МНК

Добавлено: Пн мар 04, 2019 4:00 pm
Кли
Здравствуйте!!! Как реализовать минимизацию переопределенной системы?
https://ru.wikipedia.org/wiki/Метод_наи ... _квадратов

Код: Выделить всё

restart;
with(linalg):
5*x+7*y=14;
3*x+2*y=12;
7*x+y=9;
6*x+5*y=17;                     
A:=matrix([[5,7],[3,2],[7,1],[6,5]]);
b:=vector([14,12,9,17]);
A1:=evalf(inverse(multiply(transpose(A),A)));
A2:=multiply(transpose(A),b);
x:=multiply(A1,A2);

Re: МНК

Добавлено: Пн мар 04, 2019 5:42 pm
Kitonum
Для вашей задачи есть отдельная команда LinearAlgebra:-LeastSquares . Пакет linalg давно устарел и его лучше не использовать:
restart;
with(LinearAlgebra):
Eq1:=5*x+7*y=14;
Eq2:=3*x+2*y=12;
Eq3:=7*x+y=9;
Eq4:=6*x+5*y=17;
Sol:=LeastSquares({Eq1,Eq2,Eq3,Eq4}, {x,y});
evalf(Sol);

Re: МНК

Добавлено: Пн мар 04, 2019 5:54 pm
Кли
а минимизировать уже не надо?

Re: МНК

Добавлено: Пн мар 04, 2019 6:15 pm
Kitonum
Не надо.

Re: МНК

Добавлено: Пн мар 04, 2019 6:22 pm
Кли
ок, понял, спасибо)))

Re: МНК

Добавлено: Чт мар 07, 2019 7:22 pm
Кли
а как найти сумму отклонений?

Re: МНК

Добавлено: Чт мар 07, 2019 11:36 pm
Kitonum
Нахождение суммы квадратов отклонений для найденного решения:
restart;
with(LinearAlgebra):
Eq1:=5*x+7*y=14;
Eq2:=3*x+2*y=12;
Eq3:=7*x+y=9;
Eq4:=6*x+5*y=17;
Sol:=LeastSquares({Eq1,Eq2,Eq3,Eq4}, {x,y});
evalf(eval(`+`(op(map((lhs-rhs), [Eq1,Eq2,Eq3,Eq4])^~2)), Sol));

Re: МНК

Добавлено: Пт мар 08, 2019 9:39 am
Markiyan Hirnyk
Иной способ - применить DirectSearch:

Код: Выделить всё

DirectSearch:-SolveEquations([Eq1, Eq2, Eq3, Eq4]);
[40.031052155562236, Vector[column](4, [2.51100392017952600, -5.12179680447659802, 2.00180886191407836, -1.86704853777850665]), [x = 1.3750376843913412, y = 1.376545071174689], 50]
Сумма квадратов отклонений равна 40.031052155562236.

Re: МНК

Добавлено: Пт мар 08, 2019 12:59 pm
Кли
благодарю