Как указать количество узловых точек при использовании scipy.splprep



У меня есть следующий фрагмент кода. Он генерирует трехмерный кубический сплайн данной трехмерной функции, заданной в параметрической форме. Я приспособил это к моему делу с использованием интерактивной документации для splprep и splev.



Но у меня есть кое-что, чего я не понимаю. Вот код:

%matplotlib inline
from numpy import arange, cos, linspace, pi, sin, random
from scipy.interpolate import splprep, splev
import matplotlib.pyplot as plt

# make ascending spiral in 3-space
t=linspace(0,1.75*2*pi,100)

x = sin(t)
y = cos(t)
z = t


# spline parameters
s=3.0 # smoothness parameter
k=3 # spline order
nest=-1 # estimate of number of knots needed (-1 = maximal)

# find the knot points
tck,u = splprep([x,y,z],s=s,k=k,nest=-1)

# evaluate spline, including interpolated points
xnew,ynew,znew = splev(linspace(0,1,400),tck)


У меня есть несколько вопросов относительно этой реализации.



  1. Что именно возвращает кортеж (t,c,k) в этом случае?. Я ознакомился с документацией и он говорит, что возвращает узловые точки, коэффициенты и степень сплайна. Разве узловые точки не должны быть координатами вида (x, y, z)?. Поэтому мы должны иметь "number of knots" такие точки координат. Но это не то, что возвращается. Мы просто получаем возвращенный массив length 11.



  2. Что возвращает u? (В документации говорится, что он возвращает значения параметра. Что это значит?. Значения параметра t?



  3. Когда я использую nest = -1 (Это по умолчанию) он использует максимальное количество необходимых узловых точек (в этом случае они используют 11 узловые точки). Но как я могу указать свое собственное число узловых точек, скажем, 50 или 80 и т. д.?



Я совершенно неправильно понимаю документацию здесь. Может быть, кто-то просветит меня, используя примеры?

671   1  

1 ответ:

Значения параметра, u

Идея состоит в том,что ваши точки [x,y, z] являются значениями некоторой параметризованной кривой, исходный параметр которой в вашем примере равен t. Знание значений параметра t помогает понять, как интерполировать между этими точками. По этой причине вам предоставляется возможность передать значения параметра в качестве необязательного аргумента u (в данном примере это будет u=t). Но если вы решите этого не делать, метод сделает предположение о значениях параметр, основанный на расстояниях между заданными точками (интервал параметра будет от 0 до 1). Это предположение затем возвращается вам в виде переменной u, так что вы знаете, как были интерпретированы данные. Если вы передадите u=t в качестве аргумента, то u, которое вы получите, будет точно таким же.

Вам действительно не нужно это u, чтобы использовать сплайн. Однако, если желательно сравнить расположение исходных точек [x, y, z] со значениями сплайна, то можно передать u как аргумент к splev. Более короткий способ объяснить значение u: это то, что splev потребуется для воспроизведения координат [x,y,z], с которыми вы начали, с некоторыми отклонениями из-за сглаживания.

Значения Tck

Узлы сплайна, t, являются точками в интервале параметров , а не в трехмерном пространстве. Поскольку в вашем примере интервал параметра равен [0,1], выбранному по умолчанию, значения t находятся в этом диапазоне. Узел - это место на параметре интервал, в котором изменяются некоторые коэффициенты сплайна. Конечные точки 0 и 1 технически являются несколькими узлами, поэтому они перечислены несколько раз. Трехмерная природа кривой выражается коэффициентами c. Вы можете заметить, что это список из трех массивов, по одному для каждой координаты.

Количество узловых точек

С этой процедурой интерполяции у вас есть два варианта:

  • скажите ему точно, что такое узловые точки (давая task=-1 и предоставляя t спор с узлами). Чтобы избежать путаницы: это t не обязательно является t, из которого вы получили точки [x,y, z]. Не обязательно, чтобы каждая точка выборки была узловой точкой.
  • Оставьте определение узлов до рутины, включая их количество.
Однако количество узлов зависит от значения параметра гладкости s, поэтому на него можно влиять косвенно. Например, с вашими данными есть 11 узлов с s=3, но 12 узлов с s=1 и 14 узлов с s=0,1.

Comments

    Ничего не найдено.