Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Nullstellen berechnen mit welchem Verfahren

Nullstellen berechnen mit welchem Verfahren

Universität / Fachhochschule

Funktionen

Tags: Funktion

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
NinaNormal

NinaNormal aktiv_icon

22:29 Uhr, 01.12.2021

Antworten
Hallo liebes Forum!

Ich habe eine kurze und schnelle Frage:

Mit welchem Verfahren lassen sich die Nullstellen für folgende Funktion ausrechnen:

h(x)=-x2-x0,5+1=0

Danke im voraus für die Antworten.

LG

Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert):
"Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen."
Hierzu passend bei OnlineMathe:
Funktion (Mathematischer Grundbegriff)
Nullstellen (Mathematischer Grundbegriff)
Vielfachheit einer Nullstelle (Mathematischer Grundbegriff)

Online-Übungen (Übungsaufgaben) bei unterricht.de:
 
Online-Nachhilfe in Mathematik
Antwort
rundblick

rundblick aktiv_icon

22:46 Uhr, 01.12.2021

Antworten
.
Im Voraus zwei schnelle Fragen:

1.) in welchem Intervall wirst du suchen ?
2.) hast du schon selbst herausgefunden, warum es nur eine Lösung geben wird?

Danke für kurze Antworten; dann geht es hier zügig weiter ..
.
Antwort
Roman-22

Roman-22

23:35 Uhr, 01.12.2021

Antworten
> Mit welchem Verfahren lassen sich die Nullstellen für folgende Funktion ausrechnen:
Empfehlen würde ich ein Näherungsverfahren, zB Bisektion. regula falsi, Newton, konjugierte Gradienten, Levenberg-Marquardt, ...
Wähle deine Waffe nach eigenem Gutdünken!
Aber bei genug Masochismus kannst du die Gleichung auch auf eine Gleichung dritten Grades zurückführen und exakt lösen. Falls dich nur die reelle Lösung interessiert, bekommst du dann den übersichtlichen Ausdruck
B
den du aber noch etwas vereinfachen kannst ;-)

Wenn du aber auf "kurz und schnell" Wert legst, kannst du die Angabe auch bei Wolfram Alpha eintippen und dir dort das exakte Ergebnis anzeigen lassen - sieht dann so aus
B2

Antwort
rundblick

rundblick aktiv_icon

00:14 Uhr, 02.12.2021

Antworten
.
Einfach super, Roman-22, welche Perlen du dieser NinaNormal hinwirfst.
Da sie mit der Beantwortung meiner zu einfachen Fragen unterfordert war,
wird sie nun fraglos .. :-) die gehaltvollen Körner verständisvoll und
überschwenglich danked "kurz und schnell" aufpicken.
.

Antwort
mquasten

mquasten aktiv_icon

18:46 Uhr, 02.12.2021

