You are on page 1of 7

1.

Ni suy Newton
function [n,DD]=newton(x,y)
%duavao: x=[x0 x1 ... xn]; y=[yo y1 ... yn]
%lay ra n= h? s? c?a ?a th?c Newton B?c N
N=length(x)-1;
DD= zeros(N+1,N+1);
DD(1:N+1,1)=y';
for k=2:N+1
for m=1:N+2-k
DD(m,k)=(DD(m+1,k-1)-DD(m,k-1))/(x(m+k-1)-x(m));
end
end
a=DD(1,:);
n=a(N+1);
for k=N:-1:1
n=[n a(k)]-[0 n*x(k)];
end
// CHY
clear all, clc
x=[-2 -1 1 2 4];
y=[-6 0 0 6 60];
a=newton(x,y)
yx=polyval(a,2.5)

2.TI U NEWTON
function[x,fx,xx]=newtons(f,x0,tolx,maxiter)
h=1e-4;
tolfun=eps;
EPS=1e-6;
fx=feval(f,x0);
nf=length(fx);
nx=length(x0);
if nf~=nx
error('Kich thuoc cua g va x0 khong tuong thich!');
end
if nargin<4
maxiter=100;
end
if nargin<3
tolx=EPS;
end
xx(1,:)=x0(:).';
for k=1:maxiter
dx=-jacob(f,xx(k,:),h)\fx(:); %-[dfdx]^-1*fx
xx(k+1,:)=xx(k,:)+dx.';
fx=feval(f,xx(k+1,:));
fxn=norm(fx);
if fxn < tolfun||norm(dx)<tolx
break;
end
end
x=xx(k+1,:);
if k==maxiter
fprintf('Ket qua tot nhat sau %d lan lap\n',maxiter)
end
function g=jacob(f,x,h) %Jacobian cua f(x)

if nargin<3
h=1e-4;
end
h2=2*h;
n=length(x);
x=x(:).';
I=eye(n);
for n=1:n
g(:,n)=(feval(f,x+I(n,:)*h)-feval(f,x-I(n,:)*h))'/h2;
end

//
clear all,clc
f=inline('x(1).^2-x(1)*x(2)-4*x(1)+x(2).^2-x(2)');
g=inline('[2*x(1)-x(2)-4) (2*x(2)-x(1)-1)]');
x0 = [0.1 0.1];
tolx=1e-4;
maxiter=100;
[xo,fo]=newtons(g,x0,tolx,maxiter)

3.GII H =PP GAUSSJORDAN


function x=gausjordan(A,B)
NA = size(A,2);
[NB1,NB]=size(B);
if NB1~=NA
error('A va B phai co kich thuoc tuong ung');
end
for i=1:NA
if A(i,i)==0
swaprows(A,i,mx);
end
c=A(i,i);
for j=i:NA
A(i,j)=(A(i,j))/c;
end
B(i)=B(i)/c;
for k=1:NA
if k~=i
c=A(k,i);
A(k,i:NA)=A(k,i:NA)-A(i,i:NA)*c;
B(k)=B(k)-B(i)*c;
end
end
end
x=B;
function v = swaprows(v,i,j)
temp=v(i,:);
v(i,:)=v(j,:);
v(j,:)=temp;
//
clear all,clc
a=[5 3 1; 2 -1 1;1 -1 -1];
b=[9;2;-1];
x=gaus(a,b)

4.GII PTVI PHN =PP EULER


function [X,Y]=euler(fxy,xo,xf,yo,n)
%GPT y'(x)=f(x,y(x)) hay y'=f(x)
if n<2
n=2;
end
h=(xf-xo)/n;
X=zeros(n+1,1);
M=max(size(yo));%so PT-so cot cua ma tran Y
y=zeros(n+1,M);
%dat dieu kien dau
x=xo;
X(1)=x;
y=yo;
Y(1,:)= y';
for i=1:n
if nargin(fxy)>1;
k1=h*feval(fxy,x,y);
else
k1=h*feval(fxy,x);
end
y=y+k1;
x=x+h;
X(i+1)=x;
Y(i+1,:)=y';
End
function dy= f1(t,y)
dy=zeros(3,1);
dy(1)=y(2)*y(3);
dy(2)=-y(1)*y(3);
dy(3)=-0.51*y(1)*y(2);

clear all,clc
a=3;
b=5;
y=@f1;
ya=[-2 0 2]';
m=200;
[x,y] = euler(y,a,b,ya,m)
plot(x,y);

5.GII PT BNG PP GAUSS-SEIDEL


function x=gauss_seidel(a,b,x0,kmax)
%tim nghiem Ax=B bang gaussseidel
if nargin<4
kmax=100;
end
if nargin<3
x0=zeros(size(b));
kmax=100;
end

na=size(a,1);
x=x0;
for k=1:kmax
x(1,:)=(b(1,:)-a(1,2:na)*x(2:na,:))/a(1,1);
for m=2:na-1
tmp=b(m,:)-a(m,1:m-1)*x(1:m-1,:)-a(m,m+1:na)*x(m+1:na,:);
x(m,:)=tmp/a(m,m);
end
x(na,:)=(b(na,:)-a(na,1:na-1)*x(1:na-1,:))/a(na,na);
err=sqrt(x-x0)'*(x-x0);
if err<eps
break;
end
x0=x;
end
if k==kmax
fprintf('Khong hoi tu sau %d lan lap',kmax);
else
fprintf('Hoi tu sau %d lan lap',k);
end

