Witam i zgłaszam się do was jak co weekend z kolejnym działaniem. Tym razem na warsztat dostałem wzór Stirlinga. Dokładni opis mozna znaleźć tutaj: http://www.eti.pg.gda.pl/katedry/ksa/dydaktyka/Algorytmy_obliczeniowe//Wykl_AlgorOblicz_8.pdf
Więc mam programik, który wymyśliłem w C kiedyś i wygląda on tak:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int i, j;
double avg[8], di[8][8], h, s;
double xi[8] = { 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4 }; // wspolczynniki x
double yi[8] = { 5.000000, 2.500000, 1.666667, 1.250000, 1.000000, 0.833333, 0.714286 }; // wspolczynniki y
int wyznacz_avg() {
j = 0;
for( i=0; i<sizeof( yi )/sizeof( yi[0] ); i++ ) {
if( i % 2 != 0 ) {
avg[j] = ( di[i][sizeof( yi )/sizeof( yi[0] )/2-i/2-1]+di[i][sizeof( yi )/sizeof( yi[0] )/2-i/2] )/2;
j += 1;
}
}
return( 1 );
}
int wyznacz_d() {
for( i=0; i<sizeof( yi )/sizeof( yi[0] ); i++ ) {
di[0][i] = yi[i];
}
for( j=0; j<sizeof( yi )/sizeof( yi[0] )-1; j++ ) {
for( i=0; i<sizeof( yi )/sizeof( yi[0] )-j-1; i++ ) {
di[j+1][i] = di[j][i+1] - di[j][i];
}
}
return( 1 );
}
int wyznacz_h() {
h = xi[1] - xi[0];
return( 1 );
}
int stirling() {
s = ( 1/h ) * ( avg[0] - avg[1]/6 + avg[2]/30 );
return( 1 );
}
int main() {
if( wyznacz_h() && wyznacz_d() ) {
if( wyznacz_avg() ) {
if( stirling() ) {
printf( "wynik rownania: %f\n", s );
}
else {
printf( "blad w trakcie obliczania rownania\n" );
}
}
else {
printf( "blad w trakcie srednich\n" );
}
}
else {
printf( "blad w trakcie obliczania wartosci kroku oraz delty\n" );
}
return( 0 );
}
Teraz mam to napisac w pythonie, wiec nie wiem czy dobrze zrobiłem ale zacząłem to jakoś przerabiać. na razie jestem tutaj:
'''
Created on 16-11-2013
@author: Konrad
'''
#!/usr/bin/python
xi = [ 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4 ];
yi = [ 5.000000, 2.500000, 1.666667, 1.250000, 1.000000, 0.833333, 0.714286 ];
avg = [];
h = 0.0;
def wyznacz_sred():
for xi,yi in zip(xi,yi):
i kompletnie nie wiem jak sobie poradzic z tymi tablicami dwuwymiarowymi. Ogólnie liczenie h można sobie podarować i traktować to jako stałą, muszę mieć średnią, d no i potem można podstawiać do wzoru tak jak tutaj w funkcji stirling. Proszę o pomoc.