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 von Gleichungen

 

Geronymo
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2016, 15:07     Titel: Numerisches Lösen von Gleichungen
  Antworten mit Zitat      
Servus,

Ich bin mal wieder auf ein Problem gestoßen, dass ich nicht selber bei Matlab/Simulink lösen kann, da dass meine Kompetenz übersteigt... Rolling Eyes
____________________________________________________________________


Problem:

Ich habe eine Gleichung

deltT_m,ln = dT_m,ln (Logarithmische Mittleretemperaturdifferenz)
deltaT_max = dT_max (max. Temperaturdifferenz (°C))
deltaT_min = dT_min (min. Temperaturdifferenz (°C))
ln = nat. Logarithmus oder auch log (hier egal)


-> Gleichung: dT_m,ln = ( dT_max - dT_min ) / ( ln( dT_max / dT_min) )

dT_max = T_w,E - T_k,A
dT_max = T_w,A - T_k,E






_______________________________________________________________
-> Einsetzen und dann nach T_w,A umstellen...
... jeder der das Versucht wird auf Probleme stoßen und merken es geht nicht richtig.

Also muss es wohl numerisch gelöst werden.[Vllt. hat jemand ne andere Idee?!] Ich habe nicht die Muse es per Hand für einen Bereich von 4000 Zahlenwerten oder mehr zu tun. Embarassed Embarassed

dT_m,ln , dT_max , T_w,A ist keine Konstante, wird aber von Simulink berechnet und ist abgreifbar Exclamation

Wie kann man das programmieren, dass Simulink oder Matlab mir das macht Question


____________________________________________________________________

Mein kläglich gescheiterter Ansatz war

Umstellen nach 0= (((dTmax - x) / ( ln( dTmax / x ))) -dT_m,ln)
dann Newtonverfahren mal drüberrutschen lassen...
Code:

syms x;
C = sym2poly(((dTmax-x)/(ln(dTmax/x)))-dT_m,ln);
x = roots(C)
 


..ich vertehe selber nicht was ich da gemacht habe Laughing. Hab mir nur was dazu ausm Netz gesaugt und versucht umzuschreiben!


Bitte helft mir Wink
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2016, 15:22     Titel:
  Antworten mit Zitat      
Hallo,

grundsätzlich würde ich fsolve vorschlagen. Eine Möglichkeit könnten auch Lambert-Funktionen sein.

Wenn das über einen MATLAB Function - Block aufgerufen und Code generiert werden soll, bleibt aber nur fminsearch.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Geronymo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2016, 16:35     Titel:
  Antworten mit Zitat      
kannst du mir das mal beispielshalber mal aufschreiben, ich blicke da nicht durch!
Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2016, 16:43     Titel:
  Antworten mit Zitat      
Hallo,

zunächst mal müsstest du sagen, welchen Weg du einschlagen willst: Muss aus deinem Simulink-Modell Code generiert werden können?

Dann würde ich dich bitten, dir die Dokumentation der Funktion, die du verwenden willst, durchzulesen und konkrete Fragen dazu zu stellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Geronymo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2016, 13:04     Titel:
  Antworten mit Zitat      
Servus,

Ich verstehe nicht so ganz was Du meinst?!
Ich brauche nur diesen Wert, der sich 'dynamisch' wie der Rest der Gleichung ändert.
D.h. ich bekomme immer neue Temperaturen und neue L.M.T.D's (Eine Rechnung mit diesen Zahlen, nächste Rechnung mit neuen Zhlen) und muss daraus eben die Temperaur am wärmeseitigen Ausgang des W.T's bestimmen.

Mir persönlich ist es egal ob Matlab oder Simulink das mit Blöcken lösen kann, wird!
Aber ich weiß nicht, wie ich das mit 'fsolve' oder 'fminsearch' auflösen kann.
Ich verstehe meistens leider auch nicht so ganz was in der Dokumentation steht, da ich nicht aus dem IT-Bereich komme und da viel Fachgesimpelt wird. Laughing

Wäre cool wenn einer mal ein beispiel geben könnte.(mit Erklärung bitte!)

0= (((dTmax - x) / ( ln( dTmax / x ))) -dT_m,ln)

vllt. mal für ein Zahlenbeispiel(mit egal was für Werten) auflösen per matlab oder so, dass da steht x = bsp. 3,069


Diese Zahl wird dann einfach weiter verwendet in Simulink für weiitere einfachere Rechnungen. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2016, 14:13     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich verstehe meistens leider auch nicht so ganz was in der Dokumentation steht, da ich nicht aus dem IT-Bereich komme und da viel Fachgesimpelt wird.

Die Dokumentation ist sehr ausführlich, aber man muss sich ja nicht alle Optionen im Detail ansehen. Das Beispiel in der Dokumentation von fsolve sollte sich recht leicht auf andere Probleme übertragen lassen.

Mir ist deine Problemstellung nicht klar. Was soll denn dies heißen?
0= (((dTmax - x) / ( ln( dTmax / x ))) -dT_m,ln)

Soll ",ln" heißen, dass du danach lösen möchtest? Nach dem Logarithmus zu lösen ist mathematisch nicht sinnvoll. Man kann höchstens beispielsweise bei gegebenem x und dT_m nach dTmax lösen. Wenn es das ist, was du möchtest, wäre es hilfreich, typische Werte nicht nur für x, sondern auch dT_m anzugeben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Geronymo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2016, 12:02     Titel:
  Antworten mit Zitat      
Servus,

Ich habe es im ersten Text versucht zu erklären, aber wurde leider nicht verstanden.Crying or Very sad