//
b=[1 -1]';
a=[3 2;1 2];
x0=[0 0]';
x=gauss_seidel(a,b,x0,20)

6.NI SUY LAGRANGE


function [l,L]=lagrange(x,y)
n=length(x)-1;
l=0;
for m=1:n+1
p=1;
for k=1:n+1
if k~=m
p=conv(p,[1-x(k)])/(x(m)-x(k));
end
end
L(m,:)=p;
l=l+y(m)*p;
%a=x(1,1):0.2:x(1,n);
%hamso=polyval(l,a);
%plot(x,y,'o',a,hamso);
end
clear all, clc
x=[-2 -1 1 2];
y=[-6 0 0 6];
l=largrange(x,y);
%yx=polyval(l,2.5)

7.PHN TCH MA TRN CHOLESKI


4

function L=choleski(A)
%phan tich ma tran A thanh tich LL'
f=posdef(A);
if f==0
error('Ma tran khong xac dinh duong!');
return
end
n=size(A,1);
for j=1:n
temp = A(j,j) - dot(A(j,1:j-1),A(j,1:j-1));
if temp < 0.0
error('Ma tran khong xac dinh duong');
end
A(j,j)=sqrt(temp);
for i=j+1:n
A(i,j)=(A(i,j)-dot(A(i,1:j-1),A(j,1:j-1)))/A(j,j);
end
end
L=tril(A);
function f=posdef(A)
isposdef = true;
for i=1:length(A)
if (det(A(1:i,1:i))<=0)
isposdef=false;
break;
end
end
f=isposdef;%0 neu sai,1 neu dung.

Gii h bng choleski


function x=choleskisol(A,b)
%giai he pt bang thuat toan choleski
%cu phap:x=choleskisol(a,b)
n=size(A,1);
L=choleski(A);
disp(L);
r=L';
y(1,:)=b(1)/L(1,1);
for m=2:n
y(m,:)=(b(m)-L(m,1:m-1)*y(1:m-1,:))/L(m,m);
end
x(n,:)=y(n)/r(n,n);
for m=n-1:-1:1
x(m,:)=(y(m)-r(m,m+1:n)*x(m+1:n,:))/r(m,m);
end

8.GIA H BNG LP RICHARDSON


function x = richardsoniter(a, b, x, maxiter, tol)
d = eig(a);
k = length(d);
alfa1 = abs(2*real(d(1))/(abs(d(1))^2));
for j = 2:k
alfa = abs(2*real(d(j))/(abs(d(j))^2));
if alfa < alfa1
alfa1 = alfa;
end
end

omega = alfa1/2;
for i = 1:maxiter
r = b - a*x;
x = x + omega*r;
if norm(r) < tol
break;
end
end
i
end

//
clear all, clc
a = [ 10 1 1;1 10 2; 2 2 10];
b = [12
13 14]';
x = [ 0 0 0]';
maxiter = 50;
tol = 1e-6;
x = richardsoniter(a, b, x, maxiter, tol)

9.PP LP N
function [x,err,xx]=simpiter(g,x0,tolx,maxiter)
%GPT x=g(x) tu x0 bang cach lap
%vao:g,x0=ham va gia tri dau
%tolx = sai so mong muon
%maxiter = so lan lap max
%ra: x= nghiem
%err = sai so|x(k)-x(k-1)|
%xx = cac gia tri trung gian
if nargin<4
maxiter=100;
end
if nargin<3
tolx = 1e-6
end
xx(1)=x0;
for k=2:maxiter
xx(k)=feval(g,xx(k-1));
err = abs(xx(k) - xx(k-1));
if err < tolx
break;
end
end
x=xx(k);
if k==maxiter
fprintf('khong hoi tu sau %d lan lap\n',maxiter);
else
fprintf('hoi tu sau %d lan lap',k);
end
//

clear all, clc


f=inline('-0.5*((x-1).^2-3)');
[x,ss,xx] = simpiter(f,0.5,.00001,200)

10.Tinh dao ham cap n cua f tai x


function df = diffn(f,n,x)
%Tinh dao ham cap n cua f tai x
if n>5
error('Ham chi tinh duoc dao ham den bac 5');
return;
end
N=5;
xo=x;
T(1)=feval(f,xo);
h=0.005;
tmp=1;
for i = 1:N
tmp = tmp*h;
c = difapx(i,[-i i]);%he so cua dao ham
dix = c*feval(f,xo + [-i:i]*h)';
T(i+1) = dix/tmp; % dao ham
end
df=T(n+1);
h=0.005;
tmp=1;
for i=1:N
tmp=tmp*h;
c = difapx(i,[-i i]);%he so cua dao ham
dix = c*feval(f,xo + [-i:i]*h)';%h^i;% dao ham
T(i+1) = dix/tmp; % he so chuoi taylor
end
df=T(n+1);

//clear all,clc
F=inline(x.^2+atan(x),x)
Df=diffn(f,5,0)

You might also like