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 eines Gleichungssystems

 

Argawal
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2013, 21:54     Titel: Iterative Lösung eines Gleichungssystems
  Antworten mit Zitat      
Hallo zusammen,

vielleicht kann mir einer von euch helfen. Ich habe folgendes Problem:

Ich möchte gerne zu einer gegeben Belastung die zugehörigen Verzerrungen eines Stahlbetonbauteils ermitteln. Baustoffbedingt geht das nur iterativ.
Ich wollte eigentlich das Newton-Raphson-Verfahren anwenden, kriege es aber nicht hin. Ich muss auch dazu sagen, dass ich lediglich eine rudimentäre Einführung in MATLAB hatte und mir den Rest selber beibringe, ich bin also für JEDEN Tip sehr dankbar!

Ich habe bisher folgendes gemacht:

Code:

function [  ] = evonE_Newton( e0,ky,h,b,As,zs,ec1,Ecm,fcm,c,fctm)

DZ=[eo,ky];%Das wäre der Startvektor mit Dehnung und Krümmung
E=[N.M];%Das sind die Einwirkungen die die Verzerrung verursachen %sollen
%Zuweisung der Z-Koordinaten in Abhängigkeit von der eingegeben Höhe
zOK=-h/2;
zUK=h/2;
for i = 1:10 %Ich habe zunächst einfach mal die 10 angenommen...
es=DZ(1)+DZ(2)*zs;%Dehung im Stahl zs als Hebelarm(ist bekannt und konstant)
%z0=Z-Koordinate der Spannungsnullline(Verschiebt sich bei jedem %Iterationsschritt ein bischen)
z0=max(zOK,min(-DZ(1)/DZ(2),zUK));
%Spannungsintegration:
%Für die quad-Funktion werden funktion-handels benötigt:
f1=@(z)z.^0*b.*sigmac((DZ(1)+DZ(2)*z),ec1,Ecm,fcm,c,fctm);
f2=@(z)z.^1*b.*sigmac((DZ(1)+DZ(2)*z),ec1,Ecm,fcm,c,fctm);
fx=(quad(f1,zOK,z0)+quad(f1,z0,zUK)+As*sigmas(es));%Das wäre die erste Gleichung
gx=(quad(f2,zOK,z0)+(zs*As*sigmas(es))+(quad(f2,z0,zUK)));%Die zweite Gleichung
dfx=gradient(f1,0.5,0.5);%Habe versucht die Ableitung numerisch zu ermitteln funktioniert aber so nicht
R=[(quad(f1,zOK,z0)+quad(f1,z0,zUK)+As*sigmas(es))-E(1);...
  (quad(f2,zOK,z0)+(zs*As*sigmas(es))+(quad(f2,z0,zUK)))-E(2)];
%R entspricht den tatsächlichen Schnittgrößen für den Dehungszustand und könnte jetzt auch als R=[fx;gx] geschrieben sein
   
%dR=gradient(R);%Versucht die numerische Ableitung zu bilden
D=R-E;% Die Differenz zwischen Einwirkung und Schnittgrößen soll 0 werden
DZ=DZ+(dR./R);%War auch nur ein Versuch, funktioniert auch nicht
end
end
 


Eigentlich hängen die beiden Gleichungen wirklich nur von e0 und ky ab, der Rest ergibt sich dann automatisch. Ich bekomme aber einfach keinen Algorithmus zustande der das Problem lösen würde. Ich habe schon versucht ob ich einfach zwei Schleifen machen soll und dann immer schrittweise eo erhöhen und dann ky komplett durchlaufen lasse und dann wieder e0 erhöhen usw. Das würde vielleicht gehen, scheint mir aber sehr langsam zu arbeiten.(Schleifen sind ja in MATLAB nicht so gut).

Hat jemand eine Idee? Wie schon gesagt: Ich bin für alles sehr dankbar!(Vielleicht hat ja jemand einen guten Literaturtipp für mich)

mfg Argawal
_________________

Nicht alles was auf dem Rücken liegt ist auch tot!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 13.04.2013, 22:12     Titel:
  Antworten mit Zitat      
Ich würd gern helfen, hab aber keine Ahnung on Stahlbeton, sorry.
Auch bei generallisierten Aussagen wie "funktioniert nicht" kann man keinen sinnollen Tipp geben.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Argawal
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2013, 22:37     Titel:
  Antworten mit Zitat      
Hallo,

danke für die schnelle Antwort! Ich versuche nochmal etwas genauer zu werden. Ich habe zunächst einen Zielvektor
Code:
einen Startvektor
Code:
DZ= [eo,ky]
von diesen Werten hängen geometrische Größen ab
Code:
es=DZ(1)+DZ(2)*zs;%Dehung im Stahl
%z0=Z-Koordinate der Spannungsnullline
z0=max(zOK,min(-DZ(1)/DZ(2),zUK));

Mit den jetzt vorhandenen Werten werden zwei Gleichungen ausgewertet welche dazu auf die externen funktionen sigmas und sigmas zugreifen
Code:
f1=@(z)z.^0*b.*sigmac((DZ(1)+DZ(2)*z),ec1,Ecm,fcm,c,fctm);
f2=@(z)z.^1*b.*sigmac((DZ(1)+DZ(2)*z),ec1,Ecm,fcm,c,fctm);
fx=(quad(f1,zOK,z0)+quad(f1,z0,zUK)+As*sigmas(es));
gx=(quad(f2,zOK,z0)+(zs*As*sigmas(es))+(quad(f2,z0,zUK)));
R=[fx,gx]

Mit den Größen die jetzt im Vektor R stehen muss ich (zumindest näherungsweise) die Gleichung
Code:
erfüllen. Ich muss jetzt den Vektor DZ solang verändern bis diese Gleichung erfüllt ist.

Eigentlich müsste es ja mit dem Newton Verfahren gehen, ich bekomme das aber nicht umgesetzt! Ich müste ja irgendwie die Ableitungen der Gleichungen bilden was meiner Meinung nach nur numerische gehen dürfte, daher kam die Idee mit
Code:
zu arbeiten. Wenn ich aber die Gleichungen vorher numerisch ausgewertet habe kann ich ja nur noch eine Zahl ableiten, daher liefert
Code:
den Wert 0. Zumindest habe ich mir das so erklärt. Mehr habe ich bisher nicht zustande gebracht Embarassed

mfg Argawal
_________________

Nicht alles was auf dem Rücken liegt ist auch tot!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.04.2013, 11:01     Titel:
  Antworten mit Zitat      
Hallo,

warum verwendest du nicht die fertigen Optimierungsalgorithmen aus der Optimization Toolbox bzw. falls diese nicht vorhanden ist wenigstens fminsearch?

Mir ist nicht ganz klar, was du nun eigentlich zu erreichen versuchst. Wenn du Eingangsdaten so anpassen willst, dass die Ausgangsdaten möglichst nah an einem Zielvektor sind, kannst du dafür lsqnonlin verwenden.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2013, 11:14     Titel:
  Antworten mit Zitat      
Hallo,

als Optimierungsproblem habe ich das Ganze noch nicht gesehen. Smile Ich werde sehen ob ich damit was erreichen kann. Das Problem ist das ich die Werte für den Vektor
Code:
aus einer statischen Berechnung erhalten und für diesen Vektor eben den dazu gehörenden Vektor
Code:
DZ=[e0,ky]
wissen will. Und das geht halt nich analytisch sondern nur iterativ. Ich werde auf jeden Fall mal versuchen ob mich
Code:
weiter bringt. Vielen Dank!

mfg Argawal
_________________

Nicht alles was auf dem Rücken liegt ist auch tot!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.04.2013, 11:44     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Und das geht halt nich analytisch sondern nur iterativ.

Das ist schon klar. Warum aber das Rad neu erfinden statt bestehende Methoden zu verwenden?
Falls es zur Verfügung steht, ist lsqnonlin für deine Anwendung einfacher als fminsearch und zudem effizienter.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2013, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

erstmal sehr vielen Dank. Ich komme aber mit fminsearch nicht zurecht. Ich kann doch an fminsearch nur eine Gleichung übergeben oder? Question Zumindest habe ich die Hilfe so verstanden. Kann mir da nochmal geholfen werden?

mfg Volker
_________________

Nicht alles was auf dem Rücken liegt ist auch tot!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.04.2013, 13:15     Titel:
  Antworten mit Zitat      
Hallo,

wie gesagt: sofern vorhanden, solltest du lsqnonlin verwenden.
Bei fminsearch müsstest du die Norm der Abweichung zwischen Ist und Soll berechnen und minimieren lassen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2013, 13:38     Titel:
  Antworten mit Zitat      
lsqnonlin ist nicht vorhanden. Ich arbeite mit unsere Hochschulversion und die Funktion findet er nicht. Ich werde versuchen die Norm der Abweichung zu berechnen. Das müßt ja bei mir dann etwa so aussehen
Code:
und ich müßt diesen Ausdruck irgendwie als Funktion aufschreiben...
Da bin ich ja mal gespannt ob ich das hinkriege Smile
_________________

Nicht alles was auf dem Rücken liegt ist auch tot!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.