Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2013 03:25:10

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

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

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

Офлайн

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

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

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

У меня уже пол третьего ночи. Напишу завтра вечером (если никто раньше не напишет). Только я бы хотел уточнить. Чтобы “четко пройдет через заданные точки” необходимо будет изменять “некоторые заданные точки”. Задача будет сводиться к уменьшения точек, которые придеться изменять через подбор полинома.

И еще…

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



Офлайн

#3 Апрель 2, 2013 12:10:38

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

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

4kpt
Это не то, что некрасиво - это ужасно.
согласен, интерполяция - это не разновидность аппроксимации. и вообще я удалил эту часть коммента #9, перед тем как Вы ответили на него

Офлайн

#4 Апрель 2, 2013 13:33:10

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

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

То, что мне нужно, получилось с помощью Cubic-spline interpolation (см вложение):

import numpy as np
import pylab as pl
from scipy import interpolate
S = np.array([2, 4, 8, 10, 20, 50, 70, 100, 150, 200, 300, 400, 500],dtype=float)
Rh = 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)
tck = interpolate.splrep(S,Rh,s=0)
xnew = np.linspace(2,500,10000)
ynew = interpolate.splev(xnew,tck,der=0)
pl.plot(xnew,ynew,S,Rh,'r')

Но у меня появился 1 вопрос. Как создать xnew, чтобы он состоял из np.linspace(2,30,100) и np.linspace(30,500,100)? или с помощью arange…

Прикреплённый файлы:
attachment dbd1.jpg (72,3 KБ)

Офлайн

#5 Апрель 2, 2013 16:43:11

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

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

Пришлось поставить все пакеты…
Разберитесь, что у Вас происходит в этих строчках.

tck = interpolate.splrep(S,Rh,s=0)
xnew = np.linspace(2,500,10000)
ynew = interpolate.splev(xnew,tck,der=0)



Офлайн

#6 Апрель 2, 2013 18:15:54

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

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

4kpt, зачем? Я достаточно хорошо представляю, что в них происходит… тут никаких проблем..

Офлайн

#7 Апрель 2, 2013 19:59:16

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

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

Тогда зачем дополнительные вопросы?
Если Вам все понятно, тогода строка

excander
Но у меня появился 1 вопрос. Как создать xnew, чтобы он состоял из np.linspace(2,30,100) и np.linspace(30,500,100)? или с помощью arange…
не имеет смысла…



Офлайн

#8 Апрель 2, 2013 21:27:25

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

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

Я абсолютно прозрачно понимаю, что и как и для чего. я не понимаю, как создать объект ndarray с разным шагом на разных отрезках!!! мне это необходимо, потому что мой график имеет гиперболический вид (прикреплял рисунок), и нет смысла делать разбивку отрезка, c одинаковым по длине шагом на

[2;30]
и на
[30,500]
! смысл понимаете?
например, надо получить:
xnew = [2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,100,170,240,310,380,450,520]

Отредактировано excander (Апрель 2, 2013 21:29:59)

Офлайн

#9 Апрель 3, 2013 02:09:23

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

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

Был непонятен вопрос.
Самый простой способ - использовать .array() и range().



Офлайн

#10 Апрель 3, 2013 06:40:41

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

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

Хорошо, как это сделать “питонически” хотя бы с “.array() и range()”?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version