You are on page 1of 19

Metoda Cholesky

clc
format short
A=[123 -25 33 45;-25 169 1 -31;33 1 193 51;45 -31 51 244]
b=[33;-34;35;-36]
n=4
R=zeros(n,n);
R(1,1)=sqrt(A(1,1))
R(1,2)=A(1,2)/R(1,1)
R(1,3)=A(1,3)/R(1,1)
R(1,4)=A(1,4)/R(1,1)
a22_1=A(2,2)-R(1,2)^2
R(2,2)=sqrt(a22_1)
a23_1=A(2,3)-R(1,2)*R(1,3)
R(2,3)=a23_1/R(2,2)
a24_1=A(2,4)-R(1,2)*R(1,4)
R(2,4)=a24_1/R(2,2)
a33_1=A(3,3)-R(1,3)^2
a33_2=a33_1-R(2,3)^2
R(3,3)=sqrt(a33_2)
a34_1=A(3,4)-R(1,3)*R(1,4)
a34_2=a34_1-R(2,3)*R(2,4)
R(3,4)=a34_2/R(3,3)
a44_1=A(4,4)-R(1,4)^2
a44_2=a44_1-R(2,4)^2
a44_3=a44_2-R(3,4)^2
R(4,4)=sqrt(a44_3)
disp('verificare')
R'*R
y=zeros(n,1);
y(1)=b(1)/R(1,1);
for i=2:n
s=0
for j=1:i-1
s=s+R(j,i)*y(j);
end
y(i)=(b(i)-s)/R(i,i);
end
x=zeros(n,1);
x(n)=y(n)/R(n,n);
for i=n-1:-1:1
s=0
for j=i+1:n
s=s+R(i,j)*x(j);
end
x(i)=(y(i)-s)/R(i,i);
end
disp('solutia prin metoda Cholesky')
x
disp('verificare')
A*x
solutia prin metoda Cholesky

x=

0.2673

-0.2119

0.2073

-0.2671

verificare

ans =

33.0000

-34.0000

35.0000

-36.0000

Metoda de interpolare cu functii spline

clc
x=[0;pi/6;pi/4;pi/3;pi/2]
y=[0;1/2;sqrt(2)/2;sqrt(3)/2;1]
a=7*pi/12;
n=5;
y0=1;
yn=0;
for i=1:n-1
h(i)=x(i+1)-x(i);
end
A=zeros(n,n);
Y=zeros(n,1);
A(1,1)=h(1)/3;
A(1,2)=h(1)/6;
Y(1)=(y(2)-y(1))/h(1)-y0;
for i=2:n-1
A(i,i-1)=h(i-1)/6;
A(i,i)=(h(i-1)+h(i))/3;
A(i,i+1)=h(i)/6;
Y(i)=(y(i+1)-y(i))/h(i)-(y(i)-y(i-1))/h(i-1);
end
A(n,n-1)=h(n-1)/6;
A(n,n)=h(n-1)/3;
Y(n)=yn-(y(n)-y(n-1))/h(n-1);
A
Y
M=inv(A)*Y
flag=1; i=2;
while(flag~=0)
if(a>=x(i))
flag=0;
else
i=i+1;
end
end
disp('valoarea aproximativa a functiei este')
s=(M(i)*(a-x(i-1))^3+M(i-1)*(x(i)-a)^3)/(6*h(i-1))+(y(i)*(a-x(i-1))+y(i-1)*(x(i)-a))/h(i-1)-h(i-1)/6*(M(i)*(a-x(i-
1))+M(i-1)*(x(i)-a))
disp('verificare')
cos(a)

valoarea aproximativa a functiei este

s=

0.8424

verificare

ans =

-0.2588

Metoda de interpolare Lagrange

clc
x=[-9;-7;-3;2;6]
y=[-870;-656;-45;25;500]
a=-2;
n=5;
s=0;
for i=1:n
L=1;
for j=1:n
if(j~=i)
L=L*(a-x(j))/(x(i)-x(j));
end
end
s=s+L*y(i);
end
disp('Valoarea aproximativa este')
s

Valoarea aproximativa este

s=

33.5856

Metoda lui Gauss

clc

format short

A=[8 6 -3 -3;2 25 -3 7;9 -8 16 -3;-6 1 5 -4]

b=[-2;1;1;-3]

M1=[1 0 0 0;-2/8 1 0 0;-9/8 0 1 0;6/8 0 0 1]

