#  NEWTON-RAPHSON-Verfahren (8.62) 
> with(linalg):
Warning, the protected names norm and trace have been redefined and
unprotected

> Digits:=Digits+10;

                             Digits := 20

> u:=vector(3): u_alt:=vector(3): R:=vector(3): g:=vector(3):
> vars:=seq(u[i],i=1..3):
# Die reduzierte Steigkeitsmatrix in (8.47a) lautet:
> K:=matrix([[k[10]+k[21], -k[21],0], [-k[21], k[21]+k[32], -k[32]], [0,
> -k[32], k[32]]]);

                [k[10] + k[21]       -k[21]          0   ]
                [                                        ]
           K := [   -k[21]        k[21] + k[32]    -k[32]]
                [                                        ]
                [      0             -k[32]        k[32] ]

# Nichtlineares Gleichungssystem (8.47b):
> g:=evalm( K &* u ):
> g[1]:=g[1]-R[1]; g[2]:=g[2]-R[2]; g[3]:=g[3]-R[3];

           g[1] := (k[10] + k[21]) u[1] - k[21] u[2] - R[1]


    g[2] := -k[21] u[1] + (k[21] + k[32]) u[2] - k[32] u[3] - R[2]


               g[3] := -k[32] u[2] + k[32] u[3] - R[3]

# Die Federsteifigkeiten setzen sich additiv aus einem linearen und
# nichtlinearen Anteil gem (8.46 a,b,c) zusammen:
> k[10]:=k[a]+alpha*k[a]*u[1]^p; k[21]:=k[b]+beta*k[b]*(u[2]-u[1])^q;
> k[32]:=k[c]+theta*k[c]*(u[3]-u[2])^r;

                                                  p
                   k[10] := k[a] + alpha k[a] u[1]


                                                      q
               k[21] := k[b] + beta k[b] (u[2] - u[1])


                                                      r
              k[32] := k[c] + theta k[c] (u[3] - u[2])

# Fr die numerische Auswertung werden folgende Parameter gewhlt.
# Federsteifigkeiten (8.49):
# 
> k[a]:=20: k[b]:= 10: k[c]:=20: alpha:=0.5:
> beta:=0.7: theta:=0.2: p:=0.3: q:=0.3: r:=0.2:
# usseren Belastungen (8.50):
> R[1]:= 10: R[2]:=20: R[3]:=15:
# Vorbesetzung der Vektoren u_alt (Startwerte) und der Variablen  v_norm
#  (Vektornorm (8.55) als Abruchkriterium mit epsilon=10e-6 ). Die
# Startwerte (8.51) erhlt man aus dem linearen Gleichungssystem
# (8.48b).
> u_alt:=vector(3, [9/4, 23/4, 13/2]);v_norm:=1;

                      u_alt := [9/4, 23/4, 13/2]


                             v_norm := 1

# Besetzen der Kraft- Verschiebungsgleichungen mit nummerischen Werten:
> g:=evalm( K &* u );

       [               0.3
  g := [(30 + 10.0 u[1]    + 7.0 %2) u[1] + (-10 - 7.0 %2) u[2],

        (-10 - 7.0 %2) u[1] + (30 + 7.0 %2 + 4.0 %1) u[2]

         + (-20 - 4.0 %1) u[3],

                                                ]
        (-20 - 4.0 %1) u[2] + (20 + 4.0 %1) u[3]]

                     0.2
  %1 := (u[3] - u[2])

                     0.3
  %2 := (u[2] - u[1])

> g[1]:=g[1]-R[1]: g[2]:=g[2]-R[2]: g[3]:=g[3]-R[3]:
# Berechnung der JACOBIschen Matrix (8.63):
> J:=jacobian(g,[vars]):
> epsilon:=1e-6:
# 
# Iteration nach NEWTON-RAPHSON gem (8.62):
> for Ianz from 1  while v_norm > epsilon  do; 
> e_g:=z ->  evalf(subs(u[1]=u_alt[1],u[2]=u_alt[2],u[3]=u_alt[3],z)); 
> J_v:=map(e_g,J): g_v:=map(e_g,g):
> u_new:=evalm(u_alt-inverse(J_v)&*g_v);u_new[1];u_alt[1];
> v_norm:=sqrt((u_new[1]-u_alt[1])^2. + (u_new[2]-u_alt[2])^2.
> +(u_new[3]-u_alt[3])^2.); 
#      Ausgabe der Verschiebungen nach jedem Iterationsschritt:
> if (Ianz=1) then printf(` Ianz |    u[1]    |    u[2]   |    u[3]    |
>     Fehler \n`) fi;
> printf(`   %d  |  %f  | %f  |  %f  |  %10.8f%%\n`,
> Ianz,u_new[1],u_new[2],u_new[3],v_norm*100.);  
> u_alt[1]:=u_new[1];u_alt[2]:=u_new[2];u_alt[3]:=u_new[3]; 
> od: 
 Ianz |    u[1]    |    u[2]   |    u[3]    |     Fehler 
   1  |  1.465510  | 3.431114  |  4.065661  |  345.23416526%
   2  |  1.443942  | 3.338244  |  3.972446  |  13.33383681%
   3  |  1.443922  | 3.338016  |  3.972218  |   .03225660%
   4  |  1.443922  | 3.338016  |  3.972218  |   .00000026%
# Zur Kontrolle werden die Ergebnisse in die Ausgangsgleichungen (8.47b)
# eingesetzt:
> g[1]:=subs(u[1]=u_alt[1],u[2]=u_alt[2],u[3]=u_alt[3],g[1]);
> g[2]:=subs(u[1]=u_alt[1],u[2]=u_alt[2],u[3]=u_alt[3],g[2]);
> g[3]:=subs(u[1]=u_alt[1],u[2]=u_alt[2],u[3]=u_alt[3],g[3]);

                                         -17
                          g[1] := -0.3 10


                                        -17
                          g[2] := 0.4 10


                                         -17
                          g[3] := -0.3 10

# Steifigkeiten nach der letzten Iteration:
> k[10]:=k[a]+alpha*k[a]*u_alt[1]^p; 
> k[21]:=k[b]+beta*k[b]*(u_alt[2]-u_alt[1])^q;
> k[32]:=k[c]+theta*k[c]*(u_alt[3]-u_alt[2])^r;

                    k[10] := 31.165113453022561762


                    k[21] := 18.478489953168978854


                    k[32] := 23.651787106438561316

# Darin sind jeweils die linearen Anteile von ka = 20, kb = 10 und kc = 
# 20 enthalten. Die nichtlinearen Anteile sind demnach durch 11.165 in
# der ersten, 8.479 in der zweiten und 3.652 in der dritten Feder (Bild 
# 8.3) gegeben.
# Ermittlung der Lippschitz-Konstantan L
# Die Vektornorm (8.55) von {u}0 -> {u}1 (nach dem  zweiten
# Iterationsschritt)  betrug: 
> N:=0.1333383693;

                          N := 0.1333383693

# Aus (8.36) mit epsilon = 1e-10 und i = 4 ergibt sich die
# Lippschitzkonstante zu: 
> eqn:=ln((1-L)*epsilon/N)=4*ln(L): L:=fsolve(eqn,L,0..1);

                     L := 0.051642145445245005600

> 
> 
