Henrik
Henrik

Reputation: 3

Fitting of a 3d polynominal / volume in python

I'd like to find the best fit (least-squares solution) for the a coefficients in an equation similar to this one:

b = f(x,y,z) = (a0 + a1*x + a2*y + a3*z + a4*x*y + a5*x*z + a6*y*z + a7*x*y*z)

x, y, and z are small arrays with a length of about 20. The shown example is for x**k with k=1. I'm looking for a solution up k=3.

I have found this solution for a 2d fit Equivalent of `polyfit` for a 2D polynomial in Python

Now I'm looking for a similar solution but in 3d.

Upvotes: 0

Views: 231

Answers (1)

Grigory Feldman
Grigory Feldman

Reputation: 413

You right, similar technic works:

import numpy as np

x, y, z = np.random.randn(3, 20)
grid = np.meshgrid(x, y, z, indexing='ij')
x, y, z = np.stack(grid).reshape(3, -1)

b = np.random.randn(*x.shape).reshape(-1)

A = np.stack([np.ones_like(x, dtype=x.dtype), x, y, z, x * y, x * z, y * z, x * y * z], axis=1)

coeff, r, rank, s = np.linalg.lstsq(A, b, rcond=None)

Upvotes: 1

Related Questions