Professional Documents
Culture Documents
Newton Method Assignment
Newton Method Assignment
1
Mục lục
1 Problems 3
2 Sơ đồ khối 3
2
1 Algorithms
√
Problem 1. Viết thuật toán tính A dựa theo phương pháp Newton. Vẽ sơ đố
khối và code Matlab cho thuật toán đã viết.
Solution. Để tìm căn bậc 2 của số thực dương A, ta giải phương trình
x2 − A = 0. Ở đây, ta dùng phương pháp Newton-Raphson để xấp xỉ nghiệm
của phương trình đó qua các bước sau:
1. Nhập giá trị A > 0 cần tính căn bậc 2, giá trị xấp xỉ ban đầu p0 , sai số
cho phép tol, số bước lặp tối đa trước khi dừng N .
2. Đặt i = 1, với i là biến nguyên.
4. Khi i >= N mà chưa có kết quả thỏa mãn thì xuất thông báo.
2 Sơ đồ khối
Sơ đồ khối.
3
Chú thích
Begin/End
Decision (If)
Declaration
Input
Output
Decision (While)
Process
4
Begin
A, p0 , tol, N, sqrt, i
A, p0 , tol, N
False
A>0 "A must> 0"
True
i=1
False
i <= N "failed"
True
p20 +A
sqrt = 2p0
False
i = i + 1; p0 = sqrt |sqrt − p0 | < tol
True
sqrt, i
End
5
3 Bài tập Newton method
Problem 2. Viết thuật toán tính 1/A dựa theo phương pháp Newton. Vẽ sơ đố
khối và code Matlab cho thuật toán đã viết.
Problem 3. Sử dụng phương pháp Newton để giải các hệ phương trình sau:
(
x2 + y 2 = 1
1.
x2 − y = 0
xyz = 1
2. x2 + 2y 2 + 4z 2 = 7
2
2x + y 3 + 6z = 7
2 2
x + 2 sin (yπ/2) + z = 0
3. 2xy + z = 3
x+y
e − z2 = 0
Solution. Để giải các hệ này bằng phương pháp Newton (giả sử chỉ cần tìm 1
bộ nghiệm) trong Matlab, trước tiên ta viết hàm nrmsnle như sau:
function [X0,i]=nrmsnle(F,V,X0,tol,N)
% syms X0
i=1;
J=jacobian(F,V);
while i<=N
FX=double(subs(F,V,X0));
JX=double(subs(J,V,X0));
Y=linsolve(JX,-FX);
X0=X0+Y;
if (norm(Y)<tol)
return
end
i=i+1;
end
disp(’failed’)
end
Sau đó, ta tiến hành khai báo các biến x, y, z, các giá trị tol, N và sử dụng hàm
vừa viết cho các hệ phương trình.
syms x y z
tol=1e-7;
N=100;
(
x2 + y 2 = 1
1.
x2 − y = 0
6
Va=[x;y];
Fa=[x^2+y^2-1;x^2-y];
X0a=[1;1];
[Xa,na]=nrmsnle(Fa,Va,X0a,tol,N);
disp(’Ta co nghiem xap xi: ’)
disp(Xa)
disp(’Voi so buoc lap da thuc hien: ’)
disp(na)
Được kết quả xấp xỉ là:
x = 0.786151377757423
y = 0.618033988749895
với số bước lặp là 5.
xyz = 1
2. x2 + 2y 2 + 4z 2 = 7
2
2x + y 3 + 6z = 7
Vb=[x;y;z];
Fb=[x*y*z-1;x^2+2*y^2+4*z^2-7;2*x^2+y^3+6*z^2-7];
X0b=[1;1;1];
[Xb,nb]=nrmsnle(Fb,Vb,X0b,tol,N);
disp(’Ta co nghiem xap xi: ’)
disp(Xb)
disp(’Voi so buoc lap da thuc hien: ’)
disp(nb)
Được kết quả xấp xỉ là:
x = −0.999999999999999
y = −1.000000000000000
z = 1.000000000000001 với số bước lặp là 16.
2 2
x + 2 sin (yπ/2) + z = 0
3. 2xy + z = 3
x+y
e − z2 = 0
Vc=[x;y;z];
Fc=[x^2+2*sin(y*pi/2)+z^2;2*x*y+z-3;exp(x+y)-z^2];
X0c=[0;0;1];
[Xc,nc]=nrmsnle(Fc,Vc,X0c,tol,N);
disp(’Ta co nghiem xap xi: ’)
disp(Xc)
disp(’Voi so buoc lap da thuc hien: ’)
disp(nc)
Được kết quả xấp xỉ là:
x = −0.383749364134860
7
y = −4.050704688451621
z = −0.108910696982808 với số bước lặp là 26.
The end
8
Tài liệu
[1] S. R. Otto, J. P. Denier, An introduction to programming and numerical
method in Matlab, Springer, 2005.
[4] https://hongnguyenquanba.wordpress.com/
[5] http://www.mathworks.com/