• 06.07.2025, 04:06
  • Register
  • Login
  • You are not logged in.

 

Oetsch

God

Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 1:22am

Hallo ich brüte schon den ganzen Sonntag über dieser Aufgabe. Vielleicht kann mir da jemand helfen der sowas kennt. Geht um Nullstellen auswertung eines Polynoms 7 ten Grades mitm Newton Verfahren. Wäre echt super dankbar. Muß den Kram morgen abgeben aber irgendwie funtzt es nicht. Die Nullstellen stimmen nicht.
Tausend Dank
Ö
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double pn[1],pn_strich[1];
double *c,*d;




void Horner_W2(double *c,double *pn,double *pn_strich,double *x,int n); //Aufgabenteil b)
void Horner_Abdiv(double *c,double *d,double xnst,int n); //Aufgabenteil c)
int Newton_Poly_Nst(double *c,int n,double *x,double eps_x,double eps_f,int ITMAX); //Aufgabenteil d)

int main (void) {
int n,i,j,N,rueck,ITMAX;
double eps_x,eps_f;
double xnst = 0;

n = 8;

c = (double*) malloc (n*sizeof(double));
d = (double*) malloc ((n-1)*sizeof(double));

c[0]=1.;
c[1]=-28.;
c[2]=322.;
c[3]=-1960.;
c[4]=6769.;
c[5]=-13133.;
c[6]=13068.;
c[7]=-5040.;
eps_x=10E-14;
eps_f=10E-14;
ITMAX=50;



N = 8;
for(j=1;j<N;j++){
rueck = Newton_Poly_Nst(c,n,&xnst,eps_x,eps_f,ITMAX);
if(rueck==1) {
printf("\n Nullstelle konnte mit %d Iterationen nicht berechnet werden",ITMAX);
getchar ();
return 0;
}
printf ("\n test");
Horner_Abdiv(c,d,xnst,n);
n--;
printf("\n Nullstelle: %f\n\n",xnst);
printf("Weiter mit Return\n\n");
rewind(stdin);
getchar();
for (i=0;i<n;i++) {
c =d[i];
}


}
return 0;
}

void Horner_W2(double *c,double *pn,double *pn_strich,double *x,int n) {
int i;

*pn = c[0];
*pn_strich = *pn;
for (i=1;i<(n-1);i++) {
*pn =*pn*(*x)+c[i];
*pn_strich = *pn_strich*(*x)+*pn;

}
*pn = *pn*(*x)+c[n-1];
}

void Horner_Abdiv(double *c,double *d,double xnst,int n){
int i;
*d= c[0];
for (i=1;i<(n-1);i++) {
d[i] = c[i-1]*xnst+c[i];
}
return;
}

int Newton_Poly_Nst(double *c,int n,double *x,double eps_x,double eps_f,int ITMAX) {
int i=0;
double x_neu;
for (;;) {
Horner_W2(c,pn,pn_strich,x,n);
if ((fabs(*pn))<=eps_f) break;
x_neu = *x-((*pn)/(*pn_strich));
if ((fabs(x_neu-(*x)))<=(eps_x*fabs(x_neu))) break;
if (i>ITMAX) return 1;
i = i+1;
*x = x_neu;
}
*x = x_neu;
return 0;
}

Joker

Senior Member

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 1:33am

hab´erst ca 20 sec. drauf geguckt .. also noch nicht richtig viel erkannt, aber für doublewerte, sollte man schon fabsl nehmen, vor allem wenns wie hier um die Kommastellen bzw. Differenz geht. (war doch so oder ...  :-/)


[EDIT:] eine kommentierter quelltext wäre für uns im übrigen auch netter .. so muss man immer selber rausfinden, welche variable, für was gedacht ist, und was welche zeile machen soll .... um die zeit ganz schön anstrengend ... ;)
wenn die geistige Sonne tief steht, werfen selbst Zwerge riesen Schatten .. 8)

Oetsch

God

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 1:36am

kann schon hinkommen, aber deswegen können doch die nullstellen nicht alle falsch sein höchstens was ungenau, oder?