A2=M1*A

b2=M1*b

M2=[1 0 0 0;0 1 0 0;0 14.75/23.5 1 0;0 -5.5/23.5 0 1]

A3=M2*A2

b3=M2*b2

M3=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 -3.2766/17.9628 1]

A4=M3*A3

b4=M3*b3

n=4;

x=zeros(n,1);

x(n)=b4(n)/A4(n,n);

for i=n-1:-1:1

s=0;

for j=i+1:n
s=s+A4(i,j)*x(j);

end

x(i)=(b4(i)-s)/A4(i,i);

end

disp('Solutia sistemului prin metoda lui Gauss este:')

disp('verificare')

A*x

Solutia sistemului prin metoda lui Gauss este:

x=

0.1053

-0.1365

0.0517

0.6226

verificare

ans =

-2.0000

1.0000

1.0000

-3.0000
Metoda Gauss-Seidel

clc
format short
A=[-1 -1 23 -4;24 -1 2 2;-3 -2 3 25;-5 25 3 4]
b=[1;-1;1;-1]
n=4;
M=tril(A)
U=A-M
B=-inv(M)*U
c=inv(M)*b
v=eig(B)
ro=norm(v,inf)
eps=input('Dati ordinul erorii')
i=0;
x=zeros(n,1);
e=A*x-b;
while(norm(e,inf)>eps)
i=i+1
x=B*x+c
e=A*x-b
end
disp('Solutia prin metoda G-S')
x
disp('este obtinuta la pasul')
i
disp('cu ordinul erorii')
eps
disp('verificare')
A*x

Solutia prin metoda G-S

x=

1.0e+307 *

-3.1828

-Inf

-Inf

Inf

este obtinuta la pasul

i=

103

cu ordinul erorii

eps =
1.0000e-007

verificare

ans =

NaN

NaN

NaN

NaN

Metoda gradientilor conjugati

clc
A=[67 -8 -3 78;-8 65 12 12;-3 12 64 -17;78 12 -17 61]
b=[4;-6;8;-10]
n=4;
v=zeros(n,1);
r=A*v-b;
for i=1:n
i
if(i==1)
p=-r
else
c=(r'*A*p)|(p'*A*p)
p=-r+c*p
end
end

p=

16

-24

32

-40
Metoda Householder

clc
format short
A=[3 -6 8 -3;2 5 16 7;-6 -8 6 -3;-6 1 5 -4]
b=[-2;5;1;4]
n=4
a1=A(1:4,1)
s=norm(a1,2)
beta=1/(s*(s+3))
u=a1;
u(1)=-3-s
H1=eye(4)-beta*u*u'
A2=H1*A
b2=H1*b
a2=A2(2:4,2)
s=norm(a2,2)
beta=1/(s*(s+norm(a2(1))))
u=a2
u(1)=a2(1)+sign(a2(1))*s
v=[0;u]
H2=eye(4)-beta*v*v'
A3=H2*A2
b3=H2*b2
a3=A3(3:4,3)
s=norm(a3,2)
beta=1/(s*(s+norm(a3(1))))
u=a3
u(1)=a3(1)+sign(a3(1))*s
v=[0;0;u]
H3=eye(4)-beta*v*v'
A4=H3*A3
b4=H3*b3
x=zeros(n,1);
x(n)=b4(n)/A4(n,n);
for i=n-1:-1:1
s=0;
for j=i+1:n
s=s+A4(i,j)*x(j);
end
x(i)=(b4(i)-s)/A4(i,i);
end
disp('sol householder')
x
disp('verificare')
A*x

Sol householder

x=
-1.5796

0.4268

-0.0592

0.9004

verificare

ans =

-10.4741

4.3310

3.0070

6.0070

Metoda Jacobi

clc
format short
A=[1 -1 2 29;1 -2 30 -3;-3 27 5 4;25 -3 3 5]
b=[6;-12;4;12]
n=4;
D=diag(diag(A))
E=D-A
B=inv(D)*E
c=inv(D)*b
v=eig(B)
ro=norm(v,inf)
eps=input('Dati ordinul erorii,eps=')
i=0;
x=zeros(n,1);
e=A*x-b;
while(norm(e,inf)>eps)
i=i+1
x=B*x-c
e=A*x-b
end
disp('Solutia prin metoda Jacobi')
x
disp('este obtinuta la pasul')
i
disp('cu ordinul erorii')
eps
disp('verificare')
A*x
Solutia prin metoda Jacobi

