Форум программистов, компьютерный форум CyberForum.ru

Метод наименьших квадратов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Yupas
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 9
22.05.2014, 13:23     Метод наименьших квадратов #1
Ребят,вот в чем беда. нужно для курсового решить задачу.
нужно апроксимировать данные линейной зависимостью y=ax+b.
В ручную все уже решил,нужно написать программу на языке с++.(ну,если напишете на другом,постараюсь перевести)

Есть табичные значения:
i=1 i=2 i=3 i=4 i=5
0 1 2 4 5
2,1 2,4 2,6 2,8 3

нужно найти а и б.Находиться как сумма от 1до n (yi-(axi+b))^2.

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

помогите пожалуйста....очень нужно)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.05.2014, 13:27     Метод наименьших квадратов #2
у Вас был курс по решению задач поиска минимума(максимума) ф-ций?
можно градиентным методом, но Вам будет проще покоординатный спуск
Yupas
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 9
22.05.2014, 13:31  [ТС]     Метод наименьших квадратов #3
Да,учили как искать минимум и максимум.
Но тема курсовой работы "интерполяция функции методом наименьших квадратов". я взял обычную линейную зависимость,взял табличные данные. текстотавая часть курсового впорядке,нужно только написать программу,а тут я этими циклами,суммами вешаться готов...
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.05.2014, 13:43     Метод наименьших квадратов #4
ну в 2х словах, у Вас есть ф-ция (yi-(axi+b))^2., необходимо найти ее минимум(по сути получим приближение некого распределения точек, линейной ф-цией)
какие параметры могут меняться? правильно а и b, что делаем берем какие то отрезки для a и b, например [-50 50] [-10 10]
для поиска минимум вдоль одного из параметров выберем золотое сечение
рассмотрим случай для параметра а:
есть отрезок [-50 50]
a1 = -50
a2 = 50;
считаем новые точки
a1_n = a1 - (a2-a1)/1.61(1.61 это число свойственное золотому сечению/, в инете инфы полно)
a2_n = a2 + (a2-a1)/1.61
смотрим значения ф-ции (yi-(axi+b))^2. в этих 2 точках, подставив a1_n и a2_n вместо а
и смотрим, если F(a1_n) больше F(a2_n) тогда вместо а1 использем a1_n
если F(a1_n) меньше F(a2_n) тогда вместо а2 использем a2_n
если F(a1_n) равно F(a2_n) тогда вместо а1 использем a1_n и вместо а2 используем a2_n
и возвращаемся к строке "считаем новые точки"
аналогично для параметра b
Yupas
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 9
22.05.2014, 16:56  [ТС]     Метод наименьших квадратов #5
дело в том,что мне нужно написать программу, которая соответствует моему примеру в Курсовом...вот в чем беда)
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
23.05.2014, 10:02     Метод наименьших квадратов #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
double Func(a,b,int * Y)
{
double g =  0;
for(size_t i = 0; i < 5; i++)
{
g+=(Y[i]-(a*i+b))*(Y[i]-(a*i+b));
}
return g;
}
int main()
{
int Y[5] = {2.1, 2.4, 2.6, 2.8, 3.};
double eps = 1.;
double a1 = -50.;
double a2 = 50.;
double b1 = -10.;
double b2 = 10.;
double tau = 1.618;
double a1_n=0, a2_n=0, b1_n=0,b2_n=0;
double F1,F2;
while(eps>0.001)
{
a1_n = a2-(a2-a1)/tau;
a2_n = a1+(a2-a1)/tau;
F1 = Func(a1_n, (b2-b1)/2., Y);
F2 = Func(a2_n, (b2-b1)/2., Y);
if(F2>F1)
{
a1 = a1_n;
}
else if(F2==F1)
{
a1 = a1_n;
a2 = a2_n;
}
else
{
a2 = a2_n;
}
//теже действия относительно b
eps = (a2-a1>b2-b1)?(a2-a1):(b2-b1);
}
}
Добавлено через 2 минуты
Золотое сечение
покоординатный спуск
Yupas
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 9
23.05.2014, 19:26  [ТС]     Метод наименьших квадратов #7
Спасибо большое. сегодня попробую.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2014, 21:03     Метод наименьших квадратов
Еще ссылки по теме:

МНК (Метод наименьших квадратов) C++
C++ Метод наименьших квадратов! (с Pascal на C++)
Метод наименьших квадратов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yupas
0 / 0 / 0
Регистрация: 24.02.2014
Сообщений: 9
25.05.2014, 21:03  [ТС]     Метод наименьших квадратов #8
не работает.......что то видно у меня не так выходит...
то не может обратиться к б.д. программы,то не может преобразовать......
Yandex
Объявления
25.05.2014, 21:03     Метод наименьших квадратов
Ответ Создать тему
Опции темы

Текущее время: 23:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru