Verfasst am: 13.04.2013, 21:54
Titel: Iterative Lösung eines Gleichungssystems
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!
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!
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...
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
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.
als Optimierungsproblem habe ich das Ganze noch nicht gesehen. Ich werde sehen ob ich damit was erreichen kann. Das Problem ist das ich die Werte für den Vektor
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.
erstmal sehr vielen Dank. Ich komme aber mit fminsearch nicht zurecht. Ich kann doch an fminsearch nur eine Gleichung übergeben oder? 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!
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.
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
und ich müßt diesen Ausdruck irgendwie als Funktion aufschreiben...
Da bin ich ja mal gespannt ob ich das hinkriege _________________
Nicht alles was auf dem Rücken liegt ist auch tot!
Einstellungen und Berechtigungen
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
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.