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

Вывод значений по графику функций - C++

Восстановить пароль Регистрация
 
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
17.12.2013, 01:39     Вывод значений по графику функций #1
Всем привет.
Помогите мне,пожалуйста, литературой или собственным советом,чем угодно...
У меня есть график функции,полученной эмпирически то есть формулы зависимости у меня нет.Можно ли как-то вставить данный график в с++ и ,например,я пишу Х=5, и мне бы выводилось значение У.
спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
17.12.2013, 01:55     Вывод значений по графику функций #2
поясните что значит
график функции,полученной эмпирически то есть формулы зависимости у меня нет
это странно звучит, чуть менее бредовее, чем полный бред, что это там? таблица? алгоритм? что? я пишу X=2, или Ваше же X=5, что выводить в Y? объясните на словах
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
17.12.2013, 02:13  [ТС]     Вывод значений по графику функций #3
График функции -- кривая ,построенная по точкам.Например,график составлен из моих походов в лес в разные дни недели:в понедельник ветер дул с такой силой,во вторник с другой.И график есть кривая ,построенная в декартовой системе координат,где ось Х-дни недели ,У-скорость ветра.И мне нужно,чтобы я ввёл ,например,понедельник, и программа,имея график,выдала мне скорость ветра в понедельник.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
17.12.2013, 02:29     Вывод значений по графику функций #4
Цитата Сообщение от slevin_45 Посмотреть сообщение
График функции -- кривая ,построенная по точкам.Например,график составлен из моих походов в лес в разные дни недели:в понедельник ветер дул с такой силой,во вторник с другой.И график есть кривая ,построенная в декартовой системе координат,где ось Х-дни недели ,У-скорость ветра.И мне нужно,чтобы я ввёл ,например,понедельник, и программа,имея график,выдала мне скорость ветра в понедельник.
ок, начало я понял, давайте внимательно разберём, график некой штуки можно построить по трём вариантам -
1) формула этой функции (определённая на всём интервале где будем строить),
2) дискретная таблица (не важно как получена (чаще - измерением), но так же сопоставляет однозначно X->Y),
3) аппроксимация другого графика

я так понял Вам нужен второй вариант (это про теорию с ветром) заносим в таблицу по дням неделям силу ветра и видимо в ньютонах))) и смотрим на кривую?
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
17.12.2013, 09:22     Вывод значений по графику функций #5
Насколько я понял, вам просто нужно получить функцию, исходя из данных вашей таблицы. Попробуйте провести интерполяцию сплайнами.

В противном случае, если дана таблица, и нужно хранить где-то значения то массив сразу приходит на ум.
vxg
Модератор
 Аватар для vxg
2663 / 1674 / 157
Регистрация: 13.01.2012
Сообщений: 6,251
17.12.2013, 11:00     Вывод значений по графику функций #6
Цитата Сообщение от slevin_45 Посмотреть сообщение
Всем привет.
Помогите мне,пожалуйста, литературой или собственным советом,чем угодно...
У меня есть график функции,полученной эмпирически то есть формулы зависимости у меня нет.Можно ли как-то вставить данный график в с++ и ,например,я пишу Х=5, и мне бы выводилось значение У.
спасибо
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
44
45
46
47
48
49
50
51
52
float data[] =
{
    0, 0,
    1, 1,
    2, 4,
    3, 9,
    4, 16
};
int data_size = sizeof(data) / sizeof(data[0]) / 2;
 
float get_x(float *data, int idx)
{
    return *(data + idx * 2);
}
 
float get_y(float *data, int idx)
{
    return *(data + idx * 2 + 1);
}
 
float get_y(float *data, int data_size, float x)
{
    if (x <= get_x(data, 0)) return get_y(data, 0);
    if (x >= get_x(data, data_size - 1)) return get_y(data, data_size - 1);
    float res = 0;
    for (int idx = 1; idx < data_size; idx++)
    {
        if (get_x(data, idx) > x)
        {
            res = get_y(data, idx - 1) +
            (get_y(data, idx) - get_y(data, idx - 1)) /
            (get_x(data, idx) - get_x(data, idx - 1)) *
            (x - get_x(data, idx - 1));
            break;
        }
 
    }
    return res;
}
 
#include <iostream>
#include <stdlib.h>
 
int main(int argc, char* argv[])
{
    float x;
    std::cout << "x = ";
    std::cin >> x;
    std::cout << "y = " << get_y(data, data_size, x) << std::endl;
    system("pause");
    return 0;
}
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
17.12.2013, 19:20  [ТС]     Вывод значений по графику функций #7
График кривой у меня есть.Мне нужно,чтобы с помощью этого графика программа могла выводить мне значения.
Строить ничего мне не надо,всё готово.
Только каким-либо образом внести данный график в код программы(не в том смысле,чтобы он там был,а чтобы программа могла черпать из него значения и выводить эти значения.)
Может быть,какой-либо раздел почитать.Подскажите.
Ну,например,если бы человеку нужно было вывести латинский алфавит,я бы посоветовал ему почитать про массивы.\\\
Такого рода задания я не выполнял.
vxg
Модератор
 Аватар для vxg
