• 04.07.2025, 12:47
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Oetsch

God

Hilfe! Newton Verfahren mit Horner in C

Montag, 23. Juni 2003, 01:22

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

Montag, 23. Juni 2003, 01:33

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

Montag, 23. Juni 2003, 01:36

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

Montag, 23. Juni 2003, 01:37

ö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

Montag, 23. Juni 2003, 01:43

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

Montag, 23. Juni 2003, 02:05

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

Montag, 23. Juni 2003, 02:09

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

unregistriert

Re: Hilfe! Newton Verfahren mit Horner in C

Montag, 23. Juni 2003, 02:14

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

Montag, 23. Juni 2003, 02:30

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

unregistriert

Re: Hilfe! Newton Verfahren mit Horner in C

Montag, 23. Juni 2003, 02:39

[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

Montag, 23. Juni 2003, 02:49

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

Montag, 23. Juni 2003, 03:09

Zitat von »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

Montag, 23. Juni 2003, 03:46

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

Montag, 23. Juni 2003, 14:33

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

noid

unregistriert

Re: Hilfe! Newton Verfahren mit Horner in C

Montag, 23. Juni 2003, 18:47

? hilfe ? ;)

Oetsch

God

Re: Hilfe! Newton Verfahren mit Horner in C

Montag, 23. Juni 2003, 20:42

bemühungen ;)