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

Differenzenverfahren

 

jojo1234
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2013, 13:50     Titel: Differenzenverfahren
  Antworten mit Zitat      
Hallo,
ich versuche gerade eine Stabilitätsaufgabe mit Hilfe des Differenzenverfahrens zu lösen. Den Stab habe ich in 3 Abschnitte unterteilt, weil dort noch mehrere Federn wirken. Benutzt habe ich die zentrale Differenzenformel.

Code:
%Differenzenverfahren zur Bestimmung der kritischen Knickkraft

function charpol=DiffKnickkraft(lam1diff)

l1=1000;     %[mm]
l2=1000;     %[mm]
l3=2000;     %[mm]
EI1=5e9;     %[N*mm^2]
EI2=1e10;    %[N*mm^2]
EI3=3e10;    %[N*mm^2]
c1=100;      %[N/mm]
c2=50;       %[N/mm]
cT=100;      %[N*mm]
a=EI2/EI1;
b=EI3/EI2;
d=c1/EI2;
f=c2/EI3;
g=cT/EI3;
lam2diff=lam1diff*(EI1/EI2);
lam3diff=lam1diff*(EI1/EI3);

n=1000;      %Anzahl der Abschnitte im 1.Bereich     (Schleifenindex x)
m=n;         %Anzahl der Abschnitte im 2.Bereich     (Schleifenindex y)    
k=2*n;       %Anzahl der Abschnitte im 3.Bereich     (Schleifenindex z)
h=(l1+l2+l3)/((n-1)+(m-1)+(k-1));    %Schrittweite

%Matrix abschnittsweise zerlegt in einzelne Untermatrizen
%Nullelement Untermatrizen

A4=zeros(m,n+4);
A7=zeros(k,n+4);
A2=zeros(n,m+4);
A8=zeros(k,m+4);
A3=zeros(n,k+4);
A6=zeros(m,k+4);

%Untermatrizen mit Differenzenformeln.
%1.Bereich

A1=zeros(n,n+4);
for x=1:n
A1(x,x)=1;
A1(x,x+1)=(lam1diff-4);
A1(x,x+2)=(6-2*lam1diff);
A1(x,x+3)=(lam1diff-4);
A1(x,x+4)=1;
end

%2.Bereich

A5=zeros(m,m+4);
for y=1:m
A5(x,x)=1;
A5(x,x+1)=(lam2diff-4);
A5(x,x+2)=(6-2*lam2diff);
A5(x,x+3)=(lam2diff-4);
A5(x,x+4)=1;
end

%3.Bereich

A9=zeros(k,k+4);
for z=1:k
A9(x,x)=1;
A9(x,x+1)=(lam3diff-4);
A9(x,x+2)=(6-2*lam3diff);
A9(x,x+3)=(lam3diff-4);
A9(x,x+4)=1;
end

%Untermatrizen mit Randbedingungen
%Randbedingungen 1.Bereich

A10=zeros(12,n+4);
A10(1,3)=1;
A10(2,4)=1;
A10(2,2)=-1;
A10(3,n+2)=1;
A10(4,n+3)=1;
A10(4,n+1)=-1;
A10(5,n+3)=1;
A10(5,n+2)=-2;
A10(5,n+1)=1;
A10(10,n+4)=1;
A10(10,n+3)=-2;
A10(10,n+1)=2;
A10(10,n)=-1;

%Randbedingungen 2.Bereich

A11=zeros(12,m+4);
A11(3,3)=-1;
A11(4,4)=-1;
A11(4,2)=1;
A11(5,4)=-a;
A11(5,3)=2*a;
A11(5,2)=-a;
A11(6,m+2)=1;
A11(7,m+3)=1;
A11(7,m+1)=-1;
A11(8,m+3)=1;
A11(8,m+2)=-2;
A11(8,m+1)=1;
A11(9,m+4)=1;
A11(9,m+3)=-2;
A11(9,m+1)=2;
A11(9,m)=-1;
A11(10,5)=-a;
A11(10,4)=2*a;
A11(10,2)=-2*a;
A11(10,1)=a;

%Randbedingungen 3.Bereich

A12=zeros(12,k+4);
A12(6,3)=-1;
A12(7,4)=-1;
A12(7,2)=1;
A12(8,4)=-b;
A12(8,3)=2*b;
A12(8,2)=-b;
A12(9,3)=-2*d*h^3;
A12(9,5)=-b;
A12(9,4)=2*b;
A12(9,2)=-2*b;
A12(9,1)=-b;
A12(11,k+4)=1;    
A12(11,k+3)=(lam3diff-2);
A12(11,k+1)=(2-lam3diff);
A12(11,k)=-1;
A12(11,k+2)=-2*f*h^3;
A12(12,k+3)=1+g*h/2;
A12(12,k+1)=1-g*h/2;
A12(12,k+2)=-2;


%Gesamtmatrix

AA=[A1 A2 A3 ; A4 A5 A6 ; A7 A8 A9 ; A10 A11 A12];

%Determinante berechnen

charpol=det(AA);

end


Da ich die Knickkraft nicht kenne, habe ich mir auch noch einen kleinen Code zur Nullstellensuche geschrieben, der sieht so aus.

Code:
%Nullstellenermittlung beim Charakteristischen Polynom

lam1diff=1e-4;                      %Startwert für iterative Nullstellensuche
s=0.00001;                         %Anfangsschrittweite
EI1=5e9;                            %[N*mm^2]
l1=1000;     %[mm]
l2=1000;     %[mm]
l3=2000;     %[mm]
n=1000;         %Anzahl der Stützstellen im 1.Abschnitt    
m=n;         %Anzahl der Stützstellen im 2.Abschnitt        
k=2*n;       %Anzahl der Stützstellen im 3.Abschnitt  
h=(l1+l2+l3)/(n+m+k);

while lam1diff<=1
      lam1diff=lam1diff+s;
      natdiff=DiffKnickkraft(lam1diff);
          if natdiff>=0
             lam1diffkr=fzero(@DiffKnickkraft,lam1diff); %Übermittlung des Nullstellenkandidaten an      
                                                         %fzero für genauere Bestimmung                    
             break;              
          end                    
end      

%Ermittlung der kritischen Knickkraft aus gewähltem Freiwert lam1

Fkrdiff=lam1diffkr*EI1/h^2;
sprintf('%5.4f N',Fkrdiff)
 


Wenn ich nun das Skript ausführe, funktioniert es auch. Jedoch wird meine Variable "lam1diff" nicht variiert, sondern ist konstant und deshalb wächst meine Knickkraft bei steigender Stützstellenzahl ins unendliche. Kann mir jemand sagen, wo mein Fehler liegt. Denn wenn ich mit dem unteren Code die Nullstelle bei der analytischen Lösung suche, klappt dies einwandfrei.

MfG,
Joachim
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.