Подгонка трехмерной поверхности к разбросанным данным с использованием python - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь разместить гладкую поверхность в своих данных, но я не уверен, как именно это сделать. Я думал, что мог бы использовать для этого интерполяцию scipy RBF, но я почти уверен, что мой метод ошибочен. В любом случае, мои разбросанные данные выглядят примерно так . Я довольно новичок в python, поэтому этот код может выглядеть совершенно глупо, но я попытался использовать scipy.interpolate.Rbf так:

import pandas as pd
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

data = pd.read_csv('TTC.csv')

data['FZ'] = abs(data['FZ'])
data['P'] = round(data['P'] * 0.145037737730217);  # kPa to Psi
data['V'] = round(data['V'])
data['IA'] = round(data['IA'])

data_sample = data[::100] #every 100th row of data

# Data for scattered points
z = data_sample['MX']
x = data_sample['FZ']
y = data_sample['SA']

data = np.c_[x, y, z]

x_grid = np.linspace(200, 1200, num=100)
y_grid = np.linspace(-10, 10, num=10)
X, Y = np.meshgrid(x_grid, y_grid, indexing='xy')


import scipy as sp
import scipy.interpolate

spline = sp.interpolate.Rbf(x, y, z, function='linear', smooth=5, episilon=5)
Z = spline(X, Y)

# plot points and fitted surface
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis_r')
ax.scatter(data[:, 0], data[:, 1], data[:, 2], c='r', s=5)
plt.xlabel('Force FZ')
plt.ylabel('Slip angle')
ax.set_zlabel('Moment MX')
ax.axis('tight')
plt.show()

Конечный результат был таким. Мне кажется, я понимаю, почему это происходит (главная проблема - все это пространство между каждой силой), но я ' Я не уверен, какой другой метод использовать. Должен ли я попытаться интерполировать кривую для каждой силы FZ, а затем подогнать поверхность к этим кривым? Или я мог бы предсказать новые точки между каждой силой, которые сгладят поверхность? Извините за отсутствие знаний в области программирования и интерполяции, я активно пытаюсь улучшить их.

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