Antworten
Ich gehe mal davon aus, das die Funktion auf R definiert ist, d.h. nur reele NS von Interesse sind. Mir fallen 2 Verfahren ein die sich vergleichsweise einfach selbst progrmmieren lassen:
1. Bisektion
2. Newtonverfahren
oder aber irgendetwas fertiges. Aber es schadet nichts, wenn man grob weiß, wie die Verfahren funktionieren. Man benötigt Startwerte. Im Beispiel für x<0 ist die Funktion nicht definiert (negative Werte unter der Wurzel -(x2+x)+1=0: Das x2 wird für große x schneller wachsen als x. Die NS liegt irgendwo zwischen 0 und 1. Weiterhin kennt man die 1. Ableitung: -2x-12x und die ist für alle x>0 negativ, d.h. die Funktion ist monton fallend. Weitere Nullstellen als die eine gibt es nicht. Graph zeichnen hilft auch um die Startwerte für die Suche zu finden (Das ist das "angedeutete").
Nachfolgend mein octave matlab code (nicht unbedingt schön, funktioniert aber)

function x= bisection(f ,a,b, tol)
# Bisektionsverfahren für reele Nullstellen
# f: funktion, deren Nullstelle gesucht wird
# a,b: Intervall in dem die Nullstelle liegt.
# tol: Fehlertoleranz fuer die Approximation der Nullstelle

# f muss stetig sein und es muss gelten f(a)f(b)<0,
# d.h es muss ein Vorzeichenwechsel zwischen a und b liegen.

if (ab)
error('Startpoint should be less than endpoint.');
end;

if( f(a)f(b)>0)
error('Function has same sign at both endpoints.');
end

nmax=10e3;

x=a;
k=1;
while abs(b-a) > tol
x=a+b2;
if(abs(f(x)) < tol)
break
elseif f(a)f(x)<0
b=x;
else
a=x;
end;
k=k+1;
if( k> nmax)
error('Max number of iteration exeeded: %d',k);
end;
end

Aufruf:
# eps ist eine variable für die rechengenauigkeit bei octave
bisection(@(x) -x.2-x+1, 0,1,eps)
ans =0.52489

Wenn Du schnell willst, dann nimm etwas fertiges. In der Matlabwelt z.B. fzero (genau das war der Grund, warum ich mir mal bisection geschrieben habe, weil ich fzero scheisse fand)
Aufruf:
fzero(@(x) -x.2-x+1,0)
ans =0.52489
bisection ist sehr einfach und man kann es sicher auch leicht in jede andere Programmiersprache übertragen. Newton verwendet die Ableitung, da gibt es auch sicherlich genug Literatur und auch Programmbeispiele dazu. Für gewöhnliche Polynome hat die Matlabwelt roots (das kann auch komplexe NS):

x3+x2+x+1
roots([1,1,1,1])
ans =

-1.00000+0.00000i
-0.00000+1.00000i
-0.00000-1.00000i

Kommt tatsächlich aber auf den persönlichen Geschmack und die Anwendung an, was man braucht. Ein oder 2 Verfahren mal selbst zu programmieren schadet nicht. Ist aber nicht schnell ...



Antwort
supporter

supporter aktiv_icon

08:07 Uhr, 03.12.2021

Antworten
Man könnte substituieren: x=z

-z4-z+1=0

de.wikipedia.org/wiki/Polynom_vierten_Grades

Macht die Sache aber nicht angenehmer, eher das Gegenteil.


Antwort
mquasten

mquasten aktiv_icon

20:30 Uhr, 04.12.2021

Antworten
Ich habs auch mal mit dem Tangentenverfahren von Newton probiert. Kann man so herunterschreiben, wie es da im Anhang steht. Die Ableitung(en) habe ich durch die Differenzenquotienten ersetzt mit delta x = 1e-3 (irgendetwas makroskopisches...)
Wenn es konvergiert, dann braucht man auch nicht viele Schritte. Die Tücken können aber noch im Detail liegen, Funktionswerte werden komplex (wenn man links der 0 anfängt, Ableitungen können zu 0 werden, was dann beim dividieren nicht gut tut (z.B. wenn man mit einer konstanten Funktion probiert). Unangenehm kann ich mir auch die Division von 2 kleinen Zahlen vorstellen. Auch habe ich beim Herumspielen bemerkt, das man die Konvergenzbedingung besser wegläßt, weil sich das Verfahren oft selbst heilt und es wenn man sich dem Ergebnis nähert wieder konvergiert. Endlosscheifen habe ich durch eine max. Anzahl an Iteratinen vermieden.

Der Code (auch wenn er im Editor nicht ganz vorteilhaft dargestellt wird:

function x = newton(f, start, tol)
# Tangentenverfahren von Newton für eine reele Nullstellen
# f: funktion, deren Nullstelle gesucht wird
# start: Startwert für die Nullstellensuche
# tol: Fehlertoleranz fuer die Approximation der Nullstelle

# Es wird nur eine Nullstelle gefunden
# makroskoisches dx=?x für die Berechnung der Ableitung als Differenzenquotient
h=1e-3;
delta=realmax;
x=start;
numDiff=@(x) (f(x+h)-f(x))/h;
k=1;
maxIterations=1000;
convergenceCheck=0;
while abs(delta) > tol
y=f(x);
if isinf(y)
error('Function result is infinite.');
end;
if iscomplex(y)
error('Function result is complex.');
end;
y1=numDiff(x);
if(y1 == 0)
error('First derivative is 0.');
end;
delta=y/y1;
if( convergenceCheck > 0 )
y2=(numDiff(x+h)-y1)/h;
if(abs(y*y2/(y1^2)) >= 1)
error('Convergence condition violated.');
end;
end;
x=x-delta;
if( k > maxIterations )
error(sprintf("More than %d iterations." , maxIterations));
end;
k=k+1;
end

Aufruf:

newton(f,0.1,eps)
ans = 5.248885986564048e-01

Dem Namen nach zu urteilen kein neues Verfahren, aber wenn man es nicht manuel mit Papier und Stift machen muss kann man damit leben.


newton
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.