Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Метод наименьших квадратов для


Автор: Alex1984 10.5.2006, 12:03
нужна программа АПРОКСИМАЦИИ ФУНКЦИИ НЕСКОЛЬКИХ ПЕРЕМЕННЫХ (Больше двух) мтодом наименьших квадратов.
F(x,y,z) 
Задана таблица 
...............x..y..z..F(x,y,z)
...............1..2..1.....5 
...............4..5..6....18
...............1..2..6.....8 
...............1..5..12...19
нужна найти функцию по данным таблици.
Напишите или растолкуте как прога должна выглядеть, для одной переменной понятно. А как матрица для нескольких переменных будет выглядеть. Не могу разобраться 

http://www.ibss.iuf.net/marecol/52/21.htm
Решение такой задачи только МНК 

Автор: maxim1000 10.5.2006, 12:40
аппроксимируется линейной?
тогда записываем e(x1,x2,x3)=a1*x1+a2*x2+a3*x3-F(x1,x2,x3)=at*x-F(x)
a - вектор (столбец) из a1,a2,a3
x - вектор (столбец) из x1,x2,x3
t - значок транспонирования
e^2(a,x)=at*x*xt*a-2*F(x)*at*x+F^2(x)
суммируем, выносим за скобки, получаем:
at*(сумма всех xt*x)*a-2*at*(сумма всех F(x)*x)+(сумма всех F^2(x))->min по a
все суммы вычисляем
первую называем A
вторую - b
третью, на самом деле, можно даже не вычислять - от a она не зависит - это просто число, и на минимизацию оно влиять не будет
получаем:
atAa-2*at*b->min
a=(A^-1)*b
P.S.
все вопросыреализации - http://forum.vingrad.ru/index.php?showtopic=95389&unread=1&hl= 

Автор: Dark Elf 10.5.2006, 12:52
Матрица будет следующей:

(Sai2)x1 + (Saibi)x2 + … + (Saili)xn - Saifi = 0
(Saibi)x1 + (Sbi2)x2 + … + (Sbili)xn - Sbifi = 0
………………………………………………
(Sliai)x1 + (Slibi)x2 + … + (Sli2)xn - Slifi = 0

Где S - это значок "сигма" (сумма)

x1, x2, x3... xn - аргументы функции.
fi - значения функции 

Автор: Alex1984 10.5.2006, 13:46
должно для линии общее уравнение f(x1,x2,x3)=а1*х1+а2*х1+а3*х1+а4
Матрица М4х4 состоящая из сумм
Вводим матрицу 3*n (х1[1] х2[1] х3[1]) и f[1] до n (n-число точек).
...............x1..x2...x3..F(x,y,z)
................1....2....1.....5 
................4....5....6....18
................1....2....6.....8 
................1....5...12...19
Конкретній пример из 4-х точек.
m[1.1]=n
m[1.2]=Sx1[i]
для одной переменной, как для трех буде?
Не понимаю.
atAa-2*at*b->min суть метода. но xt*x всегда число  

Автор: maxim1000 10.5.2006, 17:11
Цитата(Alex1984 @  10.5.2006,  12:46 Найти цитируемый пост)
но xt*x всегда число

вот тут как раз ничего непонятного: просто я ошибся smile
там x*xt
Цитата(Alex1984 @  10.5.2006,  12:46 Найти цитируемый пост)
должно для линии общее уравнение f(x1,x2,x3)=а1*х1+а2*х1+а3*х1+а4

чтобы не переписывать все формулы, можно просто ввести ещё одну переменную, которая во всех измерениях равна единице... 

Автор: Alex1984 10.5.2006, 23:46
Цитата(maxim1000 @  10.5.2006,  12:40 Найти цитируемый пост)
сумма всех x*xt
 Как это выглядеть будет?

  

Автор: maxim1000 11.5.2006, 00:36
Цитата(Alex1984 @  10.5.2006,  22:46 Найти цитируемый пост)
Как это выглядеть будет?

обычное умножение матрицы 3x1 на матрицу 1x3
получается матрица 3x3:
(x1*x1  x1*x2  x1*x3)
(x2*x1  x2*x2  x2*x3)
(x3*x1  x3*x2  x3*x3) 

Автор: Alex1984 11.5.2006, 07:32
F(x)*x и x*xt матрица такого вида
(x1*x1  x1*x2  x1*x3)
(x2*x1  x2*x2  x2*x3)
(x3*x1  x3*x2  x3*x3)  понимаю,
А сумма как выглядить smile . Помоему долго слишком сижу уже и голова не соображает. Нужно доделать и отдохнуть уже. Помогите закончить 

Автор: Dark Elf 11.5.2006, 09:53
Сумма каждого рядка будет такая:

(x1*x1  x1*x2  x1*x3) = (x1*F(x))
(x2*x1  x2*x2  x2*x3) = (x2*F(x))
(x3*x1  x3*x2  x3*x3) = (x3*F(x))
 

Автор: maxim1000 11.5.2006, 11:37
Цитата(Alex1984 @  11.5.2006,  06:32 Найти цитируемый пост)
А сумма как выглядить 

обычная сумма матриц
надо выписать эту матрицу для каждого измерения и потом все их покомпонентно сложить... 

Автор: Alex1984 16.5.2006, 08:34
maxim1000, задаем четыре значения по каждой точке (три координаты и значение функции в этой точке) таких точек много. через них нужно провести прямую (найти уравнение прямой) методом наименьших квадратов. тоесть получить функцию вида  
f(x1,x2,x3)=а1*х1+а2*х1+а3*х1+а4
Как это зделать. прошу расказать как для мення. не могу в упор разобраться.
очень прога нужна

http://kr.cs.ait.ac.th/~radok/math/mat7/inter.htm
также, только для трех переменных, тут для одной  
для двух
http://www.bsu.edu/web/jkshim/mathandstat/lsm/leastsquare.htm 

Автор: maxim1000 16.5.2006, 10:51
1. выписываем последовательность векторов (x1,x2,x3,1)(n)
2. для каждого вектора считаем матрицу
(x1*x1 x1*x2 x1*x3 x1*1)
(x2*x1 x2*x2 x2*x3 x2*1)
(x3*x1 x3*x2 x3*x3 x3*1)
(1*x1 1*x2 1*x2 1*1)
получится N матриц
3. все их покомпонентно складываем - получаем одну "суммарную" A
4. выписываем последовательность векторов (x1*F(x),x2*F(x),x3*F(x),1*F(x))
5. все их складываем, получаем "суммарный" вектор b
6. решаем систему Ax=b
x - нужные нам параметры (если опять ничего не напутал) 

Автор: Alex1984 18.5.2006, 09:56
Вот что написал http://forum.vingrad.ru/index.php?showtopic=95389&unread=1&st=0&#entry735179 , но что не так? 

Автор: maxim1000 18.5.2006, 12:36
насколько я увидел, там используется x[i,4], которое нигде не заполняется
предполагается, что там будут единицы (ну или просто на него не умножать)

что касается общего совета: сделать возможность менять размерность аргумента функции f и поотлаживать на размерности 1, где всё просто и понятно и можно отследить... 

Автор: Alex1984 21.5.2006, 09:53
Не работает smile 

Автор: Alex1984 22.5.2006, 21:15
Упрощаем задачу. 
Просто поиск уравнение прямой проходящей через точки в четирех мерном пространсве 
f(x1,x2,x3)=а1*х1+а2*х1+а3*х1+а4 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)