Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2013 01:46:11

excander
Зарегистрирован: 2013-04-02
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

Есть несколько значений x и y:

x = np.array([2, 4, 8, 10, 20, 50, 70, 100, 150, 200, 300, 400, 500],dtype=float)
y = np.array([90, 45, 22.5, 18, 9, 3.60, 2.57, 1.8, 1.2, 0.9, 0.6, 0.45, 0.36],dtype=float)
Если построить график просто:
import matplotlib.pyplot as plt
plt.plot(x,y)
- точки будут соединены прямыми, получится ломаная, проходящая через данные точки.
Как мне сделать график гладким без особых усилий? мб через scipy как-нибудь?

Пробовал interp1d, но с ней большая осцилляция..
import numpy as np
from scipy.interpolate import interp1d
f2 = interp1d(x, y, kind='cubic')
nx = np.linspace(2,500,100)
plt.plot(x, y,'o',nx, f2(nx))
plt.show()
Даже не совсем могу понять - мне нужно искать интерполяцию (т.к. график должен проходить через мои точки) или аппроксимацию типа scipy.optimize.curve_fit( но у меня же нету шума, опять же. мои точки можно считать точными)
Нужно что-то простое, чтобы показать как ведет себя функция… и все. помогите плз))

Отредактировано excander (Апрель 2, 2013 01:48:27)

Офлайн

#2 Апрель 2, 2013 02:19:50

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

Хорошо. Как Вы себе представляете кривую, которая будет проходить через все Ваши случайные точки?
Каким образом ее можно высчитать и построить аппаратно чтобы она была адекватной? Единственная возможность - аппроксимация. Если правильно подобрать степень многочлена, то она пройдет очень близко к точкам.

excander
Нужно что-то простое, чтобы показать как ведет себя функция… и все. помогите плз))
Как ведет себя функция? Да это же видно и из ломаной.

Все хитрости, которые Вы хотите применить используют для получения зависимости по точкам, которые были получены эмпирически, т.е. по экспериментальным данным строится теоретическая / в нашем случае математическая / модель (или ее часть) и график служит для визуального отображения отклонения экспериментальных данных и данных модели (эмпирических и теоретических данных). Для оценки степени отклонения при аппроксимации можно использовать норму или СКО.



Отредактировано 4kpt (Апрель 2, 2013 02:36:56)

Офлайн

#3 Апрель 2, 2013 02:31:23

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

Посмотрите на рисунок. Здесь получена кривая, которая проходит четко через все точки. Использован метод сплайн-интерполяции. Проще - построение сплайна.

Как Вы считате, кривая соответствует поведению функции? Или лучше оставить ломаную?



Отредактировано 4kpt (Апрель 2, 2013 02:31:46)

Прикреплённый файлы:
attachment График.jpg (50,5 KБ)

Офлайн

#4 Апрель 2, 2013 02:31:52

excander
Зарегистрирован: 2013-04-02
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

4kpt
Как Вы себе представляете кривую, которая будет проходить через все Ваши случайные точки?… Как ведет себя функция? Да это же видно и из ломаной.
Да. это видно из ломанной, но мне нужно визуально красивый график, а не ломаную.
Я в матплотлибе 1й день, поэтому знаю пока мало, но думаю должно быть что-то что нарисует мне сплайн по точкам.

Офлайн

#5 Апрель 2, 2013 02:33:07

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

excander
Для каких Вам задач это надо?



Офлайн

#6 Апрель 2, 2013 02:39:47

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

Повторюсь еще раз. Если нужно узнать поведение Вашей функции - либо интерполяция, либо - аппроксимация (она позволит описать поведение функции и визуально его отобразить, но пройдет не через Ваши точки).



Отредактировано 4kpt (Апрель 2, 2013 02:40:05)

Офлайн

#7 Апрель 2, 2013 02:43:35

excander
Зарегистрирован: 2013-04-02
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

4kpt
Посмотрите на рисунок. Здесь получена кривая, которая проходит четко через все точки. Использован метод сплайн-интерполяции. Проще - построение сплайна.

Как Вы считате, кривая соответствует поведению функции? Или лучше оставить ломаную?

Думаю, что лучше - зависит от типа функции. в моем случае она монотонно убывает… нет экстремумов.. поэтому отклонение от ломаной у сплайна, думаю будет минимальным.
4kpt
excanderДля каких Вам задач это надо?
я по-моему очень подробно описал) Задача: даны N точек, провести через них кривую. (как в школе, строили график по точкам карандашом) Грубо говоря, хочу сделать задание не на миллиметровке, а в питоне.

Офлайн

#8 Апрель 2, 2013 02:45:14

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

Еще раз. Для каких задач? Чисто теоретически или кому-то показывать? Цель получения такого графика?
Это будет в презентации на конференции или в статья? Лабораторная работа или что?



Отредактировано 4kpt (Апрель 2, 2013 02:51:11)

Офлайн

#9 Апрель 2, 2013 02:54:38

excander
Зарегистрирован: 2013-04-02
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

Я знаю, что либо аппроксимация либо интерполяция. Мне нужно самое простое решение.

4kpt
Еще раз. Для каких задач? Чисто теоретически или кому-то показывать? Цель получения такого графика?
Это будет в презентации на конференции или в статья? Лабораторная работа или что?
Лабораторка в инсте по БЖД)) А какая разница, лабораторная это, или конференция, или статья, или папе показать хочу красивый график?)) Функции разные что-ли?)

Отредактировано excander (Апрель 2, 2013 03:01:16)

Офлайн

#10 Апрель 2, 2013 03:16:24

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Построение графика в matplotlib. Аппроксимация. Интерполяция. Scipy

Необходимо понять ценность этой информации для окружающих.

excander
Вы ошибаетесь, интерполяцией называют такую разновидность аппроксимации, при которой кривая построенной функции проходит точно через имеющиеся точки данных.
Википедия, как я вижу, рулит. Другой литературы не нашлось :)

Это практически так, но отличается подход. При интерполяции стараются подобрать функцию, значения которой совпадают с заданными точками, при апроксимации - уменьшаю либо среднюю квадратическую ошибку аппроксимации, либо максимум абсолютной ошибки на выбранном интервале.

Теперь без теории. То, чем Вы планируете заниматься можно назвать мат-фетишизмом. Если ценность очень низкая, а Вашем случае именно так, то я рекомендую:
1. Просто провести аппроксимацию, получить полином;
2. Подобрать коэффициенты так, чтобы решение четко проходило через заданные точки;
3. Построить график полученного полинома.



Отредактировано 4kpt (Апрель 2, 2013 03:20:41)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version