2017-01-29 16 views
0

я прочитал статью о https://www.value-at-risk.net/cubic-spline-interpolation/Вычислить матрицу в кубической сплайн-интерполяции

Я все понимаю, но я не знаю, как я могу получить значения для матрицы:

enter image description here

Я знаю, что есть что-то вроде hi = hi + 1 - hi

Я посетил несколько веб-сайтов, прочитал разные объяснения, но я не узнал, как именно я прихожу к этим значениям в матрице.

+0

Я предполагаю, что вы хотите знать, как они идут от [2.127] в [2.128], что означает: как решить 'MX = V', с М квадратной матрицей размерности' n', X и V являются векторами размерности 'n'? – yaitloutou

+0

Я хочу знать, как они получают значения для матрицы M. – zer0kai

+0

, тогда вам нужно отредактировать свой вопрос и включить более подробную информацию, кстати, я думаю, этот вопрос больше подходит для http://math.stackexchange.com – yaitloutou

ответ

2

Матрица - это просто система уравнений, закодированная как матрица, поэтому ее можно легко вычислить с помощью обратной матрицы.

Например, во второй строке матрицы (8,4,2,1,0,0,0,0) после умножения матриц означает следующее:

a3.2^3+a2.1^2+a1.2^1+a0=5 

что ваши p1(2)=5 линии являются:

p1(1)=1 
p1(2)=5 
p2(2)=5 
p2(3)=4 
p1'(2)-p2'(2)=0 
p1''(2)-p2''(2)=0 
p1''(1)=0 
p2''(3)=0 

так, например, последняя матрица линии (0,0,0,0,18,2,0,0) это:

b3.18 + b2.2 = 0 

Если мы выводим p2(t) до 2-й вывод

p2(t) = b3.t^3 + b2.t^2 + b1.t + b0 
p2'(t) = 3.b3.t^2 + 2.b2.t + b1 
p2''(t) = 2.3.b3.t + 1.2.b2 = 6.b3.t + 2.b2 

Теперь t=3 мы получаем:

p2''(3) = 6.b3.3 + 2.b2 = 18.b3 + 2.b2 

И закодированы в матрицу (последняя строка)

(0,0,0,0,18,2,0,0) * (a3,a2,a1,a0,b3,b2,b1,b0) = 0 

который соответствует вашему примеру , Надеется, что теперь понятно ...

Остерегайтесь этим примером вашего только для y оси, как вы получили 2D кривые вам нужно сделать, это для x оси таким же образом снова ...

Теперь переписывает матричное уравнение снова:

M*A=B 

Где M ваша 8x8 матрица, A=(a3,a2,a1,a0,b3,b2,b1,b0) и B=(1,5,5,4,0,0,0,0) вы можете решить эту проблему следующим образом:

inverse(M)*M*A = inverse(M)*B 
      A = inverse(M)*B 

Таким образом, вы получите A который держит ваши p1,p2 многочлены коэффициенты для B который удерживает свою позицию (y координаты в один проход и х-координаты в следующем), так что вы получили p1x,p1y,p2x,p2y многочлены. Это то, что вам нужно для интерполяции.

Однако этот подход является немного обратным и обычно предопределенными полиномиальными формами используются как SPLINE, BEZIER с определенными свойствами, такими как непрерывность, линейность и т. Д. (Нет необходимости в операции обратного матрикса). Но если вам нужны пользовательские свойства, как в этом примере, у вас нет выбора.

Для получения дополнительной информации см How can i produce multi point linear interpolation?

+0

хорошее объяснение, но то, что мне больше всего нравится, - это использование формата кода вместо того, для ^^ " – yaitloutou

 Смежные вопросы

  • Нет связанных вопросов^_^