2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Линейная интерполяция в Python
Сообщение05.10.2017, 15:12 
Добрый день! Второй день бьюсь над задачей, но она все никак не выходит.
Задача состоит в следующем: даны n узлов и n значений , необходимо написать функцию, которая бы строила полином первой степени на каждом интервале [x(i);x(i+1)] (линейная интерполяция), графиком должна быть, соответственно кусочно-линейная функция.
Знаю, что в numpy есть numpy.interp, которая делает это все в несколько строчек, но задание состоит в том, чтобы написать свой интерполятор.
Вот мои попытки:
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
def lin(x,y,t):
   for i in range(len(x)):
        if x[i]==t:
            return (f(t))
            break
        elif x[i]>t:
            max=x[i]
            break
        elif x[i]<t:
            min=x[i]
            break
        c=(f(max)-f(min))*(t-min)/(max-min)+f(min)
    return c
ylin=[lin(x, y, i) for i in x]
plt.plot(x,ylin, 'm')
plt.grid(True)
plt.show()
 

Здесь
Используется синтаксис Python
max
-это x(i+1), a
Используется синтаксис Python
min
-x(i).
При запуске данного кода, выдается ошибка:
return c
^
IndentationError: unindent does not match any outer indentation level

Хотя вроде бы, все пробелы и табуляции соблюдены.
Надеюсь, смогу здесь найти помощь и буду очень благодарен за любые советы.
Заранее спасибо!

 
 
 
 Re: Линейная интерполяция в Python
Сообщение05.10.2017, 15:22 
Я в питонах не разбираюсь, но у Вас цикл какой-то дикий -- "максимум" так никогда и не будет присвоен, а "минимум" окажется не тем, который нужен. Кроме того, первая из трёх веток условного оператора совершенно излишня.

Да, а отступы действительно чуть сбиты: for начинается с 4-й позиции, а return -- с 5-й.

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group