Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
megalexa
3 / 3 / 2
Регистрация: 16.11.2011
Сообщений: 34
1

Кусочно-линейная аппроксимация

27.06.2012, 10:02. Просмотров 4207. Ответов 4
Метки нет (Все метки)

Здравствуйте.

Задача: есть два массива X и Y (с одинаковым количеством элементов - по 19). Необходимо установить зависимость между ними Y(X) так, чтобы можно было находить неизвестное приблизительное число Y при значениях X, не из массива.

Решил использоваться кусочно-линейную аппроксимацию.

Алгоритм (найти отрезок x1 < x < x2, вычислить вес для y1: w1 = (x2 - x) / (x2 - x1), вес для точки y2: w2 = (x - x1) / (x2 - x1), сложить: y(x) = y1*w1 + y2*w2).

Код программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public: double approximat(int X[19], int Y[19], int x)
{    
// вычисление ближайшего большего и его индекса 
                int max = X[0];
                int indexMax = 0;  // индекс
                 for (int i = 0; i<19; i++)
                    {
                        if (X[i] <= max && x <= X[i]) {max = X[i]; i = indexMax;}
                    }
 
// вычисление ближайшего меньшего и его индекса 
 
                int min = X[19];
                int indexMin = 0;
                 for (int i = 0; i<19; i++)
                    {
                        if (X[i] >= min && x >= X[i]) {min = X[i]; i = indexMin;};
                    }
 
// вычисление нужного Y
double Y = ((max-x) / (max-min))*Y[indexMin] +((x-min)/(max-min))*Y[indexMax];
return Y;
}
P.S, намеренно пишу в этом разделе не на родном C++, а в CLI/C++ (Windows Forms).

компиляция проходит успешно, но окно forms зависает при вычислении.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2012, 10:02
Ответы с готовыми решениями:

Кусочно-линейная аппроксимация
Добрый времени суток всем. Необходима помощь в написание алгоритма...

Кусочно-линейная функция
Разработайте программу для вычисления значений функции приведенной на графике,...

Аппроксимация.Линейная интерполяция
Здравствуйте!Помогите,пожалуйста,найти ошибку в коде.Высчитывает неверные...

Линейная аппроксимация значений
Ребят, дали такую задачу на практику, но прочитав 4 раза условие задачи уровень...

Линейная аппроксимация: метод наименьших квадратов (МНК)
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt;...

4
grizlik78
Эксперт С++
1988 / 1480 / 192
Регистрация: 29.05.2011
Сообщений: 3,059
27.06.2012, 10:14 2
C++
1
i = indexMax;
C++
1
i = indexMin;
Конечно зависнет. Как только условие срабатывает, переменная i обнуляется и цикл начинается сначала.
1
megalexa
3 / 3 / 2
Регистрация: 16.11.2011
Сообщений: 34
27.06.2012, 10:42  [ТС] 3
видимо, надо было так indexMax = i и, соответственно, indexMin = i

спасибо за то, что указали, где ошибка

Добавлено через 19 минут
еще одна проблема:

вот, что выводит:

Кусочно-линейная аппроксимация


а должно получиться 760

как-будто обрезает где-то числа (вообще мне точность подойдет, просто интересно, где косяк)

с типами переменных вроде все-норм (там где хватает int - там и int, там где надо double - double)...
0
grizlik78
Эксперт С++
1988 / 1480 / 192
Регистрация: 29.05.2011
Сообщений: 3,059
27.06.2012, 10:52 4
Скорее всего из-за того, что деление получается целочисленным.
C++
1
double Y = (double(max-x) / (max-min))*Y[indexMin] +(double(x-min)/(max-min))*Y[indexMax];
1
megalexa
3 / 3 / 2
Регистрация: 16.11.2011
Сообщений: 34
27.06.2012, 11:16  [ТС] 5
огромное-преогромное спасибо, теперь работает так, как надо.
0
27.06.2012, 11:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 11:16

Кусочно заданная функция
#include&lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; #include&lt;stdio.h&gt;...

Табулирование кусочно непрерывной функции.
Помогите пожалуйста с решением задачи. Выводить по диагонали снизу вверх...

Табулирование кусочно-непрерывной функции
Нужна программа по табулированию кус.-непр. функции. Помогите пожалуйста. ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru