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

iterative Lösung linearer, transzendenter Gleichung

 

SC

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2014, 17:34     Titel: iterative Lösung linearer, transzendenter Gleichung
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgendes Problem:
ich muss die Frosteindringtiefe nach Neumann berechnen und dazu eine Gleichung lösen, die einen linearen Anteil und einen transzendenten Anteil hat. Leider bin ich ein Matlab-Neuling und habe nach langem Rumprobieren keine Lösung für mein Problem gefunden.

Die zu lösende Gleichung ist in den Bildern angehängt.
Mir stehen alle Parameter zur Verfügung, sodass p die einzig Unbekannte ist.

Es wäre nett, wenn ihr mir helfen könntet!!

Kellner_2.jpg
 Beschreibung:
Das ist das G im Nenner

Download
 Dateiname:  Kellner_2.jpg
 Dateigröße:  2.76 KB
 Heruntergeladen:  301 mal
Kellner_forum.jpg
 Beschreibung:
Dies ist die zu lösende Gleichung

Download
 Dateiname:  Kellner_forum.jpg
 Dateigröße:  8.21 KB
 Heruntergeladen:  297 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.06.2014, 10:29     Titel:
  Antworten mit Zitat      
Hallo,

dafür kannst du fsolve oder fzero verwenden.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2014, 14:39     Titel:
  Antworten mit Zitat      
Hallo Harald, vielen Dank für deine Antwort!

Wenn ich die Gleichung mit fsolve lösen will, und den Startwert variiere kommen bei mir vollkommen unterschiedliche Ergebnisse heraus woran kann das liegen?

Im Folgenden mal die den Code, den ich geschrieben habe:
Code:
%
clear all;
clc;

% Eindringzahl nach Neumann

%Eingangswerte

%Wassergehalt
w = 0.2 %input('Wassergehalt: ');
%Feuchtdichte
rohs = 1.8 %input('Feuchtdichte: ');
%Trockendichte
rohd = rohs/(1+w)
%Wärmeleitfähigkeit, gefroren
l1 = 1.91  %[W/mK] input('Wärmeleitfähigkeit, gefroren: ');
%Wärmeleitfähigkeit, ungefroren
l2 = 1.3 %[W/mK]input('Wärmeleitfähigkeit, ungefroren: ');
%Wärmekapazität, gefroren
c1 = 1.8e6 %[J/m^3K]input('Wärmekapazität, gefroren: ');
%Wärmekapazität, ungefroren
c2 = 2.3e6 %[J/m^3K]input('Wärmekapazität, ungefroren: ');
%Frosttemperatur
T1 = 10  %input('Frosttemperatur: ');
%Bodentemperatur
T2 = 10 %input('Gefriertemperatur: ');
%Latente Schmelzwärme
Hs = 332500 %[J/kg];

%Wärmeleitzahl a1 gefroren
a1 = 4*l1./(c1*rohs)
%Wärmeleitzahl a2 ungefroren
a2 = 4*l2./(c2*rohs)
%Wärmeeindringzahl b1 gefroren
b1 = sqrt(l1*c1*rohs)
%Wärmeeindringzahl b1 gefroren
b2 = sqrt(l2*c2*rohs)

c = Hs*rohs*sqrt(pi)*0.5;
d = b1*T1;
e = b2*T2;
syms x;
x0 = 1e-4;
 n = fsolve(@(x) (Hs*rohs*sqrt(pi)*0.5*x - (b1*T1*exp(-x^2./a1))./(.95*x./sqrt(a1))-(b2*T2*exp(-x^2./a2))./(1-.95*x./sqrt(a2))), x0);
 


nehme ich als startwert z.B. 1.2e-4 kommt schon ein ganz anderes Ergebnis raus.
Habe ich etwas falsch gemacht?

Gruss
 
Harald
Forum-Meister

Forum-Meister


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

es kann ja mehrere Lösungen der Gleichung geben.
fsolve sucht wie alle Algorithmen aus der Optimization Toolbox gradientenbasiert nach einem lokalen Minimum, und das lokale Minimum ist nicht unbedingt das globale.
Hol dir doch das zweite Rückgabeargument zurück, dann siehst du ja ob etwas eine Lösung ist oder nicht.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2014, 15:46     Titel:
  Antworten mit Zitat      
Hallo Harald,

laut Autor kann die Gleichung eindeutig gelöst werden, da sich Gerade und Kurve in genau einem Punkt schneiden sollen. Das wäre ja hier nicht der Fall.
Gibt es evtl. noch andere Möglichkeiten, den Schnittpunkt zu finden?

Gruss

Stefan
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Gibt es evtl. noch andere Möglichkeiten, den Schnittpunkt zu finden?

Keine mir bekannte. Aber verwende doch auch den Rest des Beitrags?
Zitat:

