Angewandte Mathematik
Newton-Horner Algorithmus
| ein kleines Programm zur Simulation. |
| #include <stdio.h> #include <math.h> typedef double feld[11]; typedef double feldfeld[11][11]; void daten(void); void divdif(void); double newhor(double); feld x,y; feldfeld dd; int n; void daten(void) { /* Verzicht auf Einleseroutine und direkter Zugriff auf Aufgabendaten des Skripts */ n=2; x[0]=-1.0; x[1]=0.0; x[2]=2.0; y[0]=0.0; y[1]=-1.0; y[2]=3.0; } void divdif(void) { int k,l; /* Initialisierung */ for(k=0;k<=n;k++) dd[0][k]=y[k]; /* Eigentliche Rechnung */ for(l=1;l<=n;l++) { for(k=0;k<=n-l;k++) dd[l][k]=(dd[l-1][k+1]-dd[l-1][k])/(x[k+l]-x[k]); } /* Ausgabe */ printf("Das Dividierte-Differenzen-Schema lautet:\n"); printf("\n"); for(k=0;k<=n;k++) { for(l=0;l<=n-k;l++) printf("% .12E",dd[l][k]); printf("\n"); } } double newhor(double x0) { int k; feld b; b[n]=dd[n][0]; for(k=1;k<=n;k++) b[n-k]=b[n-k+1]*(x0-x[n-k])+dd[n-k][0]; return(b[0]); } /* Hauptprogramm */ int main(void) { int k; double x0=-2.0,px0; daten(); divdif(); px0=newhor(x0); printf("\n"); printf("Auszuwerten ist ein Polynom p in Newton-Form vom Grad %i.\n",n); printf("\n"); for(k=0;k<=n;k++) printf("Der %i-te Newton-Koeffizient des Polynoms p lautet % .12E.\n",k,dd[k][0]); printf("\n"); printf("Der Auswertungspunkt ist gegeben aus x0 = % .12E.\n",x0); printf("\n"); printf("Der Newton-Horner-Algorithmus liefert p(x0) = % .12E.\n",px0); return(0); } |