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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
megalexa
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 34
#1

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

27.06.2012, 10:02. Просмотров 3341. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кусочно-линейная аппроксимация (C++):

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

Кусочно-линейная функция - C++
Разработайте программу для вычисления значений функции приведенной на графике, исходя из предложения, что при X&lt;-2 и при X&gt;5 поведение...

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

Аппроксимация.Линейная интерполяция - C++
Здравствуйте!Помогите,пожалуйста,найти ошибку в коде.Высчитывает неверные корни. #include&lt;iostream&gt; #include&lt;math.h&gt; using namespace...

Линейная аппроксимация: метод наименьших квадратов (МНК) - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; // Задание начального набора значений double **...

Табулирование кусочно непрерывной функции. - C++
Помогите пожалуйста с решением задачи. Выводить по диагонали снизу вверх слева направо в формате f(x)=y через паузы по 5 секунд порциями...

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

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

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

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

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

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

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

с типами переменных вроде все-норм (там где хватает int - там и int, там где надо double - double)...
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
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 / 0
Регистрация: 16.11.2011
Сообщений: 34
27.06.2012, 11:16  [ТС] #5
огромное-преогромное спасибо, теперь работает так, как надо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 11:16
Привет! Вот еще темы с ответами:

Табулирование кусочно-непрерывной функции - C++
Нужна программа по табулированию кус.-непр. функции. Помогите пожалуйста. Система образования убивает, ты приходишь с 0 знаниями с++ и...

Вычислить значение кусочно заданной функции - C++
Первый день знакомлюсь с С++, еще плохо в нем ориентируюсь, компилятор указал 3 error и 8 warning. Подскажите что не так, пожалуйста. ...

Вычислить значение кусочно заданной функции - C++
Здравствуйте! прошу помочь с программой

Найти значение кусочно-непрерывной функции - C++


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
27.06.2012, 11:16
Ответ Создать тему
Опции темы

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