Professional Documents
Culture Documents
10 Thuat Giai
10 Thuat Giai
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)
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);
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)
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.
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(x.^2+atan(x),x)
Df=diffn(f,5,0)