x=

NaN

NaN

NaN

NaN

este obtinuta la pasul

i=

288

cu ordinul erorii

eps =

1.0000e-007

verificare

ans =

NaN

NaN

NaN

NaN
Metoda Euler imbunatatita

format short
x=-5;
y=-3;
h=(-3-(-5))/250;
for x=-5:h:-3-h
f=sin(x)*cos(x)-y*cos(x);
x1=x+h;
y1=y+h*f;
f1=sin(x1)*cos(x1)-y1*cos(x1);
y=y+h/2*(f+f1);
end
disp('sol aprox')
y

sol aprox

y=

-10.0305

Metoda Euler modificata

clc
format short
x=3;
y=3;
h=0.006;
for x=3:h:5-h
x
f=(2-x*y)/(x^2-4);
x1=x+h/2;
y1=y+h/2*f;
f1=(2-x1*y1)/(x1^2-4)
y=y+h*f;
end
disp('sol aprox')
y

sol aprox

y=

1.7261
Metoda lui Simpson

clc
format short
a=1/sqrt(3);
b=sqrt(3);
n=451;
h=(b-a)/(2*n);
s=atan(a)/((a^2+3)+atan(b)/(b^2+3));
for i=1:n-1
x=a+2*i*h;
s=s+2*atan(x)/(x^2+3);
end
for i=1:n
x=a+(2*i-1)*h;
s=s+4*(atan(x))/(x^2+3);
end
I=h/3*s

I=

0.2162

Metoda lui Simpson pentru integrale duble

clc
a=1;
b=3;
c=3;
d=4;
n=111;
m=334;
h=(b-a)/(2*n);
k=(d-c)/(2*m);
for i=1:n*n+1
x(i)=a+(i-1)*h;
end
for j=1:2*m+1
y(j)=c+(j-1)*k;
end
s=0;
for i=1:n
for j=1:m
s=s+sin(x(2*i-1)*y(2*j-1)-2)+sin(x(2*i-1)*y(2*j+1)-2)+sin(x(2*i+1)*y(2*j-1)-2)+sin(x(2*i+1)*y(2*j+1)-2);
s=s+4*(sin(x(2*i-1)*y(2*j-1)-2)+sin(x(2*i-1)*y(2*j+1)-2)+sin(x(2*i+1)*y(2*j-1)-2)+sin(x(2*i+1)*y(2*j+1)-
2));
s=s+16*sin(x(2*i)*y(2*j)-2);
end
end
I=h*k/9*s
I=

0.1280

Metoda lui Taylor

clc
format short
x=-2;
y=2;
h=2/360;
for x=-2:h:0-h
y1=(y-x-x*cos(y/x))/x;
y2=(-y+x*y1+x^2*sin(y/x))/x^2;
y3=(2*y+x^2*y2+x^3*cos(y/x))/x^3;
y=y+h*y1+h^2/2*y2+h^3/6*y3;
end
disp('val aprox in pi/3 este')
y

val aprox in pi/3 este

y=

0.0040
Metoda Newton-Raphson

clc
format short
x=[2.5;1.2];
f=[3*x(1)-x(2)-1;9*x(1)^2+4*x(2)^2-36];
eps=input('Dati ordiul erorii eps=')
while(norm(f,inf)>eps)
i=i+1;
J(1,1)=3;
J(1,2)=-1;
J(2,1)=18*x(1);
J(2,2)=8*x(2);
x=x-inv(J)*f;
f=[3*x(1)-x(2)-1;9*x(1)^2+4*x(2)^2-36];
end
disp('Solutia prin metoda NR este')
x
fprintf('\nsi are ordinul de eroare %e\n', eps)
disp('verificare')
f

Solutia prin metoda NR este

x=

1.1511

2.4533

si are ordinul de eroare 1.000000e-008

verificare

f=

1.0e-011 *

0.7375
Metoda Relaxarii Simple

clc
format short
A=[45 2 3 4;2 44 1 5;3 1 43 -4;4 5 -4 42]
b=[1;-2;3;-4]
n=4;
eps=input('dati ordinul erorii,eps=')
i=0;
v=zeros(n,1);10^-8
format long
10^-8
10^-1
10^2
10^-8
r=A*v-b;
while(norm(r,inf)>eps)
i=i+1
for k=1:n
s(k)=abs(r(k));
end
[c,j]=max(s)
t=-r(j)/A(j,j)
p=zeros(n,1);
p(j)=1
v=v+t*p
r=r+t*A*p
end
disp('Solutia prin metoda relaxarii simple')
disp('la pasul')
i
disp('cu precizia')
eps
disp('verificare')
A*v

