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

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

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

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

27.06.2012, 10:02. Просмотров 3166. Ответов 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 зависает при вычислении.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2012, 10:02     Кусочно-линейная аппроксимация
Посмотрите здесь:

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

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

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

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

Линейная аппроксимация: метод наименьших квадратов (МНК) - 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 секунд порциями...

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

Вычисление значений кусочно заданной функции - C++
Составление программ и использованием процедур и функций 4-го элемента выражения оформить как функцию ввод исходных данных оформить...

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

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

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

Вычислить значение кусочно заданной функции - C++
X^2 + |x| , если -5&lt;x&lt;0 F(x) = 5x^3 + cosx , если 0&lt;=x&lt;2


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.06.2012, 10:14     Кусочно-линейная аппроксимация #2
C++
1
i = indexMax;
C++
1
i = indexMin;
Конечно зависнет. Как только условие срабатывает, переменная i обнуляется и цикл начинается сначала.
megalexa
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 34
27.06.2012, 10:42  [ТС]     Кусочно-линейная аппроксимация #3
видимо, надо было так indexMax = i и, соответственно, indexMin = i

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

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

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

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

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

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

с типами переменных вроде все-норм (там где хватает int - там и int, там где надо double - double)...
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
27.06.2012, 10:52     Кусочно-линейная аппроксимация #4
Скорее всего из-за того, что деление получается целочисленным.
C++
1
double Y = (double(max-x) / (max-min))*Y[indexMin] +(double(x-min)/(max-min))*Y[indexMax];
megalexa
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 34
27.06.2012, 11:16  [ТС]     Кусочно-линейная аппроксимация #5
огромное-преогромное спасибо, теперь работает так, как надо.
Yandex
Объявления
27.06.2012, 11:16     Кусочно-линейная аппроксимация
Ответ Создать тему
Опции темы

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