[Python] aproksymacja metodą najmniejszych kwadratów


(Sheaker) #1

Witam serdecznie. Chciałbym wykorzystać Pythona do zapisania wyników z programu Cantera w formacie NASA Thermodynamics DATA:
https://www.grc.nasa.gov/www/CEAWeb/def_formats.htm (wzór 1).
W tym celu napisałem program wzorując się na następującym:
http://www.staff.amu.edu.pl/~zcht/pliki/Aproksymacja.pdf
Program działa dla małych liczb, lecz dla dużych liczb wyświetla błąd:

C:\>python nasa2.py
Traceback (most recent call last):
  File "nasa2.py", line 45, in <module>
    inverse = inv(tab)
  File "C:\Python27\lib\site-packages\numpy\linalg\linalg.py", line 526, in inv
    ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)
TypeError: No loop matching the specified signature and casting
was found for ufunc inv

Uproszczony kod programu:

import sys
import numpy as np
import math
from numpy.linalg import inv
Tlow = 30
Tcommon = 100
Thigh = 500
step = 10

gas = [0 for x in range(step+1)]

for i in range(step+1):
	gas[i] = 1000.0*math.sin(i)



# tabela na liste temperatur
templist = [0 for x in range(step+1)]

#wypelnienie tabeli temperaturami
for i in range (step+1):
	templist[i] = Tlow+i*((Tcommon-Tlow)/step)

# macierz X wypelniona wartosciami
tab = [[0 for x in range(7)] for y in range(7)]
for a in range(7):
	for b in range(7):
		for i in range (step+1):
			tab[a][b] += templist[i]**(-4+b+a)

# macierz Y
tab2 = [0 for x in range(7)]

# wypelnienie macierzy Y wartosciami
for a in range(7):
	for i in range(step+1):
		tab2[a] += gas[i]*templist[i]**(-2+a)
# odwrocenie macierzy X
inverse = inv(tab)
# mnozenie X^-1*Y
suma = np.matmul(inverse,tab2)
print suma

Ja potrzebuję dodać po jednym zerze do każdego z parametrów:

Tlow = 30
Tcommon = 100
Thigh = 500
step = 10

Zastanawiam się czy ktoś z was będzie potrafił mi pomóc.


(Sheaker) #2

Chyba poradziłem sobie zmieniając parę wartości na float64. Między innymi:
np.float64(tab)
np.float64(tab2)