You are on page 1of 37

CHAPTER SEVEN

Introduction to Nonlinear Problems

Matlab Implementation 7.1 — Nonlinear BVP using the


Galerkin method

This example requires symbolic calculations. Thus there is no MATLAB implementation. An implementa-
tion using MATLAB Symbolic toolbox can be created along the same lines as the Mathematica
implementation.

Matlab Implementation 7.2 — Basic Newton-Raphson Method

Element equations
2

kHd L = rE

ij ÅÅÅÅÅÅÅÅ yz
jj 3 ÅbÅÅÅÅÅ zz
Ÿx1 IN d M B B d dx = jjj 3 3 zz
3 3
u1 -u2

kHd L = zz
j -u1 +u2
x2 T 2
T

k ÅÅÅÅÅÅÅÅ3ÅÅÅÅbÅÅÅÅÅÅ {

jij ÅÅÅÅ2ÅÅÅÅ zyz ji P1 zy


rE = rq + rp = jjj q b zzz + j z
qb

k ÅÅÅÅ2ÅÅÅÅ { k 2 {
P

i u1 yz
i ∑ k1 ê ∑ u1 ∑ k1 ê ∑ u2 yz jjjj ÅÅÅÅbÅÅ - ÅÅÅÅbÅÅ
j zz
zz
kT = j z=j
2 2
u2

k ∑ k2 ê ∑ u1 ∑ k2 ê ∑ u2 { jj - ÅÅÅÅ zz
k bÅÅ {
u21 u2
ÅÅÅÅb2ÅÅ

à Example 7.1 (p. 349)

MatlabFiles\Chap07\kd.m

function @kdeD = kdHd, LL


% @kdeD = kdHd, LL
% Element internal force vector

kde = H1êH3*LLL*@u1^3-u2^3; u2^3 - u1^3D


u1=dH1L; u2=dH2L;

end

MatlabFiles\Chap07\kT.m

function @kTeD = kTHd, LL


% @kTeD = kTHd, LL
% Element tangent matrix

kTe = H1êLL*@u1^2,-u2^2; -u1^2, u2^2D


u1=dH1L; u2=dH2L;

end
3

MatlabFiles\\Chap07\\BasicNewtonRaphsonBVPEx71.m

% Basic Newton-Raphson Method: Example 7.1


lmm =@1, 2; 2, 3; 3, 4D; L = 1ê3;
q=4;
re=q*Lê2 *@1; 1D;
dof = 4; ne = 3; d = @1; 2; 2; 2D;
debc = @1D;
df = setdiffH1:dof, debcL;
conv = 1; iter = 1; tol = 0.01;
whileHconv > tol & iter < 20L
fprintfH'Iteration: %d \n', iterL;
KT =zerosHdofL; F = zerosHdof,1L;
R = zerosHdof,1L; RHdofL=2;
% Generate equations for each element and assemble them.
for i=1:ne
fprintfH'Element: %d \n', iL;
lm = lmmHi,:L;
kde = kdHdHlm,:L, LL;
kTe = kTHdHlm,:L, LL;
KTHlm, lmL = KTHlm, lmL + kTe;
FHlmL = FHlmL + kde;
RHlmL = RHlmL + re;
end
dd = zerosHdof,1L;
Kf = KTHdf, dfL
Rf = RHdfL; Ff = -FHdfL + Rf
conv = Ff'*FfêH1+Rf'*RfL;
fprintfH'Convergence parameter: %f \n', convL;
ddHdfL=Kf\Ff; d = d + dd
iter=iter+1;
end

>> BasicNewtonRaphsonBVPEx71
Iteration: 1
Element: 1

kde =
4

-7
7

kTe =

3 -12
-3 12

Element: 2

kde =

0
0

kTe =

12 -12
-12 12

Element: 3

kde =

0
0

kTe =

12 -12
-12 12

Kf =

24 -12 0
-12 24 -12
0 -12 12

Ff =
5

-5.6667
1.3333
2.6667

Convergence parameter: 3.514286

d=

1.0000
1.8611
2.1944
2.4167

Iteration: 2
Element: 1

kde =

-5.4464
5.4464

kTe =

3.0000 -10.3912
-3.0000 10.3912

Element: 2

kde =

-4.1211
4.1211

kTe =

10.3912 -14.4468
-10.3912 14.4468

Element: 3

kde =

-3.5465
3.5465
6

kTe =

14.4468 -17.5208
-14.4468 17.5208

Kf =

20.7824 -14.4468 0
-10.3912 28.8935 -17.5208
0 -14.4468 17.5208

Ff =

0.0081
0.7587
-0.8798

Convergence parameter: 0.115687

d=

1.0000
1.8502
2.1782
2.3531

Iteration: 3
Element: 1

kde =

-5.3340
5.3340

kTe =

3.0000 -10.2701
-3.0000 10.2701

Element: 2
7

kde =

-4.0011
4.0011

kTe =

10.2701 -14.2341
-10.2701 14.2341

Element: 3

kde =

-2.6940
2.6940

kTe =

14.2341 -16.6110
-14.2341 16.6110

Kf =

20.5401 -14.2341 0
-10.2701 28.4682 -16.6110
0 -14.2341 16.6110

Ff =

0.0004
0.0263
-0.0273

Convergence parameter: 0.000123

d=

1.0000
1.8502
2.1781
2.3513
8

Matlab Implementation 7.3 — Newton-Raphson with Load


Steps

Element equations

kHd L = rE

ij ÅÅÅÅÅÅÅÅ yz
jj 3 ÅbÅÅÅÅÅ zz
Ÿx1 j
IN d M B B d dx = jj 3 3 zz
3 3
u1 -u2

kHd L = zz
j -u1 +u2
x2 T 2T

k ÅÅÅÅÅÅÅÅ3ÅÅÅÅbÅÅÅÅÅÅ {

ij ÅÅÅÅ ÅÅÅÅ y
2 z i P1 yz
rE = rq + rp = jjj q b zzzz + jj
j z
qb

k ÅÅÅÅ2ÅÅÅÅ { k 2 {
P

i 1 yz
i ∑ k1 ê ∑ u1 ∑ k1 ê ∑ u2 yz jjjj ÅÅÅÅbÅÅ - ÅÅÅÅbÅÅ zz
kT = jj z = jj zz
u2 u2

zz
2

k ∑ k2 ê ∑ u1 ∑ k2 ê ∑ u2 { j - ÅÅÅÅ
k bÅÅ {
u21 u2
ÅÅÅÅb2ÅÅ

à Example 7.3 p. 360

MatlabFiles\\Chap07\\LoadIncrementBVPEx73.m
9

% Newton-Raphson with Load Increments: Example 7.3


lmm =@1, 2; 2, 3; 3, 4D; L = 1ê3;
p=2ê4; q=1;
re=q*Lê2 *@1; 1D;
dof = 4; ne = 3; d = @1; 2; 2; 2D;
debc = @1D;
df = setdiffH1:dof, debcL;
for lambda = 2:2:4
fprintfH'Current load factor: %d \n', lambdaL;
conv = 1; iter = 1; tol = 0.01;
whileHconv > tol & iter < 20L
fprintfH'Iteration: %d \n', iterL;
KT =zerosHdofL; F = zerosHdof,1L;
R = zerosHdof,1L; RHdofL=p;
% Generate equations for each element and assemble them.
for i=1:ne
fprintfH'Element: %d \n', iL;
lm = lmmHi,:L;
kde = kdHdHlm,:L, LL;
kTe = kTHdHlm,:L, LL;
KTHlm, lmL = KTHlm, lmL + kTe;
FHlmL = FHlmL + kde;
RHlmL = RHlmL + re;
end
dd = zerosHdof,1L;
Kf = KTHdf, dfL
Rf = lambda*RHdfL; Ff = -FHdfL + Rf
conv = Ff'*FfêH1+Rf'*RfL;
fprintfH'Convergence parameter: %f \n', convL;
ddHdfL=Kf\Ff; d = d + dd
iter=iter+1;
end
end

>> LoadIncrementBVPEx73
Current load factor: 2
Iteration: 1
Element: 1
10

kde =

-7
7

kTe =

3 -12
-3 12

Element: 2

kde =

0
0

kTe =

12 -12
-12 12

Element: 3

kde =

0
0

kTe =

12 -12
-12 12

Kf =

24 -12 0
-12 24 -12
0 -12 12
11

Ff =

-6.3333
0.6667
1.3333

Convergence parameter: 11.545455

d=

1.0000
1.6389
1.8056
1.9167

Iteration: 2
Element: 1

kde =

-3.4020
3.4020

kTe =

3.0000 -8.0579
-3.0000 8.0579

Element: 2

kde =

-1.4842
1.4842

kTe =

8.0579 -9.7801
-8.0579 9.7801

Element: 3

kde =
12

-1.1549
1.1549

kTe =

9.7801 -11.0208
-9.7801 11.0208

Kf =

16.1157 -9.7801 0
-8.0579 19.5602 -11.0208
0 -9.7801 11.0208

Ff =

-1.2511
0.3374
0.1784

Convergence parameter: 0.466640

d=

1.0000
1.5476
1.7831
1.9129

Iteration: 3
Element: 1

kde =

-2.7068
2.7068

kTe =

3.0000 -7.1855
-3.0000 7.1855
13

Element: 2

kde =

-1.9625
1.9625

kTe =

7.1855 -9.5385
-7.1855 9.5385

Element: 3

kde =

-1.3307
1.3307

kTe =

9.5385 -10.9780
-9.5385 10.9780

Kf =

14.3710 -9.5385 0
-7.1855 19.0769 -10.9780
0 -9.5385 10.9780

Ff =

-0.0776
0.0348
0.0026

Convergence parameter: 0.001977

d=

1.0000
1.5420
14

1.7828
1.9129

Current load factor: 4


Iteration: 1
Element: 1

kde =

-2.6668
2.6668

kTe =

3.0000 -7.1337
-3.0000 7.1337

Element: 2

kde =

-1.9999
1.9999

kTe =

7.1337 -9.5354
-7.1337 9.5354

Element: 3

kde =

-1.3333
1.3333

kTe =

9.5354 -10.9779
-9.5354 10.9779

Kf =
15

14.2674 -9.5354 0
-7.1337 19.0708 -10.9779
0 -9.5354 10.9779

Ff =

0.6664
0.6668
1.3333

Convergence parameter: 0.228555

d=

1.0000
1.9158
2.2722
2.4595

Iteration: 2
Element: 1

kde =

-6.0319
6.0319

kTe =

3.0000 -11.0113
-3.0000 11.0113

Element: 2

kde =

-4.6997
4.6997

kTe =

11.0113 -15.4891
16

-11.0113 15.4891

Element: 3

kde =

-3.1460
3.1460

kTe =

15.4891 -18.1472
-15.4891 18.1472

Kf =

22.0225 -15.4891 0
-11.0113 30.9782 -18.1472
0 -15.4891 18.1472

Ff =

0.0011
-0.2204
-0.4793

Convergence parameter: 0.023853

d=

1.0000
1.8524
2.1820
2.3560

Iteration: 3
Element: 1

kde =

-5.3562
5.3562
17

kTe =

3.0000 -10.2941
-3.0000 10.2941

Element: 2

kde =

-4.0319
4.0319

kTe =

10.2941 -14.2828
-10.2941 14.2828

Element: 3

kde =

-2.6897
2.6897

kTe =

14.2828 -16.6525
-14.2828 16.6525

Kf =

20.5881 -14.2828 0
-10.2941 28.5656 -16.6525
0 -14.2828 16.6525

Ff =

0.0091
-0.0089
-0.0231
18

Convergence parameter: 0.000059

d=

1.0000
1.8502
2.1781
2.3513

Matlab Implementation 7.4 — Arc-Length Method

Element equations

kHd L = rE

jij ÅÅÅÅÅÅÅÅ zyz


j
IN d M B B d dx = jjj 3 3 zz
Ÿx1 zz
3 3
u1 -u2

kHd L =
ÅÅÅÅÅÅ
j ÅÅÅÅÅÅÅÅ z
x2 T 2T 3b

k 3ÅÅÅÅbÅÅÅÅÅÅ {
-u1 +u2

ij ÅÅÅÅ ÅÅÅÅ y
2 z i P1 yz
j
rE = rq + rp = jjj q b zzzz + jj z
qb

k ÅÅÅÅ2ÅÅÅÅ { k 2 {
P

i 1 yz
i ∑ k1 ê ∑ u1 ∑ k1 ê ∑ u2 yz jjjj ÅÅÅÅbÅÅ - ÅÅÅÅbÅÅ zz
kT = jj z = jj zz
u2 u2

zz
2

k ∑ k2 ê ∑ u1 ∑ k2 ê ∑ u2 { j - ÅÅÅÅ
k bÅÅ {
u21 u2
ÅÅÅÅb2ÅÅ

à Example 7.4 p. 368

MatlabFiles\\Chap07\\LoadIncrementBVPEx73.m

% Arc-Length Method: Example 7.4


s = 1; lambda = 0.25; lambdaMax = 4; tol = 0.0005; iter = 1;
lmm =@1, 2; 2, 3; 3, 4D; L = 1ê3;
p=2êlambdaMax; q=1;
re=q*Lê2 *@1; 1D;
19

dof = 4; ne = 3; d = @1; 1.5; 1.5; 1.5D;


debc = @1D;
df = setdiffH1:dof, debcL;
whileHlambda < lambdaMaxL
lambda = minH2*absHlambdaL, lambdaMaxL;
de = zerosHdof,1L;
if iter>1
s = s*5êHiter-iterConvergeL;
fprintfH'Reset arc-length, s = %f\n', sL
end
iterConverge = iter;
conv = 1;
whileHconv > tol & iter < 30L
fprintfH'*************************************\n'L;
fprintfH'Current load factor: %8.4f \n', lambdaL;
fprintfH'Iteration: %d \n', iterL;
fprintfH'*************************************\n'L;
KT =zerosHdofL; F = zerosHdof,1L;
R = zerosHdof,1L; RHdofL=p;
% Generate equations for each element and assemble them.
for i=1:ne
fprintfH'Element: %d \n', iL;
lm = lmmHi,:L;
kde = kdHdHlm,:L, LL;
kTe = kTHdHlm,:L, LL;
KTHlm, lmL = KTHlm, lmL + kTe;
FHlmL = FHlmL + kde;
RHlmL = RHlmL + re;
end
dd = zerosHdof,1L;
Kf = KTHdf, dfL
lamRf = lambda*Rf;
Rf = RHdfL;
Ff = -FHdfL + lamRf
conv = HFf'*FfLêH1+HlamRf'*lamRfLL;
fprintfH'Convergence parameter: %f \n', convL;
dlam = 0;
if conv>tol
a = Kf\Ff; b = Kf\Rf;
20

a3 = b'*b;
if iter==1
ddHdfL = a; s = lambda*sqrtHa3L;
fprintfH'Initial arc-length, s = %f\n', sL
else
ade = a + deHdfL;
a1 = ade'*ade - s^2;
a2 = 2*ade'*b; a4 = a2^2 - 4*a3*a1;
if a4>0
a4 = sqrtHa4L;
dlam1 = H-a2+a4LêH2*a3L;
dlam2 = H-a2-a4LêH2*a3L;
d1 = deHdfL'*HdeHdfL+a+b*dlam1L;
d2 = deHdfL'*HdeHdfL+a+b*dlam2L;
if minHd1,d2L>=0
dlam3 = -a1êa2;
if absHdlam1-dlam3L<absHdlam2-dlam3L
dlam = dlam1;
else
dlam = dlam2;
end
elseif d1>0
dlam = dlam1;
elseif d2>0
dlam = dlam2;
end
else
dlam = -minHmaxHconêtol,0.1L,0.5L*lambda;
end
if lambda + dlam > lambdaMax
dlam = lambdaMax-lambda; lambda = lambdaMax;
else
lambda = lambda + dlam;
end
ddHdfL = a + b*dlam;
end

fprintf H'Acceptable load factor increment = %8.4f \n',dlamL;


end

de = de + dd;
21

d = d + dd
iter=iter+1;
end
end

>> ArcLengthBVPEx74
*************************************
Current load factor: 0.5000
Iteration: 1
*************************************
Element: 1

kde =

-2.3750
2.3750

kTe =

3.0000 -6.7500
-3.0000 6.7500

Element: 2

kde =

0
0

kTe =

6.7500 -6.7500
-6.7500 6.7500

Element: 3

kde =

0
0

kTe =
22

6.7500 -6.7500
-6.7500 6.7500

Kf =

13.5000 -6.7500 0
-6.7500 13.5000 -6.7500
0 -6.7500 6.7500

Ff =

-2.2083
0.1667
0.3333

Convergence parameter: 4.299107


Initial arc-length, s = 0.298347
Acceptable load factor increment = 0.0000

d=

1.0000
1.2469
1.3210
1.3704

*************************************
Current load factor: 0.5000
Iteration: 2
*************************************
Element: 1

kde =

-0.9387
0.9387

kTe =

3.0000 -4.6644
-3.0000 4.6644

Element: 2
23

kde =

-0.3664
0.3664

kTe =

4.6644 -5.2350
-4.6644 5.2350

Element: 3

kde =

-0.2683
0.2683

kTe =

5.2350 -5.6337
-5.2350 5.6337

Kf =

9.3288 -5.2350 0
-4.6644 10.4701 -5.6337
0 -5.2350 5.6337

Ff =

-0.4056
0.0685
0.0650

Convergence parameter: 0.148649


Acceptable load factor increment = 0.1687

d=

1.0000
1.2368
24

1.3698
1.4472

*************************************
Current load factor: 0.6687
Iteration: 3
*************************************
Element: 1

kde =

-0.8920
0.8920

kTe =

3.0000 -4.5893
-3.0000 4.5893

Element: 2

kde =

-0.6779
0.6779

kTe =

4.5893 -5.6287
-4.5893 5.6287

Element: 3

kde =

-0.4610
0.4610

kTe =

5.6287 -6.2831
-5.6287 6.2831
25

Kf =

9.1785 -5.6287 0
-4.5893 11.2573 -6.2831
0 -5.6287 6.2831

Ff =

0.0088
0.0060
-0.0152

Convergence parameter: 0.000265


Acceptable load factor increment = 0.0000

d=

1.0000
1.2368
1.3698
1.4472

Reset arc-length, s = 0.497245


*************************************
Current load factor: 1.3375
Iteration: 4
*************************************
Element: 1

kde =

-0.8920
0.8920

kTe =

3.0000 -4.5893
-3.0000 4.5893

Element: 2

kde =
26

-0.6779
0.6779

kTe =

4.5893 -5.6287
-4.5893 5.6287

Element: 3

kde =

-0.4610
0.4610

kTe =

5.6287 -6.2831
-5.6287 6.2831

Kf =

9.1785 -5.6287 0
-4.5893 11.2573 -6.2831
0 -5.6287 6.2831

Ff =

0.2317
0.2289
0.4307

Convergence parameter: 0.132974


Acceptable load factor increment = 0.0512

d=

1.0000
1.4459
1.6665
1.7870
27

*************************************
Current load factor: 1.3887
Iteration: 5
*************************************
Element: 1

kde =

-2.0229
2.0229

kTe =

3.0000 -6.2720
-3.0000 6.2720

Element: 2

kde =

-1.6053
1.6053

kTe =

6.2720 -8.3317
-6.2720 8.3317

Element: 3

kde =

-1.0784
1.0784

kTe =

8.3317 -9.5802
-8.3317 9.5802

Kf =
28

12.5440 -8.3317 0
-6.2720 16.6634 -9.5802
0 -8.3317 9.5802

Ff =

0.0453
-0.0641
-0.1526

Convergence parameter: 0.012880


Acceptable load factor increment = 0.1653

d=

1.0000
1.4537
1.6662
1.7823

*************************************
Current load factor: 1.5539
Iteration: 6
*************************************
Element: 1

kde =

-2.0722
2.0722

kTe =

3.0000 -6.3400
-3.0000 6.3400

Element: 2

kde =

-1.5537
1.5537
29

kTe =

6.3400 -8.3288
-6.3400 8.3288

Element: 3

kde =

-1.0361
1.0361

kTe =

8.3288 -9.5301
-8.3288 9.5301

Kf =

12.6799 -8.3288 0
-6.3400 16.6577 -9.5301
0 -8.3288 9.5301

Ff =

1.0e-003 *

-0.5300
0.3815
-0.1168

Convergence parameter: 0.000000


Acceptable load factor increment = 0.0000

d=

1.0000
1.4537
1.6662
1.7823

Reset arc-length, s = 0.828741


*************************************
30

Current load factor: 3.1079


Iteration: 7
*************************************
Element: 1

kde =

-2.0722
2.0722

kTe =

3.0000 -6.3400
-3.0000 6.3400

Element: 2

kde =

-1.5537
1.5537

kTe =

6.3400 -8.3288
-6.3400 8.3288

Element: 3

kde =

-1.0361
1.0361

kTe =

8.3288 -9.5301
-8.3288 9.5301

Kf =

12.6799 -8.3288 0
31

-6.3400 16.6577 -9.5301


0 -8.3288 9.5301

Ff =

0.5175
0.5184
1.0358

Convergence parameter: 0.216342


Acceptable load factor increment = 0.2058

d=

1.0000
1.8238
2.1592
2.3363

*************************************
Current load factor: 3.3137
Iteration: 8
*************************************
Element: 1

kde =

-5.0661
5.0661

kTe =

3.0000 -9.9784
-3.0000 9.9784

Element: 2

kde =

-4.0005
4.0005

kTe =
32

9.9784 -13.9865
-9.9784 13.9865

Element: 3

kde =

-2.6851
2.6851

kTe =

13.9865 -16.3744
-13.9865 16.3744

Kf =

19.9567 -13.9865 0
-9.9784 27.9730 -16.3744
0 -13.9865 16.3744

Ff =

0.0390
-0.2109
-0.4760

Convergence parameter: 0.032756


Acceptable load factor increment = 0.5671

d=

1.0000
1.8346
2.1584
2.3296

*************************************
Current load factor: 3.8808
Iteration: 9
*************************************
Element: 1
33

kde =

-5.1750
5.1750

kTe =

3.0000 -10.0975
-3.0000 10.0975

Element: 2

kde =

-3.8802
3.8802

kTe =

10.0975 -13.9760
-10.0975 13.9760

Element: 3

kde =

-2.5875
2.5875

kTe =

13.9760 -16.2810
-13.9760 16.2810

Kf =

20.1950 -13.9760 0
-10.0975 27.9519 -16.2810
0 -13.9760 16.2810
34

Ff =

-0.0013
0.0009
-0.0003

Convergence parameter: 0.000000


Acceptable load factor increment = 0.0000

d=

1.0000
1.8346
2.1584
2.3296

Reset arc-length, s = 1.381235


*************************************
Current load factor: 4.0000
Iteration: 10
*************************************
Element: 1

kde =

-5.1750
5.1750

kTe =

3.0000 -10.0975
-3.0000 10.0975

Element: 2

kde =

-3.8802
3.8802

kTe =

10.0975 -13.9760
-10.0975 13.9760
35

Element: 3

kde =

-2.5875
2.5875

kTe =

13.9760 -16.2810
-13.9760 16.2810

Kf =

20.1950 -13.9760 0
-10.0975 27.9519 -16.2810
0 -13.9760 16.2810

Ff =

0.0384
0.0407
0.0792

Convergence parameter: 0.000806


Acceptable load factor increment = 0.0000

d=

1.0000
1.8503
2.1783
2.3515

*************************************
Current load factor: 4.0000
Iteration: 11
*************************************
Element: 1

kde =
36

-5.3347
5.3347

kTe =

3.0000 -10.2708
-3.0000 10.2708

Element: 2

kde =

-4.0012
4.0012

kTe =

10.2708 -14.2349
-10.2708 14.2349

Element: 3

kde =

-2.6675
2.6675

kTe =

14.2349 -16.5892
-14.2349 16.5892

Kf =

20.5416 -14.2349 0
-10.2708 28.4697 -16.5892
0 -14.2349 16.5892

Ff =

1.0e-003 *
37

-0.1404
-0.4119
-0.8040

Convergence parameter: 0.000000


Acceptable load factor increment = 0.0000

d=

1.0000
1.8503
2.1783
2.3515

You might also like