Hol dir doch das zweite Rückgabeargument zurück, dann siehst du ja ob etwas eine Lösung ist oder nicht.

Also den Solver ruhig mit verschiedenen Startpunkten füttern. Wenn abs(fval) klein ist, handelt es sich bei der Rückgabe um eine Lösung.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2014, 19:00     Titel:
  Antworten mit Zitat      
Hallo danke noch mal für die Antworten. Ich habe vorhin vergessen zu schreiben, dass immer diese Meldung kommt.

No solution found.

fsolve stopped because the relative size of the current step is less than the
default value of the step size tolerance squared, but the vector of function values
is not near zero as measured by the default value of the function tolerance.

ich habe grade mal fval ausprobiert und bekomme da entweder einen Wert von 533233 oder ganz kleinen negativen Wert heraus, wenn ich die Startwerte variiere.

Des Weiteren sollte ich noch dazuschreiben, dass ich absolut nicht auf den Wert komme, der herauskommen sollte, wenn ich die Parameter eingebe, die mir vorliegen.


Danke und einen schönen Abend,

Stefan
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.06.2014, 20:33     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
No solution found.

fsolve stopped because the relative size of the current step is less than the
default value of the step size tolerance squared, but the vector of function values
is not near zero as measured by the default value of the function tolerance.

Das ist doch recht eindeutig? Heißt, dass der Startwert nicht gut genug war.

Mit x0 = 2e-3 und x0 = -2e-3 bekommt man beispielsweise Lösungen.

Zitat:
Des Weiteren sollte ich noch dazuschreiben, dass ich absolut nicht auf den Wert komme, der herauskommen sollte, wenn ich die Parameter eingebe, die mir vorliegen.

Und welcher Wert sollte das sein? Was passiert, wenn du diesen Wert als Startwert verwendest? Was, wenn du dich allmählich davon wegbewegst?

Plotte die Funktion mal im Intervall [-2e-3, 2e-3], dann sollte dir klar werden, warum das mit deinen Startwerten nicht gehen konnte.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2014, 08:55     Titel:
  Antworten mit Zitat      
Guten Morgen,

Danke für die Hilfe...das klappt ja mit 2e-3.

Änder ich die Startwerte aber folgender Maßen, sollte 4,72e-4 rauskommen..das passiert leider nicht.

Code:
%
clear all;
clc;

% Eindringzahl nach Neumann

%Eingangswerte

%Wassergehalt
w = 0.2 %input('Wassergehalt: ');
%Feuchtdichte
rohs = 2.07 %input('Feuchtdichte: ');
%Trockendichte
rohd = rohs/(1+w)
%Wärmeleitfähigkeit, gefroren
l1 = 1.95  %[W/mK] input('Wärmeleitfähigkeit, gefroren: ');
%Wärmeleitfähigkeit, ungefroren
l2 = 1.75 %[W/mK]input('Wärmeleitfähigkeit, ungefroren: ');
%Wärmekapazität, gefroren
c1 = 2.02e6 %[J/m^3K]input('Wärmekapazität, gefroren: ');
%Wärmekapazität, ungefroren
c2 = 2.71e6 %[J/m^3K]input('Wärmekapazität, ungefroren: ');
%Frosttemperatur
T1 = 10  %input('Frosttemperatur: ');
%Bodentemperatur
T2 = 10 %input('Gefriertemperatur: ');
%Latente Schmelzwärme
Hs = 332500 %[J/kg];

%Wärmeleitzahl a1 gefroren
a1 = 4*l1./(c1*rohs)
%Wärmeleitzahl a2 ungefroren
a2 = 4*l2./(c2*rohs)
%Wärmeeindringzahl b1 gefroren
b1 = sqrt(l1*c1*rohs)
%Wärmeeindringzahl b1 gefroren
b2 = sqrt(l2*c2*rohs)

c = Hs*rohs*sqrt(pi)*0.5;
d = b1*T1;
e = b2*T2;
syms x;
x0 = 1e-4;
 n = fsolve(@(x) (Hs*rohs*sqrt(pi)*0.5*x - (b1*T1*exp(-x^2./a1))./(.95*x./sqrt(a1))-(b2*T2*exp(-x^2./a2))./(1-.95*x./sqrt(a2))), x0);
 


gibt es eine Möglichkeit dass sich der Startwert selber variiert bis man zu einer Lösung kommt? Ich hab leider keine Ahnung von Informatik....

Gruss

Stefan
 
SC

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2014, 09:01     Titel:
  Antworten mit Zitat      
Wenn ich den Wert als Startwert einsetze, kommt leider wieder die selbe Fehlermeldung..
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.06.2014, 09:24     Titel:
  Antworten mit Zitat      
Hallo,

setze mal 4.72e-4 in deine Funktion ein. Da kommt -1.2068e+05 heraus. Das ist also ganz sicher keine Lösung der vorgegebenen Gleichung.

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.