Witam, potrzebuję napisać kod który dopasuje funkcje do punktów pomiarowych x=[1, 2, 3], y=[1, 3, 8]. Funkcja ta ma być wielomianem potęgowym tj. y=a0+a1*x++a2*x^2+... Potrzebuję wiec wyznaczyć wartości współczynników a. Napisałem poniższy kod:
import numpy as np
import sympy as sp
from scipy import linalg
import matplotlib.pylab as plt
def f(x,a):
return a[0]+x*a[1]+(a[2])*x**2
x=sp.Symbol('x')
a=sp.Symbol('a')
x=np.array([1, 2, 3])
y=np.array([1, 3, 8])
a=[]
a=linalg.solve(x,y)
print(a)
z=y+0
for i in range(0,2):
z[i]=f(x[i],a)
plt.plot(x,y,"ro",ms=10)
plt.plot(x,z,lw=2)
plt.xlim(0,4)
plt.show()
Problem polega na tym że, linalg.solve wyznacza te współczynniki tylko dla macierzy kwadratowej. Zrobienie z x macierzy kwadratowej 3x3 i tak aby do każdego z równań były wpisywane kolejno wartości 1,2,3 też nie pomaga, wciąż wyrzuca mi błąd że to musi być macierz kwadratowa. Robienie z x macierzy 3x3 jest takim trochę rozwiązaniem łopatologicznym, ale nie mam innego pomysłu. Czy ktoś ma może pomysł jak zmodyfikować ten kod, albo jak inaczej to można zrobić?