Python Fit многочлен для трехмерных данных - PullRequest
1 голос
/ 24 сентября 2019

Иметь набор точек данных (x, y, z) и пытаться подогнать к ним общую квадратику с помощью scipy optimize.curve_fit.

Я пробовал пару разных методов, но не могу заставить его работать.Любое руководство о том, почему я получаю эту ошибку, или рекомендуемый другой метод?

Ошибка «ValueError: не удалось передать операнды вместе с фигурами (2,) (12,)»


import scipy.optimize as optimize

XY = [(11, 70), (11, 75), (11, 80), (11, 85), (12, 70), (12, 75), (12, 80), (12, 85), (13, 70), (13, 75), (13, 80), (13, 85)]

Z = [203.84, 208, 218.4, 235.872, 228.30080000000004, 232.96000000000004, 244.60800000000006, 264.1766400000001, 254.8, 260, 273, 294.84000000000003]

guess = (1,1,1,1,1,1)

def fit(X, a, b, c, d, f, g):
    return a + (b*X[0])+(c*X[1])+(d*X[0]**2)+(f*X[1]**2)+(g*X[0]*X[1])

params, cov = optimize.curve_fit(fit, XY, Z, guess)

1 Ответ

1 голос
/ 24 сентября 2019

Согласно документам необходимо, чтобы XY был размером (k,M), где k - это размер, а M - это количество образцов.В вашем случае вы определили XY как размер (M,k).

Попробуйте следующее

import numpy as np

...

params, cov = optimize.curve_fit(fit, np.transpose(XY), Z, guess)
...