% Ritzsches Verfahren für die Stabknickung: Aufgabe 33.10

clear all

% 11111111111 ANPASSEN AN DAS AKTUELLE PROBLEM VON HIER ... 111111111111111111111111111
% Parameter:
tl  = 800   ;          
E   = 2.1e5 ;          
d   = 8     ;
d2  = 1.2*d ;

% Ansatzfunktionen und deren 1. und 2. Ableitungen:
m  = 5 ;                           % Anzahl der Ansatzfuntionen (wenn m < 5 gesetzt ...
P1 = [-1/tl^2 1/tl   0] ;          % ... wird, werden nur die ersten ...
P2 = [-1/tl^3 1/tl^2 0 0] ;        % ... m Ansatzfunktionen verwendet)
P3 = [-1/tl^4 1/tl^3 0 0 0] ;
P4 = [-1/tl^5 1/tl^4 0 0 0 0] ;
P5 = [-1/tl^6 1/tl^5 0 0 0 0 0] ;
% 11111111111 ... BIS HIER 111111111111111111111111111111111111111111111111111111111111

P1D = polyder (P1);
P2D = polyder (P2);
P3D = polyder (P3);
P4D = polyder (P4);
P5D = polyder (P5);

P1DD = polyder (P1D) ;
P2DD = polyder (P2D) ;
P3DD = polyder (P3D) ;
P4DD = polyder (P4D) ;
P5DD = polyder (P5D) ;

% ------------------------------------------------------------------------------------
% Vorbereitung der numerischen Integration und der Ergebnisauswertung:
n  = 100 ;                % Anzahl der Abschnitte für numerische Integration
dz = tl / n ;             % Breite eines Integrationsintervalls
nS = n + 1 ;              % Anzahl der Stützstellen
zS = 0 : dz : tl ;        % Koordinaten der Stützpunkte

EIS = zeros (nS , 1) ;
FNQ = zeros (nS , 1) ;
dS  = zeros (nS , 1) ;

% 22222222222222 ANPASSEN AN DAS AKTUELLE PROBLEM VON HIER ... 222222222222222222222222
dS  = d : (d2-d)/n : d2 ;
EIS(1:nS) = E*pi*dS.^4/64 ;              % Biegesteifigkeit
FNQ(1:nS) = 1 ;                          % Normalkraft/(Kritische Last) = "Fn-Quer"

% kc  = round (n*tl1/tl + 1.1) ;         % Angriffspunkt einer Feder im Abstand tl1
% kcT = round (n*tl2/tl + 1.1) ;         % Angriffspunkt einer Drehfeder im Abstand tl2
                                         % vom linken Rand
% 22222222222222 ... BIS HIER 222222222222222222222222222222222222222222222222222222222

% Funktionswerte und 1. und 2. Ableitung der Ansatzfunktionen an den Stützstellen
vS  (:,1) = polyval (P1   , zS)' ;
vS  (:,2) = polyval (P2   , zS)' ;
vS  (:,3) = polyval (P3   , zS)' ;
vS  (:,4) = polyval (P4   , zS)' ;
vS  (:,5) = polyval (P5   , zS)' ;
vdS (:,1) = polyval (P1D  , zS)' ;
vdS (:,2) = polyval (P2D  , zS)' ;
vdS (:,3) = polyval (P3D  , zS)' ;
vdS (:,4) = polyval (P4D  , zS)' ;
vdS (:,5) = polyval (P5D  , zS)' ;
vddS(:,1) = polyval (P1DD , zS)' ;
vddS(:,2) = polyval (P2DD , zS)' ;
vddS(:,3) = polyval (P3DD , zS)' ;
vddS(:,4) = polyval (P4DD , zS)' ;
vddS(:,5) = polyval (P5DD , zS)' ;

subplot(211) ; plot(zS , vS(:,1:m)) ; grid ; title('Ansatzfunktionen') ;

% ------------------------------------------------------------------------------------
% Aufbau des allgemeinen Matrizen-Eigenwertproblems:
K = zeros (m , m) ;
B = zeros (m , m) ;

for ii = 1:m                                          % Schleife über alle Gleichungen
  for jj = 1:m                                        % ii-te Zeile (Koeffizienten kij)
    Summe1 = EIS(1)*vddS(1,ii)*vddS(1,jj) + EIS(nS)*vddS(nS,ii)*vddS(nS,jj) ;
    Summe2 = FNQ(1)*vdS (1,ii)*vdS (1,jj) + FNQ(nS)*vdS (nS,ii)*vdS (nS,jj) ;
    faktor = 4 ;                                      % Numerische Integration ...
    for k = 2:n                                       % ... nach Simpsonscher Regel ... 
      Summe1 = Summe1 + EIS(k) * vddS(k,ii) * vddS (k,jj) * faktor ;
      Summe2 = Summe2 +          vdS (k,ii) * vdS  (k,jj) * faktor ;
      if   (faktor == 4) faktor = 2 ;                 
      else               faktor = 4 ;                 
      end ;
   end
% 33333333333333 ANPASSEN AN DAS AKTUELLE PROBLEM VON HIER ... 3333333333333333333333333
      K(ii,jj) = Summe1*dz/3 ; % + c *vS (kc ,ii)*vS (kc ,jj) ;    % Feder c am Punkt kc
    % K(ii,jj) = K(ii,jj)    + cT*vdS(kcT,ii)*vdS(kcT,jj) ;  % Drehfeder cT am Punkt kcT
% 33333333333333 ... BIS HIER ... 333333333333333333333333333333333333333333333333333333
    B(ii,jj) = Summe2*dz/3 ;
  end   
end

% Lösen des allgemeinen Eigenwertproblems:
[V D] = eig (K , B) ;
for i=1:m
   lambda(i) = D(i,i) ;                       % Eigenwerte
end
[Fkr , index] = min(lambda) ;                 % Kleinster Eigenwert = Kritische Last
FKritisch = Fkr

vSchlange = vS(:,1:m) * V(1:m,index) ;        % Knickfigur zum kleinsten Eigenwert
subplot(212) ; plot(zS , vSchlange) ; grid ; title('Knickfigur') ;