2663 / 1674 / 157
Регистрация: 13.01.2012
Сообщений: 6,251
17.12.2013, 19:56     Вывод значений по графику функций #8
Цитата Сообщение от slevin_45 Посмотреть сообщение
Мне нужно,чтобы с помощью этого графика программа могла выводить мне значения.
поднимите глаза код написан
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
17.12.2013, 19:58     Вывод значений по графику функций #9
Распознование графика? Уф, по-моему проще все же построить функцию.
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
17.12.2013, 21:05  [ТС]     Вывод значений по графику функций #10
Я вообще не представляю как строится график функции в с++.
Могу ли я построить его,имея точки,расположенные друг от друга на расстоянии,например одной клетки?Как программа будет соединять эти точки?Или же это буду делать я?
Или же график функции строиться с минимальными расстояниями,но тогда,как я понимаю,должен использоваться цикл,но для цикла нужна какая-либо зависимость(формула)функции от аргумента,которой у меня нет.
Если первый вариант,то ,в принципе,понятно как сделать моё задание.
VXG,я ведь не просил готовое присылать.Мне нужно самому понять это,лучше посоветуйте тот источник,из которого вы узнали как это делать.Спасибо
vxg
Модератор
 Аватар для vxg
2663 / 1674 / 157
Регистрация: 13.01.2012
Сообщений: 6,251
18.12.2013, 07:03     Вывод значений по графику функций #11
Цитата Сообщение от slevin_45 Посмотреть сообщение
Мне нужно самому понять это
это происходит следующим образом:
-имеем функцию в виде массива точек в котором каждому X соответствует Y (точки упорядочены по X от меньшего к большему)
-если необходимо вычислить значение функции в произвольной точке x мы проверяем попадает ли x в диапазон для которого определена функция - если не попадает (x меньше чем самый первый X или больше чем самый последний X), то мы считаем что нет ничего более умного чем предположить что функция за пределами диапазона определения имеет такое же значение как и в точке диапазона определения максимально приближенной к x - то есть мы как бы считаем, что функция слева от диапазона определения имеет значение такое же Y как у самой перовой точки, а справа от диапазона - такое же Y как у самой последней точки.
-если точка в пределах диапазона мы перебирая точки находим такие точки между которыми расположен этот самый x и находим y при помощи линейной интерполяции.
прочитать даже не знаю где. про интерполяцию как таковую наверное в математике. а про все в сумме - поваренной книги нету - просто сумма знаний. как вариант можно использовать не линейную интерполяцию, а какие-либо другие (например, сплайны), но тогда потребуется задавать граничные условия (например, значения производной в первой и последней точках) которые, очевидно, не так просто из пальца высосать. кроме того это никак не облегчит выдумывание значения за пределами диапазона.
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
18.12.2013, 19:05  [ТС]     Вывод значений по графику функций #12
"если точка в пределах диапазона мы перебирая точки находим такие точки между которыми расположен этот самый x"
Я так понял,это(перебор точек,между которыми наш X) будет выполняться с помощью цикла,с шагом,который выберу я сам.И в зависимости от величины моего шага X будет иметь степень конкретности по местоположению.Т.е. если я выберу шаг два,То программа в праве поместить X в интервале от [2,4].Если же меньший шаг,то всё будет точнее.
Простите,если несу чушь.Но так я понял.
vxg
Модератор
 Аватар для vxg
2663 / 1674 / 157
Регистрация: 13.01.2012
Сообщений: 6,251
19.12.2013, 06:46     Вывод значений по графику функций #13
Цитата Сообщение от slevin_45 Посмотреть сообщение
с шагом,который выберу я сам
нет. этот перебор будет выполняться не по значению X, а по индексам точек в массиве - то есть передвигаясь по точкам в массиве мы будем сравнивать X предыдущей точки с X следующей ожидая ситуацию когда x окажется между ними
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2013, 22:08     Вывод значений по графику функций
Еще ссылки по теме:

Возвращение из функций нескольких значений C++
Определить принадлежит ли данная точка графику функций C++
C++ Вычислить множества значений функций

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

Или воспользуйтесь поиском по форуму:
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
19.12.2013, 22:08  [ТС]     Вывод значений по графику функций #14
Спасибо всем большое!
Yandex
Объявления
19.12.2013, 22:08     Вывод значений по графику функций
Ответ Создать тему
Опции темы

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