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

Numerisches Lösen

 

Sarliefer
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 14.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2016, 04:43     Titel: Numerisches Lösen
  Antworten mit Zitat      
Hallo liebe Community,

ich versuche derzeit eine Gleichung numerisch mit Matlab zu lösen.

Die Gleichung lautet:
  y = 2a^2\cdot arctan \left(\sqrt{\frac{a-b+x}{a+b-x} }\right) - (b-x) \sqrt{a^2-(b-x)^2}

Um ein einfaches Iterationsverfahren anwenden zu können, habe ich die Gleichung auf folgende Form gebracht:

 x = \tan(\frac{y}{2a^2} + \frac{b-x}{2a^2}  \sqrt{a^2 - (b-x)^2})^2 (a+b-x) + b - a

a und b sind gegeben. y wird in einem Schritt zuvor berechnet.

Mein Matlab-Code zum Iterationsverfahren sieht folgendermaßen aus:

Code:

x = zeros(1,100);
x(1) =0.1;

for i = 1:1:100
    x(i+1) = (tan( (y/(2*a^2)) + ((b-x(i))/(2*a^2)) * sqrt(a^2 - (b-x(i))^2) )^2) *(a+b-x(i)) + b - a;
   
end

x_res = x(100);


Leider taucht eine Fehlermeldung auf, da das Argument der Wurzel einen negativen Wert annimmt. Ist das Vorgehen an sich falsch? Oder gibt es schon fertige Funktionen, die solche Iterationsverfahren beherrschen?

Wäre sehr dankbar über eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 14.01.2016, 10:10     Titel: Re: Numerisches Lösen
  Antworten mit Zitat      
Sarliefer hat Folgendes geschrieben:
a und b sind gegeben. y wird in einem Schritt zuvor berechnet.

Dann füge diese doch in deinem Minimalbeispiel hinzu damit es lauffähig wird.

Code:

x = zeros(1,100);
x(1) =0.1;

for i = 1:1:100
    x(i+1) = (tan( (y/(2*a^2)) + ((b-x(i))/(2*a^2)) * sqrt(a^2 - (b-x(i))^2) )^2) *(a+b-x(i)) + b - a;
   
end

x_res = x(100);


Wenn du x mit 100 Werten vorbelegst, solltest du deine Schleife nur bis 99 laufen lassen, da du sonst am Ende 101 Werte in x hast.

Sarliefer hat Folgendes geschrieben:

Leider taucht eine Fehlermeldung auf, da das Argument der Wurzel einen negativen Wert annimmt.
Ist das Vorgehen an sich falsch? Oder gibt es schon fertige Funktionen, die solche Iterationsverfahren beherrschen?

Die Wurzel aus einer negativen Zahl zu ziehen ist ein Diskusionsthema für sich und auch in Matlab nur unter Nutzung von komplexen Zahlen möglich.

Wenn ich mir die erste und zweite Gleichung anschaue, sehe ich:
- dass (b-x) bzw. (b+x) nicht größer als a bzw. a^2 werden dürfen,
- oder das die Iteration eben keine Lösung findet (-> evt. mit try-catch-arbeiten oder eine Auswertung vor der eigentlichen Rechnung einfügen),
- oder auf komplexe Zahlen ausweichen muss, was aber hier wohl dennoch nicht zu einer Lösung führen würde.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
slinshady
Forum-Century

Forum-Century


Beiträge: 115
Anmeldedatum: 12.01.16
Wohnort: ---
Version: R2012b+
     Beitrag Verfasst am: 14.01.2016, 12:54     Titel:
  Antworten mit Zitat      
Was mir einfällt. Wenn du komplexe Zahlen mit einschließen möchtest. solltest du den Laufindex nicht i nennen.
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 - 2025 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.