Ö

klar kommentare sind nett aber wie schon gesagt bin im stress...schreib was du wissen willst ich tippe sofort los

also ich kommentiere etwas und poste sofort neu..ok?

Joker

Senior Member

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 1:37am

öhm ..

also da kann schon ordentlicher mist raus kommen (fehlerfortpflanzung) .. aber hast sicher recht, dass das nicht das einzige ist .. mal schaun`...
wenn die geistige Sonne tief steht, werfen selbst Zwerge riesen Schatten .. 8)

Oetsch

God

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 1:43am

Hier ein paar Kommentare:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double pn[1],pn_strich[1];
double *c,*d;// c Dynamische Speicherplatz für den ersten durchlauf des Hornerschemas usw
// d Dyn. Speicherplatz für die Ableitung und Abdivision des Ploynoms




void Horner_W2(double *c,double *pn,double *pn_strich,double *x,int n); //Aufgabenteil b)
void Horner_Abdiv(double *c,double *d,double xnst,int n); //Aufgabenteil c)
int Newton_Poly_Nst(double *c,int n,double *x,double eps_x,double eps_f,int ITMAX); //Aufgabenteil d)

int main (void) {
int n,i,j,N,rueck,ITMAX;
double eps_x,eps_f;
double xnst = 0;//Angenomme Nullstelle ...Startwert

n = 8;// Variable für den Grad des Polynoms nimmt pro Schleifendurchlauf ab

c = (double*) malloc (n*sizeof(double));
d = (double*) malloc ((n-1)*sizeof(double));

c[0]=1.;
c[1]=-28.;
c[2]=322.;
c[3]=-1960.;
c[4]=6769.;
c[5]=-13133.;
c[6]=13068.;
c[7]=-5040.;
eps_x=10E-14;//Genauigkeit der Nullstelle
eps_f=10E-14;//Genauigkeit der Funktion
ITMAX=50;// Maximale Iterationsschritte



N = 8;
for(j=1;j<N;j++){
rueck = Newton_Poly_Nst(c,n,&xnst,eps_x,eps_f,ITMAX);//Rückgabewert des Newtonsverfahrens
if(rueck==1) {
printf("\n Nullstelle konnte mit %d Iterationen nicht berechnet werden",ITMAX);
getchar ();
return 0;
}
printf ("\n test");
Horner_Abdiv(c,d,xnst,n);
n--;
printf("\n Nullstelle: %f\n\n",xnst);
printf("Weiter mit Return\n\n");
rewind(stdin);
getchar();
for (i=0;i<n;i++) {
c =d[i];
}


}
return 0;
}

void Horner_W2(double *c,double *pn,double *pn_strich,double *x,int n) {
int i;

*pn = c[0];
*pn_strich = *pn;
for (i=1;i<(n-1);i++) {
*pn =*pn*(*x)+c[i];
*pn_strich = *pn_strich*(*x)+*pn;

}
*pn = *pn*(*x)+c[n-1];
}

void Horner_Abdiv(double *c,double *d,double xnst,int n){
int i;
*d= c[0];
for (i=1;i<(n-1);i++) {
d[i] = c[i-1]*xnst+c[i];
}
return;
}

int Newton_Poly_Nst(double *c,int n,double *x,double eps_x,double eps_f,int ITMAX) {
int i=0;
double x_neu;
for (;;) {
Horner_W2(c,pn,pn_strich,x,n);
if ((fabs(*pn))<=eps_f) break;
x_neu = *x-((*pn)/(*pn_strich));
if ((fabs(x_neu-(*x)))<=(eps_x*fabs(x_neu))) break;
if (i>ITMAX) return 1;
i = i+1;
*x = x_neu;
}
*x = x_neu;
return 0;
}

Joker

Senior Member

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 2:05am

hm .... *puh* ...also ich glaub´bei diesem problem bin ich dir keine große Hilfe. Wenn bei dem Mathe-krams irgendwas im detail nicht stimmt, kann ich es jedenfalls nicht erkennen. Sieht im groben so vom ablauf richtig aus .. aber wenn du da schon den ganzen Sonntag drüber brütest, werd´jedenfalls ich es jetzt auch nicht hinkriegen..

ganz laut nach LiquidAcid ruf ... *ruuuuuuuuuf*


hab´mein abi mit son´em kram vor ein paar wochen zwar mit 13p gemacht, aber solche sachen haben mich auch immer unendlich viel zeit gekostet...

Trotzdem: Viel Glück für morgen ! :)
wenn die geistige Sonne tief steht, werfen selbst Zwerge riesen Schatten .. 8)

Oetsch

God

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 2:09am

Vielen Dank für deine Hilfe trotzdem!!!!
Muß ich wohl morgen um 6 zur FH fahren und hoffen dass mir das noch einer flott erklärt.
Wenn nicht bitte weiter posten. Sitze dann vorm Compi und brüte

Danke
Ö

noid

Unregistered

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 2:14am

was macht die globale variable double pn[1] ?
und wieso taucht pn wieder als double* auf ?

kannst du auch mal für die faulen leute ein beispiel mir richtiger lösung posten ? dann fällt das debuggen deutlich einfacher aus... ;)

Oetsch

God

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 2:30am

also die variable pn spiegelt den Wert der funktion Pn(x)
wieder. Ist nur so als Vektorfeld mit einem zeichen definiert.
und springt in den unterprogrammen als ergebnis variable des Horner Schemas immer weiter. Am Schluß des Horner Schemas spiegelt diese Halt den Funktionswert wieder.
Analog dazu pn-strich die Ableitung der funktion.

oder halt so ähnlich sorry kann glaube ich keinen klaren Gedanken mehr fassen. Fang gleich wieder an Ostern neu zu erfinden ;D

Hoffe du verstehst was ich meine
Danke
Ö

ach ja und *pn taucht auf um als zeiger den wert zu übergeben

noid

Unregistered

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 2:39am

[wasn schotter]

edit: wo bleiben die richtigen werte ?

ok, habs eben gesehen, das ist doch ok mit pn, aber sinnlos, da pn ja eh schon global ist ;)

Oetsch

God

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 2:49am

sorry aber versteh gerade bahnhof was soll ich raus nehmen?
nur die übergabe von pn oder wie?
sorry aber fühl mich gerade als hätte ich nen kasten longdrinks drin ;)......

so ich glaub ich geh jetzt besser pennen und les mir das morgen früh nochmal durch...
tausend dank auf jedenfall für eure mühe

gruß
Ö

tschneider

Full Member

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 3:09am

Quoted from "Joker"

... ganz laut nach LiquidAcid ruf ... *ruuuuuuuuuf*

... das kannste wohl vergessen ... liquid hat die Segel hier im Forum gestrichen :( ... hab neulich im "Off-Topic" gelesen, dass es ihm stinkt wie die Dinge hier im Forum in letzter Zeit laufen und er sich deshalb ausklingt ... :( :'(
ASUS A7N8X-E | AMD Athlon XP 3200+ | 1 GB RAM CL2 Corsair | 2 x 160 GB Hitachi 7.2k S-ATA HDD RAID0 | 120 GB WD 7.2k E-IDE HDD | Gainward FX 5900 Ultra ViVo 256 MB | Chieftec Bigtower (CS901) | Cuplex | Twinplex NB | Twinplex Graka | 3 x Heat Trap HDD-WaKü | 2 x Airplex Evo 120 + HTCS-Radiator

Joker

Senior Member

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 3:46am

naja man kann ja nicht alles mitkriegen ...

hm .. schade .. :(:'(

wenn die geistige Sonne tief steht, werfen selbst Zwerge riesen Schatten .. 8)

Oetsch

God

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 2:33pm

Hy
danke für Eure Hilfe es läuft!!!!!!!
Gruß
Ö

noid

Unregistered

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 6:47pm

? hilfe ? ;)

Oetsch

God

Re: Hilfe! Newton Verfahren mit Horner in C

Monday, June 23rd 2003, 8:42pm

bemühungen ;)