C-Programm: NST bestimmen!

snuffnick

Cadet 2nd Year
Registriert
Juli 2005
Beiträge
22
Hallo!

Ich habe folgendes Problem.
Ich möchte von der Funktion

Code:
 f(x)=20*x^3-10*x

die Nullstellen bestimmen mit hilfe eines C-Programms.
Ich weiß wo diese NST sind, aber habe keine Idee wie ich das programmieren kann...

Code:
x_1=0
x_2=0.5625
x_3=-0.5625

Vielleicht kann mir da jemand sagen wie ich das machen kann.

Dank im voraus
SnuffNick
 
am einfachsten implementierst du den newton'schen näherungsalgo. und läßt den im abstand 0.1 durchlaufen. die analytische lösung von gleichung ist ein bisschen blöd, wenn du nicht gerade eine einschränkung auf ganz wenige klassen bekommen hast.
falls du gerade nicht weißt wie der geht:
x_{i+1}=x_i-f'(x_i)/f(x_i)
wenn der gegen einen wert konvergiert, ist das eine nullstelle.
in deinem fall müsste die implementierung etwa so aussehen:
float newton(float startwert)
{
flaot x_0=startwert;
float x_1=0;
x_1=x_0 - (60*(x_0*x_0)-10)/( 20*x_0*x_0*x_0-10*x_0);
while(abs(x_1-x_0)>0.01)
{
x_0=x_1;
x_1=x_0 - (60*(x_0*x_0)-10)/( 20*x_0*x_0*x_0-10*x_0);
}
return x_1;
}
damit erhältst du eine näherung für eine nullstelle. oder kurz der rückgabewert +-0.01 ist eine nullstelle.
 
is mir jetzt ein bisschen peinlich. natürlich ist newton falschherum angegeben, es müsste heißen:
x_{i+1}=x_i-f(x_i)/f'(x_i)
und der code muss natürlich:
float newton(float startwert)
{
flaot x_0=startwert;
float x_1=0;
x_1=x_0 - ( 20*x_0*x_0*x_0-10*x_0) /(60*(x_0*x_0)-10);
while(abs(x_1-x_0)>0.01)
{
x_0=x_1;
x_1=x_0 - ( 20*x_0*x_0*x_0-10*x_0 )/(60*(x_0*x_0)-10);
}
return x_1;
}

btw. ich weiß, dass es einen edit-button gibt, nur ich hasse ihn.

wenn dir das verfahren nicht gefällt kannst du auch intervallhalbierung nehmen, ist aber wesentlich schlechter.
 
Danke für deine Hilfe...

Läuft super....


Gruß
SnuffNick

Achso, die x-werte die ich angegeben habe sind bis auch x=0 falsch... Habe die falschen abgeschrieben...
 
Zurück
Oben