Форум сайта python.su
4kptЛень было формулировать эту простую мысль своими словами, если это уже сделано, да так красиво)
Википедия, как я вижу, рулит. Другой литературы не нашлось
4kptКак это делается в питоне, не подскажите?) теоретически, я это знаю. мне интересна чисто реализация. это не мат-фетиш, я просто учусь) и я сразу дал понять, что “ценность низкая”, и нужно просто сгладить функцию, чтобы она выглядела по-человечески, а не как кусочно-линейная)
1. Просто провести аппроксимацию, получить полином;
2. Подобрать коэффициенты так, чтобы решение четко проходило через заданные точки.
3. Построить график полученного полинома.
Офлайн
У меня уже пол третьего ночи. Напишу завтра вечером (если никто раньше не напишет). Только я бы хотел уточнить. Чтобы “четко пройдет через заданные точки” необходимо будет изменять “некоторые заданные точки”. Задача будет сводиться к уменьшения точек, которые придеться изменять через подбор полинома.
И еще…
excanderЭто не то, что некрасиво - это ужасно. То что и в том и в другом случае осуществляется приближение многочленами еще не говорит, что эти задачи идентичные. Для их решения используются различные методы и подходы. Это как сказать, что задача линейного программирования - это задача нелинейного программирования, только целевая функция и система ограничений носит линейный характер… :)
если это уже сделано, да так красиво)
Офлайн
4kptсогласен, интерполяция - это не разновидность аппроксимации. и вообще я удалил эту часть коммента #9, перед тем как Вы ответили на него
Это не то, что некрасиво - это ужасно.
Офлайн
То, что мне нужно, получилось с помощью 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')
Прикреплённый файлы: dbd1.jpg (72,3 KБ)
Офлайн
Пришлось поставить все пакеты…
Разберитесь, что у Вас происходит в этих строчках.
tck = interpolate.splrep(S,Rh,s=0) xnew = np.linspace(2,500,10000) ynew = interpolate.splev(xnew,tck,der=0)
Офлайн
4kpt, зачем? Я достаточно хорошо представляю, что в них происходит… тут никаких проблем..
Офлайн
Тогда зачем дополнительные вопросы?
Если Вам все понятно, тогода строка
excanderне имеет смысла…
Но у меня появился 1 вопрос. Как создать xnew, чтобы он состоял из np.linspace(2,30,100) и np.linspace(30,500,100)? или с помощью arange…
Офлайн
Я абсолютно прозрачно понимаю, что и как и для чего. я не понимаю, как создать объект 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)
Офлайн
Был непонятен вопрос.
Самый простой способ - использовать .array() и range().
Офлайн
Хорошо, как это сделать “питонически” хотя бы с “.array() и range()”?
Офлайн