Ich habe es mal oldschool mit Stift und Papier gemacht und werde es al png reinstellen.
Wie diese Variablen nun heißen spielt erstmal keine Rolle, ob T_w,E oder sonstwas Wink


schaut euch das Blatt an und vllt versteht man es jetzt dann besser!



alles gegeben außer T_w,A!!!!
Auflösen dieser Gleichung in Matlab oder Simulink!!!

20160118_105101.jpg
 Beschreibung:

Download
 Dateiname:  20160118_105101.jpg
 Dateigröße:  2.31 MB
 Heruntergeladen:  340 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

gut, jetzt weiß ich immerhin, was du machen möchtest. Wenn du eine eigene Syntax erfindest, ist das halt nicht unbedingt hilfreich.

Schön wäre nun noch ein Wert für T_m.

Code:
x = 3.069;
dT_m = 1;
f = @(dTmax) (dTmax - x) / ( log( dTmax / x )) -dT_m;
fsolve(f, 3)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Geronymo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2016, 14:23     Titel:
  Antworten mit Zitat      
jetzt sind ma zam^^

Ja das sind ja immer andere Werte, also einmal 4 einmal 3,224 oder dergleichen.
genauso werden die anderen Werte immer neu ausgegeben

also x ist gesucht und soll über newtonverfahren gesucht/ermittelt werden

nochmal aufs Blatt schaun bitte!!!

x wollte ich nur zum Verständnis einführen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.01.2016, 14:35     Titel:
  Antworten mit Zitat      
Hallo,

in dem Beispiel wurde eine Gleichung nach dTmax gelöst.
Wenn du jetzt eine andere Gleichung hast oder nach was anderem auflösen willst, dann passe das doch bitte selbst entsprechend an.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Geronymo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.01.2016, 14:57     Titel:
  Antworten mit Zitat      
ah super danke!!!


Code:

x = 3.069;
dT_m = 1;
f = @(dTmax) (dTmax - x) / ( log( dTmax / x )) -dT_m;
fsolve(f, 3)
 


ich hab noch ein paar Fragen:

@(dTmax) ist dann einfach der Wert nach dem es aufgelöst wird,
d.h. kann ich nun auch (dTmin)[als Beispiel] reinschreiben?

fsolve(f, 3) -- wofür steht die 3 nach dem komma ?



gerade einmal probiert.... geht nicht

Code:


% Nummerische Lösung für deltaT_min

f = @(dTmin) (dTmax-dTmin)/(log(dTmax/dTmin))-dT_ln;
fsolve(f, 3);
f1 = @(dTmin1) (dTmax1-dTmin1)/(log(dTmax1/dTmin1))-dT_ln;
fsolve(f1, 3);
f2 = @(dTmin2) (dTmax2-dTmin2)/(log(dTmax2/dTmin2))-dT_ln;
fsolve(f2, 3);
f3 = @(dTmin3) (dTmax3-dTmin3)/(log(dTmax3/dTmin3))-dT_ln;
fsolve(f3, 3);
 



hier einmal die Fehlermeldung

Warning: Input port 7 of 'Simulation/Subsystem1' is not connected.
> In T_aussen (line 85)
Warning: Output port 1 of 'Simulation/Subsystem1' is not connected.
> In T_aussen (line 85)
Warning: Output port 1 of 'Simulation/Subsystem1/L.M.T.D. Rechner' is not connected.
> In T_aussen (line 85)
Warning: Ignoring extra legend entries.
> In legend>set_children_and_strings (line 629)
In legend>make_legend (line 321)
In legend (line 247)
In T_aussen (line 93)
Warning: Ignoring extra legend entries.
> In legend>set_children_and_strings (line 629)
In legend>make_legend (line 321)
In legend (line 247)
In T_aussen (line 103)
Undefined function 'log' for input arguments of type 'timeseries'.

Error in T_aussen>@(dTmin)(dTmax-dTmin)/(log(dTmax/dTmin))-dT_ln

Error in fsolve (line 218)
fuser = feval(funfcn{3},x,varargin{:});

Error in T_aussen (line 108)
fsolve(f, 3);

Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.

>>
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.01.2016, 00:37     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
@(dTmax) ist dann einfach der Wert nach dem es aufgelöst wird,
d.h. kann ich nun auch (dTmin)[als Beispiel] reinschreiben?

Ja. Die anderen Variablen müssen dann vorab definiert worden sein.

Zitat:
fsolve(f, 3) -- wofür steht die 3 nach dem komma ?

Aus der Dokumentation
Zitat:
x = fsolve(fun,x0) starts at x0 and tries to solve the equations fun(x) = 0


Du solltest die Ergebnisse schon immer einer Variable zuweisen, also z.B.
Code:
solution1 = fsolve(f, 3);


Aus irgendeinem Grund ist bei dir eine der Variablen eine timeseries statt ein Double. Warum das so ist, kann ich aus den bisherigen Informationen nicht ersehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Geronymo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 22.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2016, 11:18     Titel:
  Antworten mit Zitat      
ja icch habe mal ne timeserie eingeführt da ich sonst meine werte nicht mit der Zeit koppeln konnte, vllt. unvermögen, aber so hat es dann funktioniert!

Kann ich das mit timeserie ausrechnen lassen?
oder kann ich die nur dafür umwandeln lassen und dann wieder in eine timeserie tansformieren?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.01.2016, 12:21     Titel:
  Antworten mit Zitat      
Hallo,

zum einen sollte das ohne Timeseries möglich sein, zum anderen können Timeseries sicher auch umgewandelt werden.
Ohne das vor mir zu haben, ist das für mich allerdings schwierig.

Grüße,
Harald
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.