2-мерная интерполяция - PullRequest
       14

2-мерная интерполяция

0 голосов
/ 08 января 2010

Я хочу найти значение z при y = 12 и x = 3.5, учитывая данные примера ниже. Как я могу сделать это в C ++?

y = 10
x = [1,2, 3,4, 5,6]
z = [2.3, 3.4, 5.6, 7.8, 9.6, 11.2]

y = 20 
x = [1,2, 3,4, 5,6]
z = [4.3, 5.4, 7.6, 9.8, 11.6, 13.2]

y = 30 
x = [1,2, 3,4, 5,6]
z = [6.3, 7.4, 8.6, 10.8, 13.6, 15.2]

Мой текущий код Python:

import scipy
import math
import numpy
from scipy import interpolate

x = [1, 2, 3, 4, 5, 6]
y = [10, 20, 30]

Y = numpy.array([[i]*len(x) for i in y])
X = numpy.array([x for i in y])
Z = numpy.array([[2.3, 3.4, 5.6, 7.8, 9.6, 11.2],
                 [4.3, 5.4, 7.6, 9.8, 11.6, 13.2],
                 [6.3, 7.4, 8.6, 10.8, 13.6, 15.2]]) 


tck = interpolate.bisplrep(X, Y, Z)
print interpolate.bisplev(3.5, 15, tck) 

Ответы [ 2 ]

1 голос
/ 08 января 2010

Я бы использовал Сплайн Акимы , который очень хорошо протестирован, очень быстр и дает очень хорошие результаты.

К сожалению, он в Fortran-66 (и в этом беспорядке), поэтому вам нужно будет либо перевести его на C, либо на более современный вариант Fortran. Я получил некоторую помощь в том, чтобы все это заработало, поэтому я предлагаю прочитать мои темы в Usenet.

1 голос
/ 08 января 2010

Просто сделайте интерполяцию дважды. Сначала интерполируйте с Y, чтобы выбрать две Z таблицы. Затем интерполируйте с помощью X, чтобы выбрать значение Z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...