Escolar Documentos
Profissional Documentos
Cultura Documentos
Lec 2
Lec 2
6
x
:
<
III
$
V
1
Jacobi~
Z
(S = D)
O
Gauss-Seidel ~
Z
(S = D + L, T = U )`
O
+
#
4
d
\
[
\
a\
'
s
O
aA
,
d
y
As
&
rA
r
A'
=
>
s
a
)
.
H
u
#
0
3
A
H 0 2\
e
.
Q
_
#
0
3
A
<
j&
_
h
\
1
H~
Z
\
O
@
/K
"
f
.
A
<
r'
=
>
d\
\
Jacobi~
Z
O
Gauss-Seidel ~
Z
O
. 7
,
Ax = b
Ax = ((D + L) (U + (1 )D))x = b
where A = (D + L) (U + (1 )D)
o
P
:
(U + (1 )D)\
rA
l
SOR~
Z
O
r
6
r
:
.
(D + L)xk+1 = ((1 )D U )xk + b.
\
V\
[
t#
Q,
6
r A
SOR ~
Z
`
O
(
R
.
!
2 1
A=
e
1 2
SOR ~
Z
O
r
!
2 0
2(1 )
xk+1 =
xk + b`
4
6
x
.
2
0
2(1 )
"
f
4
'
=(L = S 1 T )
>
r
L=
!1
2(1 )
2(1 )
(1 )
/2
(1 )/2 1 + 2 /4
!
.
s
.
s]
j L_
eigenvalues
H
(spectral radius)s
j
o
&
H \
.
4
L_
eigenvalues_
Y
L
r detL =detT /detSs
detS
< detD
r
M
:
H\
0
A
'
=s
>
@\
eigenvalues_
Y
L
r
1 2 = detL = (1 )2
.
o
n
"
'
=s
>
eigenvalues_
Y
L
r detL = (1
)n s
.
"
f
4
Ls
4
l
0
AK
"
f
H |1 | 1 0 2s
.
j&
_
h
H
>
h_
eigenvalues
`
M
:s
l
M
:
H\
6
s
&
e
.
1 2
1 + 2 = (opt 1)(opt 1) = 2 2opt + opt
4
(1)
(1)_
d
t
}
r L_
trace
< eigenvalues
+
r
M
:
H\
$w
n
. s
d
`
opt = 4(2 3) 1.07s
r (1/4) 0.07s
a
)
. s
a>
'
Young_
\
d
s
HX
<,
4
L
Jocobi~
Z
D1 (L U )_
O
eigenvalues
r
6
rd
`
$
n
.
( + 1)2 = 2 2 .
(2)
= 1
, Gauss-Seidel ~
Z
s
O
&
HX
<,
Q
d
(2)
r 2 = 2 , = 0
o
= 2
a
)
. Jocobi~
Z
\
O
"
f eigenvalues
H
s
9
1
M
:
H\
, Gauss-Seidel ~
Z
s
O
{
9
&
h
Jocobi~
Z
O
a
~
%
r
~
s
O
a
)
. 0
A_
d
(1)%
!
3
"
s
2
( 1)( 1) = 2 2opt +
2(1
1 2 )
s
9
"
s
H
'
={
>
9
H0
A
<
r 2
"
'
=_
>
d
`
4
&
h
&
h
6
x
j&
h
H
opt =
2(1
1 2max )
2max
max = opt 1
s
.
6
r SOR ~
`
O
s
6
x
H\
V]
j
<
\
@
/
MATLAB
s
.
dV
U
Q
+
A>
Ax = b_
K
\
l norm\
"
f_
104
t
>
H
#
.
ai,j
4,
=
1,
0,
and
b
= (1.90, 1.05, 1.17, 3.48, 0.81, 0.26, 0.41, 1.17, 0.91, 0.15,
0.26, 1.05, 1.96, 0.91, 0.81, 1.90).
end
b = [1.90; 1.05; 1.17; 3.48; 0.81; -0.26; -0.41; 1.17;
0.91; -0.15; -0.26; 1.05; 1.96; 0.91; 0.81; 1.90];
D=diag(A);
I=ones(n,n);
S=zeros(n,n);
xo=zeros(n,1);
x =zeros(n,1);
for i=1:n
S(i,i)=I(i,i)*D(i);
end
T=A-S;
ST=inv(S)*T;
mu=eig(ST);
max_mu=max(abs(mu));
w_op=(2*(1-sqrt(1-max_mu^2)))/(max_mu^2);
while ((k<max_N)&&(stop==0))
err2=0;
for i=1:n
sum_a1=0;sum_a2=0;
inv_a=1.0/A(i,i);
for j=1:i-1
sum_a1=sum_a1+A(i,j)*x(j);
end
for j=i+1:n
sum_a2=sum_a2+A(i,j)*x(j);
end
x(i)=(1-w_op)*xo(i)+w_op*(-sum_a1-sum_a2+b(i))*inv_a;
end
for i=1:n
err2=err2+abs(xo(i)-x(i));
end
if (err2<tol)
stop=1;
end
k=k+1;
for i=1:n
xo(i)=x(i);
end
end
for i=1:n
fprintf(x(%d)=%f\n,i,x(i));
end
fprintf(iterations %d \n,k);
1.1
~
Z
`
O
s
6
x
#
q
+
A~
&
`
M
:_
&
h
rH
\
ry
H]
X
>
M
:
>
4
H
s
.
t
X
t
O
`
4
t
`
e
.
\
, Steepest Descent ~
Z
O
rq
&
&
h
X
t
l
H
u
\
@
/K
"
f
9
HK
\
q
&
h
4
.
"
f, s
~
Z
O
`
6
x
#
K
\
ry
H]
X
`
~
Z
`
O
&
6
h
x
e
.
"
fq
+
Ar
%
7
_
K
\
M
+
:
l
u
\
&
H
H]
j\
6
x
a
)
.
Steepest descent ~
Z
\
O
@
/K
^
&
h
,
j
t
H/
M
B
_
~
l
<
_
A
n
\
s
6
x
H~
Z
O
#
l
"
f
H
<
_
G
D
j5
w
&
H
\
s
6
x
+
s
.
$
2
"
_
<
\
9
K
.
5
q
<
f (x, y)\
@
/K
~
<
_
j
.
A
n
~
s
,
j@
/y
r f (x, y)
+
e
.
5
<
\
"
f_
Steepest descent
Steepest descent ~
Z
`
O
s
6
x
#
K
\
`
1
M
:,
A
n
H
_
_
&
h
\
"
f
f
s
&
F
G5
w
l
1
0
AK
A
n
\
&
{
h
q
Y
V
()\
L
Y
#
~
&
H~
Z
`
O
6
x
. s
M
:
-
e
,
s
4
0
y#
p
Qt
>
a
)
.
"
f&
X
h
]
\
&
, s
\
#
H~
`
4
.
>
h_
K
\
t
H
w
n
~
&
f1 (x, y) = 0, f2 (x, y) = 0
_
K
\
H
H]
j\
ty
q
K
.
j
<
g g(x, y) = 2i=1 [fi (x, y)]2
5
150
100
50
0
5
0
f (x, y)
x(0)
5 5
a
~
4
M
+
:
j@
/y
r g(x, y)s
,
w
n
~
&
s
q
'
=`
>
s
6
x
#
>
.
6
q
V
Y
\
,
u&
p
]
h
y
X
s
1
x
l
#
D
h
r
x(1), 7
`
1
e
. s
M
:,
~
l
\
1
H
.
6
&
X
h
]
`
&
{
h
y
&
,
l
0
1
,
l
\
&
x(0)\
@
/{
9
g
<
x(1)`
@
/{
9
D
rg
<
s
\
q
#
\
m
#
Hr
'
`
4
.
>
[
j>
h_
K
\
t
Hr
%
\
7
s
~
Z
`
O
&
6
h
x
+
e
.
6
5
q
<
f : R3 Rs
f1 (x, y, z) = 0, f2 (x, y, z) = 0, f3 (x, y, z) = 0
e
K
.
j
<
g g(x, y, z) = 3i=1 [fi (x, y, z)]2
M
+
:, K
x =
(x, y, z)t \
>
1
a
)
. 0
A_
~
Z
O
t
[
j>
h_
K
\
t
H
w
~
n
&
\
d
"
fK
\
H~
Z
`
O
&
,
1)
l
H
u
x(0) = (x0 , y0 , z0 )t \
"
f
j
<
g\
>
.
2) x(0)\
"
f g_
`
y
>
H~
&
.
3) &
X
h
]y
s
1
x
l
, D
h
r
x(1)`
1
H
.
s
Q
r'
`
4
'
. #
Q
> 0\
"
@
/K
x(1) = x(0) g(x(0))
.
s]
j&
]
h
X
`
1
H
H]
j
.
h() = g(x(0) g(x(0))),
6
H
<
\
9
. s
M
:
H h\
j
o
H
s
. h_
j5
w
r h\
p
r
#
j5
w
H~
Z
O
`
1
e
r>
`
9
, 1 < 2 < 3
[
j
\
Y
J
"
f h()_
j5
w
. s
\
0
A
K
1
3 \
&
HX
<,
_
#
\
0
AK
1 = 0
r
.
6
h(3 ) <
h(1 )
3 `
1
r
, 2 = 3 /2
. #
l
"
f x(1) = x(0) g(x(0))
H
.
l
\
&
x(0)\
@
/{
9
<
< x(1)\
@
/{
9
D
h
r
<
g_
s
\
q
"
f 2 \
m
s
Hr
'`
4
#
[1 , 3 ]\
"
f h_
j
5
w
`
1
e
.
Steepest descent ~
Z
`
O
s
6
x
#
2
K
\
t
H\
V]
j\
#
Q
.
d
UV
6
_
#
Q
w
n
~
&
`
Steepest descent ~
Z
`
O
s
6
x
#
x, y_
H
K
\
K
.
l
|
r x0 = 0, y0 = 0
&
.
3x y = 4, x + y = 2.
0
A
H]
j_
MATLAB
H steep2.m
6
.
%%%%%%%%%%%%%%%%%%%%%%%%%%% steep2.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc; clear;
f1=inline(3*x(1)-x(2)-4,x);
f2=inline(x(1)+x(2)-2, x);
x=[0 0]; tol=1.0e-7; N=100; k=1; alpha = 1;
fprintf(---------------------------------------------------\n);
fprintf(count
resid
alpha
y \n);
fprintf(---------------------------------------------------\n);
while (k<=N)
g1=f1(x)^2+f2(x)^2;
J = [3 -1; 1 1];
z=2*J*[f1(x);f2(x)];
z0=sqrt(z(1)^2+z(2)^2);
if(z0==0)
break;
end
z=z/z0;
alpha1=0;
alpha2=1;
g2=f1(x-alpha2*z)^2+f2(x-alpha2*z)^2;
while (g2>=g1)
alpha2=alpha2/2;
g2=f1(x-alpha2*z)^2+f2(x-alpha2*z)^2;
if (alpha2<tol/2)
break;
end
end
g=min(g1, g2);
if(g==g1)
alpha=alpha1;
else
alpha=alpha2;
end
x=x-alpha*z;
gg = max(abs(g1),abs(g2));
resid=abs(g-gg);
fprintf(
%2d
%f
%f
%f
%f \n,k, resid,alpha,
x(1),x(2));
if (resid<tol)
break;
end
k=k+1;
end
fprintf(---------------------------------------------------\n);
s
\
z
'
K
6
_
\
%
`
3
e
, K
\
s
H
`
S
+
e
.
--------------------------------------------------count
resid
alpha
--------------------------------------------------8
17.884271
1.000000
0.989949
-0.141421
1.404620
0.500000
1.488770
-0.107091
0.331470
0.250000
1.319048
0.076469
0.115706
0.250000
1.542289
0.189000
0.046569
0.250000
1.335194
0.329043
0.030499
0.250000
1.585183
0.331397
0.008219
0.250000
1.355256
0.429548
0.010794
0.250000
1.603655
0.401299
0.162039
0.125000
1.484880
0.440255
10
0.005454
0.062500
1.505803
0.499149
11
0.000317
0.007813
1.498178
0.500848
12
0.000001
0.003906
1.501951
0.499836
13
0.000039
0.001953
1.500041
0.500243
14
0.000000
0.000244
1.500088
0.500004
--------------------------------------------------
6
3>
h_
5
q
<
\
t
3>
h_
p
t
\
t
H
w
n
<
d
\
"
f
Steepest descent ~
Z
`
O
s
6
x
\
V]
j\
#
Q
.
d
UV
6
_
#
Q
w
~
n
&
`
Steepest descent ~
Z
`
O
s
6
x
#
x, y, z_
H
K
\
K
.
l
|
r x0 = 0.5, y0 = 0.5, z0 = 0.5
&
.
x2 sin(y) + 0.5 cos(z) = 0.5,
3x cos(y) + sin(z) = 0,
x2 + y 2 + z 2 = 0.95.
0
A
H]
j_
MATLAB
H steep3.m
6
.
%%%%%%%%%%%%%%%%%%%%%%%%%%% steep3.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc; clear;
f1=inline(x(1)^2-sin(x(2))+0.5*cos(x(3))-0.5,x);
f2=inline(3*x(1)-cos(x(2))+sin(x(3)), x);
f3=inline(x(1)^2+x(2)^2+x(3)^2-0.95,x);
resid
\n);
fprintf(---------------------------------------------\n);
while (k<=N)
g1=g_func(x);
z=2*j_func(x)*f_func(x);
z0=sqrt(z(1)^2+z(2)^2+z(3)^2);
if(z0==0)
break;
end
z=z/z0;
alpha1=0;
alpha3=1;
g3=g_func(x-alpha3*z);
while (g3>=g1)
alpha3=alpha3/2;
g3=g_func(x-alpha3*z);
if (alpha3<tol/2)
break;
end
end
alpha2=alpha3/2;
g2=g_func(x-alpha2*z);
g=min(g2, g3);
if(g==g2)
alpha=alpha2;
else
alpha=alpha3;
end
x=x-alpha*z;
gg = max(abs(g1),abs(g2));
resid=abs(g-gg);
10
fprintf( %2d
%f
%f
%f
%f \n,k, resid,
x(1),x(2),x(3));
if(resid<tol)
break;
end
k=k+1;
end
fprintf(---------------------------------------------\n);
function F=f_func(x)
f1=inline(x(1)^2-sin(x(2))+0.5*cos(x(3))-0.5,x);
f2=inline(3*x(1)-cos(x(2))+sin(x(3)), x);
f3=inline(x(1)^2+x(2)^2+x(3)^2-0.95,x);
F=[f1(x);f2(x);f3(x)];
function g=g_func(x)
f1=inline(x(1)^2-sin(x(2))+0.5*cos(x(3))-0.5,x);
f2=inline(3*x(1)-cos(x(2))+sin(x(3)), x);
f3=inline(x(1)^2+x(2)^2+x(3)^2-0.95,x);
g=f1(x)^2+f2(x)^2+f3(x)^2;
function J=j_func(x)
J = [2*x(1) -cos(x(2)) -0.5*sin(x(3));
3 sin(x(2)) cos(x(3));
2*x(1) 2*x(2) 2*x(3)];
s
\
z
'
K
6
_
\
%
`
3
e
, K
\
s
H
`
S
+
e
.
--------------------------------------------count
resid
--------------------------------------------11
0.830694
0.264953
0.451293
0.430141
0.030622
0.203444
0.442816
0.437284
0.045506
0.202415
0.449717
0.562089
0.032611
0.147967
0.423752
0.578446
0.088482
0.168043
0.333255
0.810626
0.079948
0.064246
0.265928
0.792788
0.048462
0.135602
0.199164
0.870737
0.045364
0.085886
0.161410
0.867693
0.110783
0.073254
-0.062756
0.977648
10
0.009241
0.055402
-0.082549
0.961336
11
0.009425
0.076436
-0.140974
0.954241
12
0.003298
0.062153
-0.146564
0.951258
13
0.002691
0.051084
-0.175626
0.954333
14
0.000556
0.057300
-0.180294
0.955109
15
0.000498
0.052380
-0.194185
0.949914
16
0.000191
0.055618
-0.195888
0.951282
17
0.000109
0.056389
-0.203582
0.952397
18
0.000029
0.054730
-0.203957
0.951436
19
0.000007
0.055273
-0.204752
0.951273
20
0.000004
0.054752
-0.205480
0.950884
21
0.000002
0.055083
-0.205832
0.950956
22
0.000003
0.054779
-0.206733
0.950735
23
0.000001
0.054963
-0.206883
0.950789
24
0.000001
0.054846
-0.207845
0.950666
25
0.000000
0.054904
-0.207860
0.950680
26
0.000000
0.054891
-0.207863
0.950673
27
0.000000
0.054886
-0.207891
0.950661
28
0.000000
0.054891
-0.207895
0.950664
29
0.000000
0.054888
-0.207897
0.950664
30
0.000000
0.054889
-0.207900
0.950665
--------------------------------------------s
<
\
"
f_
Steepest descent
Discrete steepest descent~
Z
O
r
p
#
r~
&
`
u
K
$
&
3
h
HX
<\
s
6
x
&
HX
<s
/
N
B
(S = [x1 , x2 , , xn ] [y1 , y2 , , yn ] [ ])\
"
f
5
q
<
g_
A
n
g\
s
o
#
d g`
K
"
f>
a
)
.
12
\
V\
[
t#
Q 1
"
o
<
D1 4u(x), x [0, 2] R\
r
o\
8
~
P
\
&
_
>
D10 `
l
rA
:
>
D1 = 3
`
H
H]
j\
ty
q
.
ut (x) = D1 4d u(x)
for
x [0, 2]
o
discrete steepest descent ~
Z
`
O
&
6
h
x
#
D1 _
`
. #
l
"
f
l
D10 = 7.0
r
.
rA
:
n
P
:
_
s
<
Analytic solution
Initial guess
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
> 2: 1
"
discrete steepest descent ~
Z
O
&
s
s
0
4
H
`
. #
l
"
fs
g(x, D1n )
\
&
h
A
n
re
_
_
7
x
r d\
@
/
#
d g(x, D1n ) =
&
steepest descent ~
\
Z
O
a
)
.
r~
2
"
H]
j
e
HX
<,
6
rd
s
e
&
.
s
\
H u(x)
< v(x)`
+
l
u
\
s
\
#
Q"
f
13
rA
:
_
D1
< D2 \
K
.
ut = D1 4d u uv
vt = D2 4d v
0
Ad
`
s
o
6
,
un 2uni + uni+1
un+1
uni
i
= D1 i1
uni vin+1
t
h2
n
v n 2vin + vi+1
vin+1 vin
= D2 i1
2
t
h
(3)
l
D10
D20 \
@
/
7
x
r`
d = (d1 , d2 )
&
.
Q
rA
:
_
s
<
t
9 s
o
a
)
A
n
H
6
.
g(x, D1n , D2n ) g(x, D1n1 , D2n ) g(x, D1n , D2n ) g(x, D1n , D2n1 )
,
d1
d2
s
]
j
r~
steepest descent ~
Z
`
O
a
)
.
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0
0.2
0
0.2
0.4
0.6
0.8
> 3: 2
"
steepest descent
14
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
double *dvector (long nl, long nh);
void print_vec2(double *a,int v1, int v2, double *b,int w1,
int w2, int num);
void zero_vector(double *a, int nl, int nh);
double calculation(double *ue,double *uo,double *un,double
v1,double v2,
double *ve,double *vo,double *vn,double
w1,double w2,
double D1,double D2,double r,int nt,double *x);
int main()
{
double *un,*uo,*vo,*vn,*x,*ue,*ve,D1,D2,dt,dx,r,pi,xa,xb,dx2;
int n,nt,i,t;
D1=3;D2=7;n=50;nt=1000;
pi = 4.0*atan(1.0);
uo=dvector(1,n);un=dvector(1,n);
vo=dvector(1,n);vn=dvector(1,n);
ue=dvector(1,n);ve=dvector(1,n);
x =dvector(1,n);
xa=0;xb=1;
dx=(xb-xa)/(n-1);
for (i=1;i<=n;i++){
x[i]=xa+(i-1)*(xb-xa)/(n-1);
}
dt=0.00001;
dx2=dx*dx;
r=dt/dx2;
for (i=1;i<=n;i++){
uo[i]=0.7*sin(pi*x[i]);
15
}
for (i=1;i<=n;i++){
vo[i]=sin(pi*x[i]);
}
for (t=1;t<=nt;t++){
for (i=2;i<=n-1;i++){
vn[i]=vo[i]+D2*r*(vo[i-1]-2*vo[i]+vo[i+1]);
}
vn[1]=vo[1];
vn[n]=vo[n];
for (i=2;i<=n-1;i++){
un[i]=uo[i]+D1*r*(uo[i-1]-2*uo[i]+uo[i+1])+0.001*uo[i]*vn[i];
}
for (i=1;i<=n;i++){
uo[i]=un[i];
vo[i]=vn[i];
}
}/* t end */
for (i=1;i<=n;i++){
ue[i]=un[i]+0.2*(0.5-rand()/((double)RAND_MAX));
ve[i]=vn[i]+0.2*(0.5-rand()/((double)RAND_MAX));
}
ue[1]=ue[n]=ve[1]=ve[n]=0;
print_vec2(ue,1,n,ve,1,n,3);
print_vec2(un,1,n,vn,1,n,2);
int kkk,stop=0,stop1=0;
double dd1,dd2,dds1,dds2,er,*z,var1,var2,z0,tol =
1.0e-7,al0,al1,al2,al3,g,g0,g1,g2,g3,h1,h2,h3,alpha;
dd1=0.1;dd2=0.1;
kkk=1;
z=dvector(1,2);
16
er=calculation(ue,uo,un, 1, n, ve,vo,vn,1,n,
dd1,dd2,r,nt,x);
printf("er %f \n",er);
while ( (kkk<5000) && (stop==0) ){ /*step2*/
/* step 3 */
dds1=dd1;dds2=dd2;
g1=calculation(ue,uo,un, 1, n, ve,vo,vn,1,n,
dd1,dd2,r,nt,x);
printf("g1 %f kkk %d \n",g1,kkk);
var1=calculation(ue,uo,un, 1, n, ve,vo,vn,1,n,
dd1+0.0001,dd2,r,nt,x);
var2=calculation(ue,uo,un, 1, n, ve,vo,vn,1,n,
dd1,dd2+0.0001,r,nt,x);
z[1]=(var1-g1)/0.1;
z[2]=(var2-g1)/0.1;
printf("z[1] %f ,z[2] %f\n",z[1],z[2]);
printf("var1 %f ,var2 %f\n",var1,var2);
z0=sqrt(z[1]*z[1]+z[2]*z[2]);
printf("z0 %f\n",z0);
if (fabs(z0)<tol)/*step 4 */
{
printf("z0 is less then tol, z0 %f\n",z0);
stop=1;
printf(" \n");
break;
}/*step 4 end */
/*step 5*/
z[1]=z[1]/z0;
z[2]=z[2]/z0;
printf("z1 %f, z2 %f \n",z[1],z[2]);
al1=0;
al3=1;
17
dd1=dds1-al3*z[1];
dd2=dds2-al3*z[2];
g3=calculation(ue,uo,un, 1, n, ve,vo,vn,1,n,
dd1,dd2,r,nt,x);
printf("g3 %f\n",g3);
/*step 5 end */
/*step 6 end */
while ((g3 >= g1)&&(stop1==0)){
al3=al3/2;
dd1=dds1-al3*z[1];
dd2=dds2-al3*z[2];
g3=calculation(ue,uo,un, 1, n, ve,vo,vn,1,n,
dd1,dd2,r,nt,x);
/*step 7 end */
if (al3<tol/2){
stop1=1;
printf("stop al3 %f\n",al3);
}
/*step 8 end */
}
stop1=0;
/*step 6 end */
al2=al3/2;
dd1=dds1-al2*z[1];
dd2=dds2-al2*z[2];
g2=calculation(ue,uo,un, 1, n, ve,vo,vn,1,n,
dd1,dd2,r,nt,x);
h1=(g2-g1)/al2;
h2=(g3-g2)/(al3-al2);
h3=(h2-h1)/al3;
/*step 10 end */
al0=0.5*(al2-h1/h3);
18
dd1=dds1-al0*z[1];
dd2=dds2-al0*z[2];
g0=calculation(ue,uo,un, 1, n, ve,vo,vn,1,n,
dd1,dd2,r,nt,x);
/*step 11 end */
alpha= (g0<g3) ? al0:al3;
g= (g0<g3) ? g0:g3;
/*step 12 end */
dd1=dds1-alpha*z[1];
dd2=dds2-alpha*z[2];
/*step 13 end */
if (fabs(g3-g1)<tol){
stop=1;
} /*step 14 end */
kkk=kkk+1;/* step 15 */
printf("kkk %d and g %f D1 %f and D2 %f\n
",kkk,g,dd1,dd2);
}/*step3 step15*/
print_vec2(un,1,n,vn,1,n,4);
return 0;
}
double *dvector (long nl, long nh)
{ double *v;
v=(double *) malloc((nh-nl+1+1)*sizeof(double));
return v-nl+1;
}
void print_vec2(double *a,int v1, int v2, double *b,int w1,
int w2, int num)
{
char filename[256];
char buffer[10];
FILE *fp;
int i;
19
strcpy(filename, "print");
sprintf(buffer, "%d", num);
strcat(filename, buffer);
strcat(filename, ".m");
fp=fopen(filename, "w");
fprintf(fp,"aa%d=[ ",num);
for (i=v1; i<=v2; i++) {
fprintf(fp,"%f \n",a[i]);
}
fprintf(fp,"];\n\n\n",num,num);
fprintf(fp,"bb%d=[ ",num);
for (i=w1; i<=w2; i++) {
fprintf(fp,"%f \n",b[i]);
}
fprintf(fp,"];x=linspace(0,1,40);figure(%d),plot(x,aa%d,x,bb%d);",
num,num,num);
fclose(fp);
}
void zero_vector(double *a, int nl, int nh)
{
int i;
for (i=nl; i<=nh; i++)
a[i] = 0.0;
return;
}
double calculation(double *ue,double *uo,double *un,double
v1,double v2,
double *ve,double *vo,double *vn,double
w1,double w2,
double D1,double D2,double r,int nt,double *x)
{
int t,i,n;
double pi,e=0.0,es=0.0;
20
n=v2-v1+1;
pi = 4.0*atan(1.0);
for (i=1;i<=n;i++){
uo[i]=0.7*sin(pi*x[i]);
}
for (i=1;i<=n;i++){
vo[i]=sin(pi*x[i]);
}
for (t=1;t<=nt;t++){
for (i=2;i<=n-1;i++){
vn[i]=vo[i]+D2*r*(vo[i-1]-2*vo[i]+vo[i+1]);
}
vn[1]=vo[1];
vn[n]=vo[n];
for (i=2;i<=n-1;i++){
un[i]=uo[i]+D1*r*(uo[i-1]-2*uo[i]+uo[i+1])+0.001*uo[i]*vn[i];
}
for (i=1;i<=n;i++){
uo[i]=un[i];
vo[i]=vn[i];
}
}/* t end */
for (i=1;i<=n;i++){
e=fabs(un[i]-ue[i]);
es=es+e;
}
for (i=1;i<=n;i++){
e=fabs(vn[i]-ve[i]);
es=es+e;
}
return es;
}
21
V
2
CG ~
Z
O
r nn
&
(positive definite)
+
A>
\
f
]
X
l
0
AK
&%
3
.
CG ~
Z
`
O
s
6
xK
K
\
l
0
AK
"
f
H Gauss elimination with pivoting%
!
3
n
>
\
5
g
t
s
r >
`
9
l
M
:
H\
{
9
&
h
&
s
h
.
Q
CG ~
Z
O
r
>
H]
j\
"
f7
x7
x^
e
H large
sparse systems with nonzero entries occurring in predictable patterns\
l
0
A
K
B
6
x
. &
X
h
]
|
s
#
Q
, CG ~
Z
`
O
s
6
xK
n
>
\
&
X
h
]
H
`
%
`
3
e
.
s
]
\
X
"
f'
= A
>
H
&
(0s
7
'
x\
@
/K
"
f hx, Axi > 0, A
H@
/g
A)
&
.
o
x
< y n
"
7
'{
M
9
:, ?
/&
`
h
6
s
&
.
hx, yi = xt y
(4)
Q
xt Ay = xt At y = (Ax)t ys
(5)
$
n
.
A
H CG ~
Z
`
O
l
0
A
l
r&
:
h
&
s
.
x
&
+
A>
Ax = b_
K
H
h
a
H
H
z
1
x
l
us
.
Proofx
< v 6= 0
t
H7
'
s
t
Hz
&
.
X
O
g(x + tv)
`
7
(6)
a
)
. x
< v
s
l
M
:
H\
, t\
@
/
s
<
h\
6
s
&
e
.
h(t) = g(x + tv)
22
s
_
>
hv, Avi
s
l
M
:
H\
h0 (t) = 0
&
\
h
"
f h
j5
w
.
Q
hv, b Axi
hv, Ax bi
=
t =
hv, Avi
hv, Avi
9
{
M
:
j5
w
, d
(6)\
_
K
"
f
h(t) =
hv, b Axi
g(x) 2
hv, b Axi +
hv, Avi
hv, b Axi
hv, Avi
2
hv, Avi
g(x)
hv, b Axi
hv, Avi
s
$
n
.
Q
hv, b Axi 6= 0 {
9
M
: 0s
7
'
v\
/
@K
"
f g(x +
n
. x Ax = b`
7
&
.
Q
#
Q*
7
'
v\
@
/K
"
f
hv, b Ax i = 0 $
n
, s
H g(x) g(x )
|
9
\
6
O
`_
p
.
Q
x {
9
M
: g
H
j5
w
H
.
@
/
x g\
>
H 7
'
&
.
Q
#
Q*
7
'
v\
@
/K
"
f
g(x + tv) g(x ) $
n
.
Q
hv, b Ax i
H 0s
&
, s
H b Ax `
>
w
p
.
Ax = b_
H
K
x
< x\
"
f
8
r
H
K
_
~
_
p
H
o~
(search direction) 7
'
v 6= 0\
ty
q
. r = b Ax\
x\
@
/
7
'
(residual vector associated with x)
&
, t\
6
s
&
.
t=
hv, ri
hv, b Axi
=
hv, Avi
hv, Avi
r 6= 0s
v = r
, g(x + tr)
H g(x)
t
s
H x
x \
H
`
_
p
. s
\
s
6
xK
"
f
o
H CG ~
Z
`
O
+
e
.
x0 x _
l
H
s
, v(1) 6= 0
l
o~
&
. k =
1, 2, 3, ...,\
@
/K
"
f
tk =
hv(k) , b Ax(k1) i
hv(k) , Av(k) i
23
(7)
(8)
>
\
, D
h
r
o~
v(k+1) `
1
H
. s
~
Z
`
O
s
6
xK
"
f x
H
&
H
\
{xk }`
P
`
1
e
.
o~
l
1
0
AK
"
f g\
x = (x1 , x2 , ..., xn )t \
@
/
<
ty
q
.
Q
g(x1 , x2 , ..., xn ) = hx, Axi 2hx, bi =
n X
n
X
aij xi xj 2
i=1 j=1
n
X
xi bi
i=1
$
n
. g\
xk \
@
/K
"
fp
r
n
X
g
(x) = 2
aki xi 2bk
xk
i=1
%
\
`
3
e
.
Q
rs
x\
@
/
7
'
{
9
M
: g_
A
n
(gradient)
H
6
s
>
a
)
.
t
g
g
g
g(x) =
(x),
(x), ...,
(x) = 2(Ax b) = 2r
x1
x2
xn
o
H
p
&
h
r
<
'
g(x)
>
y
H~
g(x)e
`
e
. 7
s
H
7
'
r_
~
_
p
.
"
f
r
<
s
v(k+1) `
6
s
H~
Z
`
O
Steepest descent~
Z
s
O
.
v(k+1) = r(k) = b Ax(k)
s
~
Z
O
r q
+
A>
\
M
:
&
`
h
t
t
5
4
q
K
6
x
&t
H
.
s\
@
/
@
/
o
H
6
`
7
H 0s
7
'
{v(1) , . . . , v(n) }\
6
x
.
hv(i) , Av(j) i = 0,
if
i 6= j
s
|
`
A-f
|
(A-orthogonality condition)s
, {v(1) , . . . , v(n) }`
A-f
(A-orthogonal)
. s
7
'
[
t
r{
9
1
qw
l
s
n
. s
|
9
K
d
(7)
<d
(8)\
%
`
3
e
.
6
&
Hs
o~
s
6
x
M
:
n
>
\
u
&
h
4
`
%
`
3
e
H
z
`
#
r
. 7
t&
h
&
X
s
~
Z
O
:
`
xK
&
X
K
\
%
`
3
e
.
24
{v(1) , . . . , v(n) }s
&
&
a
)
'
= A\
>
@
/K
"
f 0s
h
a
A-f
|
9
s
+
, v(0)
re
_
_
&
.
o
k = 1, 2, . . . , n\
@
/K
"
f
tk =
hv(k) , b Ax(k1) i
hv(k) , Av(k) i
o
&
,
t&
h
&
X
&
,
6
s
$
n
.
Ax(n) = b
Proof
H k = 1, 2, ..., n\
@
/K
"
f x(k) = x(k1) + tk v(k) s
l
M
:
H\
,
Ax(n)
= Ax(n1) + tn Av(n)
= (Ax(n2) + tn1 Av(n1) ) + tn Av(n)
..
.
= Ax(0) + t1 Av(1) + t2 Av(2) + ... + tn Av(n)
%
\
`
3
e
\
b\
+
6
d
`
%
`
3
e
.
Ax(n) b = Ax(0) b + t1 Av(1) + t2 Av(2) + ... + tn Av(n)
\
v(k) \
@
/
?
/&
`
h
>
, ?
/&
_
h
$
9
A @
/g
As
H
z
'
6
rd
`
%
`
3
e
.
hAx(n) b, v(k) i =
y
k\
@
/K
"
f A-f
_
$
`
9
&
6
h
xr
v
,
hAx(n) b, v(k) i = hAx(0) b, v(k) i + tk hv(k) , Av(k) i
(9)
s
a
)
.
,
tk =
hv(k) , b Ax(k1) i
hv(k) , Av(k) i
s
l
M
:
H\
,
tk hv(k) , Av(k) i = hv(k) , b Ax(k1) i
= hv(k) , b Ax(0) + Ax(0) Ax(1) + ... Ax(k2) + Ax(k2) Ax(k1) i
= hv(k) , b Ax(0) i + hv(k) , Ax(0) Ax(1) i + ... + hv(k) , Ax(k2) Ax(k1) i
25
j
t
e
.
H i\
@
/
#
and
s
_
$
9
M
:
H\
, i 6= k
i\
@
/K
"
f hv(k) , Av(i) i = 0`
7
,
Q
'
,
hAx(n) b, v(k) i =
(k)
(k)
i
i
a
)
. 7
'
Ax(n) b
H A-f
7
'
|
9
{v(1) , ..., v(n) }\
+
@
/K
"
ff
s
l
M
:
H\
, Ax(n) b = 0
H
r`
:
%
`
3
e
.
CG ~
Z
_
O
o
7
r
6
.
CG cycle
&
kT k
T
vk Avk
xk+1 = xk + tk vk
vk+1 = vk tk Avk
k =k+1
End While
6
r CG ~
`
O
s
6
x
H\
V]
j
<
\
@
/
MATLAB
s
.
26
dV
U
Q
+
A>
Ax = b_
K
\
l norm\
"
f_
104
t
>
H
#
.
ai,j
4,
=
1,
0,
and
b
= (1.90, 1.05, 1.17, 3.48, 0.81, 0.26, 0.41, 1.17, 0.91, 0.15,
0.26, 1.05, 1.96, 0.91, 0.81, 1.90)
preconditional matrix
H A_
@
/y
'
= D\
>
@
/K
"
f
6
s
&
'
=`
>
6
x
.
M 1 = D1/2
27
end
end
end
end
b = [1.90; 1.05; 1.17; 3.48; 0.81; -0.26; -0.41; 1.17;
0.91; -0.15; -0.26; 1.05; 1.96; 0.91; 0.81; 1.90];
x = zeros(16,1);
r = b-A*x;
v = r;
tol = 1.0; i = 1;
while (tol > 10^(-4))
alpha = (r*r)/(v*(A*v));
x = x + alpha*v;
rnew = r - alpha*A*v;
beta = (rnew*rnew)/(r*r);
v = rnew + beta*v;
r = rnew;
tol = max(abs(b-A*x));
res(i) = tol;
i = i+1;
end
CGcode.m`
z
'
r
v
6
r
\
%
`
3
e
.
>> CGcode
res
0.9607
1.0393
0.4626
0.0024
0.0006
0.0000
0.1188
28
0.0551
0.0346