Aproksymacja w Pythonie

0

Witam. Dostałem kolejne zadanko, tym razem prostsze i sobie poradziłem. Chciałbym tylko żeby mi ktoś to sprawdził i ewentualnie wytknął co zrobiłem źle. Licze tu w szczególności na mojego tutora @msm


#!/usr/bin/python

x=[5.84  , 3.82 ,  6.19  , 9.22  , -7.87  , 6.29 ,  4.43  , 8.91];
y=[79.31 ,  57.43 ,  60.66 ,  92.55  , 90.12  , 71.30  , 70.50 ,  91.25];

S0 = 0; S1=0; S2=0; T0=0; T1=0; TMPT0=0; TMPT= 0;

for i in range (8):
    S0+=1;
    S1+=x[i];
    S2+=x[i]*x[i];
    T0+=y[i];
    T1+=y[i]*x[i];
    
TMPT=T1*-1
TMPT0=T0*-1
M=S1*S1-S2*S0
A0=(S2*TMPT0-TMPT*S1)/M;
A1=(TMPT*S0-S1*TMPT0)/M;

print "Wpolczynnik a0 wynosi:", +A0;
print "Wpolczynnik a1 wynosi:", +A1;

Przy okazji. Próboje zrobić wykres w pythonie do tej aproksymacji. Tylko nie wiem jak połączyć wykres funkcji w moim przypadku linii z tymi kropkami. Robie wedlug tutoriala znalezionego tutaj: http://matplotlib.org/users/pyplot_tutorial.html Chodzi mi o to że chće dostać cośtakiego jak obrazek 1 + obrazek 2

1
plt.plot(range(20))
x = range(10)
y = [l**2 for l in x]
plt.plot(x,y,"ro")
plt.show()
1
balu napisał(a):

Chciałbym tylko żeby mi ktoś to sprawdził i ewentualnie wytknął co zrobiłem źle. Licze tu w szczególności na mojego tutora @msm

Nie znam treści zadania, ale:

  • ja bym tego fora bardziej zpythonizował;
  • pousuwał średniki, są całkowicie zbędne poza jedną linijką;
  • I po co te plusy przy wypisywaniu wyników?
  • x*x można zapistać jako x do potęgi drugiej (x**2.0).
#!/usr/bin/python
 
x=[5.84  , 3.82 ,  6.19  , 9.22  , -7.87  , 6.29 ,  4.43  , 8.91]
y=[79.31 ,  57.43 ,  60.66 ,  92.55  , 90.12  , 71.30  , 70.50 ,  91.25]
 
S0 = 0.0; S1=0.0; S2=0.0; T0=0.0; T1=0.0; TMPT0=0.0; TMPT= 0.0
 
for x,y in zip(x,y):
    S0+=1.0
    S1+=x
    S2+=x**2.0
    T0+=y
    T1+=y*x
 
TMPT=T1 * -1.0
TMPT0=T0 * -1.0
M=S1*S1-S2*S0
A0=(S2*TMPT0-TMPT*S1)/M
A1=(TMPT*S0-S1*TMPT0)/M
 
print "Wpolczynnik a0 wynosi:", A0
print "Wpolczynnik a1 wynosi:", A1
1

Nie rozumiem Twojego komentarza. Jaka macierz x i jakie 'z'? O ile dobrze zgaduję, to rysowanie powinno wyglądać tak:

plt.plot(x,y)
x1 = range(2)
y1 = [A0*e+A1 for e in x1]
plt.plot(x1,y1,"ro")
plt.show()

Na Twoich danych wychodzi raczej głupio.

0

Po doklejeniu do kodu otrzymuje taki wykres:

http://screenshooter.net/0238638/ratcbhx

1 użytkowników online, w tym zalogowanych: 0, gości: 1