WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Nullstellensuche via Bisektion funktioniert nicht (immer)

 

Legovogel1337
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 08.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2019, 17:23     Titel: Nullstellensuche via Bisektion funktioniert nicht (immer)
  Antworten mit Zitat      
Hallo Leute, hab mich extra hier angemeldet weil ich den Fehler in meinem Script nicht finde.

Ich muss für eine Uni-Hausaufgabe etwas schreiben, dass in einem Intervall a:b nach einer Nullstelle bei f(x)=gamma(x)-3 sucht. Dazu soll ich ein Script schreiben, das eine Funktion (die ich im Anschluss in ein eigenes Script schreiben sollte) aufruft, die ein Function Handle mit o.a. f(x) sowie a und b als Intervallgrenzen übergeben bekommt. Die Funktion soll dann mittels Bisektion nach irgendeiner Nullstelle suchen. Zuletzt soll ein Plot angefertigt werden und die Nullstelle mit einem Marker gekennzeichnet werden.

Ich spiele mich jetzt schon seit einer Woche mit meinem Script, und immer wenn ich ein Intervall teste und ein richtiges Ergebnis bekomme finde ich kurz darauf raus, dass es für andere Intervalle nicht funktioniert. Weil ich nicht mehr weiter weiß bitte ich euch um eure Hilfe!

Das rufende Script ist irrelevant, das funktioniert. Hier der Code, der mir Kopfzerbrechen bereitet:

Code:
function res = findzero(fhgamma,a,b)
    origa = a;
    origb = b;
    if sign(fhgamma(a)) == sign(fhgamma(b))
        res = NaN;
        return
    end
    res = (a+b)/2;
    values(1) = res;
    abstand = abs(fhgamma(res));
    while abstand > 0.000001            %Toleranz
        if sign(fhgamma(a)) == sign(fhgamma(res))
            a = res;
        else
            b = res;          
        end
        res = (a+b)/2;
        values(end+1)=res;
        abstand = abs(fhgamma(res));
    end
    plot(values,fhgamma(values),'k','Marker','x')
    hold on
    plot(res,fhgamma(res),'xr')
    xlim([origa origb])
    xlabel('x')
    ylabel('gamma(x)-3')
return
end



Ich danke euch vielmals, ich kann schon nicht mehr Crying or Very sad
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.428
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2019, 17:48     Titel:
  Antworten mit Zitat      
Hallo,

versuch doch mal mit dem Debugger Schritt für Schritt durchzugehen. Was anderes würde ich auch nicht machen. Dazu wäre dann allerdings ein Intervall hilfreich, das Probleme bereitet.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Legovogel1337
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 08.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2019, 11:21     Titel:
  Antworten mit Zitat      
Hallo Harald und danke für deine Antwort

Das mit dem Debugger mache ich eh ständig. Das Problem hier ist, dass an irgendeinem Punkt "abstand" den Wert Inf annimmt, und dann eine Endlosschleife daraus wird. Warum abstand allerdings Inf wird, verstehe ich nicht.

Ein konkretes Intervall, in dem es funktioniert ist: [-6 -4.5]

Nicht funktionieren tut es zB bei: [-7 -4.5] und [-8, -2.7]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.428
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.04.2019, 17:06     Titel:
  Antworten mit Zitat      
Hallo,

beide Intervalle enthalten Unstetigkeiten. Das ist keine gute Idee für die Nullstellensuche.
Code:
fplot(@(x) gamma(x)-3, [-7, -4.5])


Insbesondere:
Code:


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Legovogel1337
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 08.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2019, 17:16     Titel:
  Antworten mit Zitat      
Danke, dann liegt es nicht am Script sondern an der Funktion. Hab eine Abfrage für die Unstetigkeit eingebaut und hoffe dass dem Professor das reicht. Dankeschön für deine Hilfe!

LG Lego
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.