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

Loesung eines nicht linearen Gleichungssystems mit Jacobi

 

Hiasl
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 06.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2012, 14:45     Titel: Loesung eines nicht linearen Gleichungssystems mit Jacobi
  Antworten mit Zitat      
Hallo,
ich bin ganz neu hier und muss sagen ich find des Forum hier spitze!
Nun zu meinem Problem:
Ich moechte in der Uni ein thermodynamisches Problem loesen, bei dem ich ein Gleichungssystem der Form A*x=b erhalte. Der x Vektor enthaelt diverse Temperaturen, Waermestroeme und Druecke an den Orten 1,2,3,..., die ich bestimmen moechte. Die Matrix A enthaelt die zugehoerigen Energiebilanzen und weiteren Gleichungen. Insgesamt erhalte ich 12 Gleichungen fuer 12 Variablen.
Soweit nicht so schwierig.
Da die einzelnen Werte in der Matrix A allerdings von Werten aus x abhaengen, wollte ich eine quasilineare jacobi Iteration machen, bei der nach jeder Iteration die Matrix A neu berechnet wird. (Siehe angehaengter Code)
Dieses Verfahren divergiert allerdings. (Der spektralradius der Iterationsmatrix ist groesser als 1).
Gibt es eine andere Moeglichkeit dieses Problem zu loesen? Oder mache ich was falsch? (Sorry ich bin noch nicht sonderlich fortgeschrittener matlab user)

Danke Schonmal! Wink

Gruesse
Matthias


Hier der Code
Code:

%Properties
R=8.314 %KJ/Kmol K
%geometrical
dm=200E-6; %thickness of membrane in [m]
dh=1E-4;%m
dv=1E-2;
dw=1E-3;
r=0.2E-6 % [m]
tau=sqrt(3);
epsilon=0.7; %check that again! this is from technical data for PTFE (in documents)
M=18.01528 %Kg/Kmol

%heat conduction
lambda_m=1; %W/mK
lambda_h=0.6; %W/mK
lambda_v=20;
lambda_w=300;
a_h=lambda_h/dh *0.001; %Kw/m2K
a_m=lambda_m/dm *0.001;
a_v=lambda_v/dv *0.001;
a_k=5; %kW/m2K
a_w=lambda_w/dw*0.001;


%startwerte;
m=0.01; %kg/s
T1=65;
T2=60;
T3=55;
T4=50;
T5=30;
T6=20;
q1=25;%kW
q2=25;
q3=0;
q4=25;
q5=25;

%initialisierung
ps2=p_sat(T2);
ps4=p_sat(T4);
p1=p_sat(T1)+0.01;
p2=ps2;
p3=ps4;
p4=ps4;
p5=p1;
h1=enthalpy(T1,p1); %KJ/Kg %ungefaehr 250
h2=enthalpy(T2,p2); % 230
h3=enthalpy(T3,p3); %2500
h4=enthalpy(T4,p4); % 200
h5=enthalpy(T5,p5); %130
a_kond=5; %eigentlich von m
%starting vector
x_alt=[m T2 T3 T4 T5 q1 q2 q3 q4 q5 p2 p3]';
x_m=x_alt
T=(x_m(3)+x_m(4))/2 +273;
B=1.064*(r*epsilon)/(dm*tau)*sqrt(M/(R*T))*10^5;
for i=1:1    
ps2=p_sat(x_m(2));
ps4=p_sat(x_m(4));
h2=enthalpy(x_m(2),ps2);
h3=enthalpy(x_m(3),ps4);
h4=enthalpy(x_m(4),ps4);
h5=enthalpy(x_m(5),p5);
%0=A*x-b
b=[0 T1 0 0 0 ps2 0 0 0 0 T6 ps4]';
A=[h1-h2 0  0  0  0 1     -1      0     0     0      0  0;
   0     1  0  0  0 1/a_h 0       0     0     0      0  0;
   h2-h3 0  0  0  0 0     1      -1     0     0      0  0;
   0     1 -1  0  0 0     -1/a_m  0     0     0      0  0;
   -1    0  0  0  0 0     0       0     0     0      B -B;
   0     0  0  0  0 0     0       0     0     0      1  0;
   h3-h4 0  0  0  0 0     0       1    -1     0      0  0;
   0     0  1 -1  0 0     0      -1/a_v 0     0      0  0;
   h4-h5 0  0  0  0 0     0       0     1    -1      0  0;
   0     0  0  1 -1 0     0       0    -1/a_k 0      0  0;
   0     0  0  0  1 0     0       0     0     -1/a_w 0  0;
   0     0  0  0  0 0     0       0     0     0      0  1];


%check rank
if rank(A)~= length(A)
    'error: check number of variables and equations'
end
b1=A*x_alt
[L,U,per]=lu(A);
w=eig(A); %Eigenvalues of A
D=diag(w);

d=det(D); %check if the determinante of the eigenvalue matrix is not zero
if d==0
    'error: check matrix and the eigenvalues'
end
Di=inv(D);

spectralradius=max(eig(Di*(D-A)))




%Matrix formulation of Jacobi
x_mp1=Di\(b-(A-D)*x_m)
x_m=(x_mp1-x_m)*0.0001+x_m;

end
 
Private Nachricht senden Benutzer-Profile anzeigen


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 06.12.2012, 16:47     Titel:
  Antworten mit Zitat      
Hallo,

du kannst den Spektralradius mit Hilfe von Shifts verschieben, oder aber du nimmst einfach fsolve().

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