Solutia prin metoda relaxarii simple

la pasul

i=

22

cu precizia

eps =

1.000000000000000e-008

verificare
Metoda rotatiilor lui Jacobi

clc
format short
A=[12 4 8 -2 14;4 13 -5 9 3;8 -5 14 -2 1;-2 9 -2 15 -1;14 3 1 -1 16]
n=5;
k=0;
nmax=1;
eps=input('Dati ordinul erorii, eps=')
while(nmax>eps)
k=k+1;
p=1;
q=2;
max=abs(A(1,2));
for i=1:n-1
for j=i+1:n
if(max<abs(A(i,j)))
max=abs(A(i,j));
p=i;
q=j;
end
end
end
teta=(A(q,q)-A(p,p))/(2*A(p,q))
if(teta==0)
t=1;
else
t=1/(teta+sign(teta)*sqrt(teta^2+1));
end
c=1/sqrt(t^2+1);
s=t/sqrt(t^2+1);
U=eye(n);
U(p,p)=c;
U(p,q)=s;
U(q,p)=-s;
U(q,q)=c;
U
A=U'*A*U
nmax=n*max
end
disp('Valorile proprii pentru A sunt')
diag(A)

Valorile proprii pentru A sunt

ans =

-3.1268

4.0497

12.7464
25.2686

31.0620

Metoda Runge-Kutta

clc
format short
x=2;
y=-3;
h=(3-2)/1500
for x=2:h:3-h
x
g1=(2*y^2)/(x*(x+3*y))
g2=(2*(y+h/2)^2*g1)/((x+h/2)*((x+h/2)+3*(y+h/2)));
g3=(2*(y+h/2)^2*g2)/((x+h/2)*((x+h/2)+3*(y+h/2)));
g4=(2*(y+h/2)^2*g3)/((x+h/2)*((x+h/2)+3*(y+h/2)));
y=y+h/6*(g1+2*g2+2*g3+g4);
end
y

y=

-2.9727

Metoda suprarelaxarii

clc
format short
A=[17 10 0 0 0;10 17 -6 0 0;0 -6 17 -9 0;0 0 -9 17 7;0 0 0 7 17]
b=[-12;-2;2;-2;2]
n=5;
D=diag(diag(A))
E=tril(A)-D
F=E'
T=-inv(D)*(E+F)
v=eig(T)
lambda=max(v)
omega=2/(1+sqrt(1-lambda^2))
B=-inv(E+1/omega*D)*(F+(1-1/omega)*D)
c=inv(E+1/omega*D)*b
eps=input('Dati ordinul erorii, eps=')
i=0;
x=zeros(n,1);
e=A*x-b;
while(norm(e,inf)>eps)
i=i+1
x=B*x+c
e=A*x-b
end
disp('Solutia prin metoda suprarelaxarii')
x
disp('la pasul')
i
disp('cu precizia')
eps
disp('verificare')
A*x

Solutia prin metoda suprarelaxarii

x=

-1.0895

0.6521

0.3652

0.0328

0.1041

la pasul

i = 18

Metoda trapezelor

clc
format short
a=1;
b=3;
n=818;
h=(b-a)/n;
s=(a*log(1+a+a^2))+(b*log(1+b+b^2));
for i=1:n-1
x=a+i*h;
s=s+2*(x*log(1+x+x^2));
end
I=h/2*s

I=

8.1162
Metoda trapezelor pentru integrale duble

clc
a=3;
b=4;
c=0;
d=1;
n=97;
m=128;
h=(b-a)/n;
k=(d-c)/m;
for i=1:n+1
x(i)=a+(i+1)*h;
end
for j=1:m+1
y(j)=c+(j-1)*k;
end
s=0;
for i=1:n
for j=1:m
s=s+(x(i)*y(j)^2+log(x(i)-y(j)))+(x(i)*y(j+1)^2+log(x(i)-y(j+1)))+(x(i+1)*y(j)^2+log(x(i+1)-
y(j)))+(x(i+1)*y(j+1)^2+log(x(i+1)-y(j+1)));
end
end
I=h*k/4*s

I=

2.2697

You might also like