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

Gleichung lösen ohne Symbolic Toolbox

 

vigo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2009, 10:09     Titel: Gleichung lösen ohne Symbolic Toolbox
  Antworten mit Zitat      
Hallo,

Ich möchte eine Gleichung lösen - abgekürzt z.B. so etwas:

Code:

c = 1 / tan(1/a*b+1)
 


c und a sind bekannt, der passende Wert für b ist gesucht. Kann ich so etwas mit Matlab lösen, wenn ich nicht die "Symbolic Toolbox" besitze (die Lösung über "syms" ist also nicht machbar) ?


Danke für jede Antwort,
vigo


Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2009, 10:20     Titel:
  Antworten mit Zitat      
wenn Du das nicht symbolisch rechnen kannst, ist eine genaue Lösung ziemlich ausgeschlossen...

Du müßtest die Gleichung von Hand umstellen, so dass Matlab nur noch die Zahlenwerte einsetzen braucht.

oder Du gibst dich mit einer Näherung zufrieden

irgendwie sowas


Code:

c   = 0.2;
a   = 5;

%intervall für b
b   = -100:0.01:100;
c_approx    = 1 ./ tan(1 ./ a .* b + 1);
fehler      = c_approx - c;
fehler_min  = min(abs(fehler));
c_best      = c_approx(find(fehler==fehler_min));
if(isempty(c_best))
    c_best      = c_approx(find(fehler==-fehler_min));
end;
c_best
 


man probiert quasi SEHR viele Werte aus und nimmt den, der der Wahrheit am Nächsten ist...

was besseres fällt mir da spontan ned ein
Private Nachricht senden Benutzer-Profile anzeigen
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2009, 10:23     Titel:
  Antworten mit Zitat      
aso
Du wolltest eigentlich den Wert für b... sorry

Code:

c   = 0.2;
a   = 5;

%intervall für b
b   = -100:0.01:100;
c_approx    = 1 ./ tan(1 ./ a .* b + 1);
fehler      = c_approx - c;
fehler_min  = min(abs(fehler));
c_best      = c_approx(find(fehler==fehler_min));
b_best      = b(find(fehler==-fehler_min));
if(isempty(c_best))
    c_best      = c_approx(find(fehler==-fehler_min));
    b_best      = b(find(fehler==-fehler_min));
end;
c_best
b_best
 


jetzt kann man sehen wie genau man mit dem approximierten b das vorgegebene c trifft...
Private Nachricht senden Benutzer-Profile anzeigen
 
Sani
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 03.09.09
Wohnort: Neu-Ulm
Version: R2007b
     Beitrag Verfasst am: 17.09.2009, 11:19     Titel:
  Antworten mit Zitat      
Wenn ich mich auf die schnelle nicht verrechnet hab ist die formel umgeformt dann

b = 1/((arctan(1/c)-1)*a)

Denke das ist das einfachste...

greez
_________________

Wer Rechtschreibfehler findet darf sie behalten.
Codefehler bitte melden Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
vigo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2009, 13:05     Titel:
  Antworten mit Zitat      
Danke für eure Antworten!

Der mögliche Bereich der gesuchten Lösung bewegt sich über 6 oder 7 Zehnerpotenzen hinweg, das mit der Näherung ist mal einen Versuch wert, allerdings wird das wohl seine Zeit dauern - auch da die komplette Formel insgesamt deutlich länger ist als die oben angegebene.
 
Idefix_1024
Forum-Century

Forum-Century


Beiträge: 230
Anmeldedatum: 16.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2009, 13:33     Titel:
  Antworten mit Zitat      
ich würde eine Iterative näherung programmieren... erstmal in groben schritten und dann in einem kleineren Intervall um den ersten Treffer verfeinern... das sollte schon klappen... und dann eben immer das c als Gütekriterium verwenden wie gut man schon der echten Lösung entgegengeht...

klar
analytisch und effizient ist das nicht gerade... aber wenn man keine andere Möglichkeit hat...
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast Ritis

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2009, 13:51     Titel: Newton Verfahren
  Antworten mit Zitat      
Hallo,

stell doch die Gleichung um und löse das ganze mit nem Newton-Verfahren:
Code:

f(b) =  1 / tan(1/a*b+1)  -c
 


Du suchst also die Nullstelle von f(b).


Beste Grüße
Gast
 
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.