BPoly вроде интерполяции в 3D?Python

Программы на Python
Ответить
Anonymous
 BPoly вроде интерполяции в 3D?

Сообщение Anonymous »

У меня есть набор трехмерных точек, каждая из которых содержит информацию о производной кривой в этой точке. Я хочу нарисовать кривую через эти точки.
В 2D я могу использовать BPoly из scipy, как показано ниже:

Код: Выделить всё

import numpy as np
from scipy.interpolate import BPoly

x_pts = np.linspace(-1, 1, 5)
y_pts = x_pts**2
derivative_pts = [1, -1, 0, 1, 2]

yi = [[y_pts[i], derivative_pts[i]] for i in range(len(derivative_pts))]
bpoly = BPoly.from_derivatives(x_pts, yi)

x_curve = np.linspace(-1, 1, 100)
y_curve = bpoly(x_curve)
Этот код генерирует кривую с перегибом от -1 до -0,5, что помогает мне визуализировать кривую и составить интуитивное представление о ее форме.
Я использую Python, и мои наборы данных относительно невелики, около 20 точек данных. Каждая точка представляет собой трехмерную точку в пространстве с двумерным якобианом. Я хочу визуализировать эти точки и поверхность, проходящую через эти точки, с учетом условий производной в каждой точке.
Я исследовал схемы 3D-интерполяции и обнаружил, что scipy предлагает несколько многомерных методы интерполяции, но я не знаю, какой из них лучше всего подходит для ограничения якобиана определенным значением в каждой точке.
Изменить:
После рассмотрение комментариев, я надеюсь, что это добавит больше контекста к тому, почему я задаю этот вопрос и что я надеюсь получить от этого анализа.
Я работаю со сложной экспериментальной системой со множеством различных переменных. / ручки настройки. Я хочу изменить две ручки управления X и Y и измерить результирующее изменение интересующего нас свойства Z. Обычно нам экспериментально доступно значение Z и производные первого порядка в этой точке (в эксперимент, это означает, что мы немного меняем только X или Y и измеряем это влияние на Z - конечно, это также может изменить другие переменные, но я рад пока это игнорировать).
Поэтому мне интересно, какой профиль Z(X,Y) примерно так выглядит. Для дискретных пар точек (X,Y)_i — у меня есть данные о значении функции Z(X,Y), dZ/dX и dZ/dY в этих точках. Проблема в том, что получение этих данных занимает много времени, поэтому я не могу просто охватить все пространство X и Y. Я хотел сделать разумную визуализацию того, как могла бы выглядеть кривая Z(X,Y) с учетом данных, которые я уже собраны.
Это должно дать представление о том, как выглядят данные:

Код: Выделить всё

x = np.array([0,40,100,200])
y = np.array([0,100,200])
x_mesh, y_mesh = np.meshgrid(x,y)

z = np.array([
[6000, 4000, 200, 200],
[4000, 2500, 1000, 200],
[1000, 500, 3000, 1000]
])

dz_dx = np.array([
[-10, -5, 0, 0],
[-8, -2, -0.5, 0],
[-5, -1, -0.3, -0.2]
])

dz_dy = np.array([
[-10, -5, 0, 0],
[-7, -3, 1, 0],
[-5, -2, 0.5, 1]
])
Что нам показалось интересным, так это то, что зависимость Z для малых значений X заключается в том, что Z уменьшается с увеличением Y. Но по мере того, как мы переходим к большим значениям X, оно теперь увеличивается с Y и за пределами определенных значений X на него почти не влияют X или Y.
Я хотел визуализировать все эти эффекты на одном графике; а не просто описывать различные регионы словами.
Я понимаю комментарий о том, что существует бесконечно много кривых, которые могут удовлетворять этим ограничениям. Поскольку я не использую это для реального предсказания чего-либо, я рад визуализировать простейшую кривую, которая могла бы удовлетворить всем имеющимся у меня ограничениям (самая простая с точки зрения наименьшего количества волнистости, если это имеет смысл...).

Подробнее здесь: https://stackoverflow.com/questions/793 ... tion-in-3d
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»