Showing posts with label Matlab. Show all posts
Matlab - Phương pháp newton cho tính căn bậc 2
Matlab - Phương pháp newton cho tính căn bậc 2
I. Phương pháp newton
Trong toán học có một số vấn đề mà
không thể giải quyết được bằng cách biến đổi đại số đơn giản.
Ví dụ ,để tìm số gần đúng của căn
bậc hai, mà không dùng đến trong máy
tính. Chúng ta không thể giải quyết vấn đề này bằng các phương pháp đại số
thông thường đã học.
Sau đây là một giải pháp tìm nghiệm
gần đúng của phương trình:phương pháp newton
Cho hàm f(x) có đồ thị như hình vẽ.
Bây giờ là phương
pháp newton đi tìm nghiệm gần đúng của phương trình f(x)=0
Gọi nghiệm cần tìm là
x=r.Khi đó có thể lấy một x1 bất kỳ gần với r.Kẻ tiếp tuyến của đồ
thị tại f(x1).Như hình vẽ tiếp tuyến giao với Ox tại x2.
Ta thấy x2 dần
đến r.
Ta có thể cm dể dàng :
II. Ví dụ dùng matlab
Viết mã chương trình sử dụng vòng lặp while để
tính gần đúng căn 2 dựa trên phương pháp newton dùng hệ thức đệ quy:
Qúa trình lặp thực hiện cho đến khi xn
thay đổi chỉ 0.0001.
Bài làm :
clc; clear
all; close all;
x0=2;
x1=1.5;
while(x0-x1)>0.0001
x0=x1;
x1=(x0^2+2)/(2*x0)
end;
disp('Gia tri
cua can 2 tinh theo pp gan dung la: ')
x1
Matlab – Giải thuật trung điểm midpoint
I. Nội dung giải thuật trung điểm midpoint
Xét trung điểm của
đoạn AB (M)
Nếu M ở trên đoạn thẳng
AB thì chọn B còn
M ở dưới đoạn thẳng
AB chọn A
Công thức đơn giản
hơn, tạo được các điểm tương tự như với Bresenham
d = f(xi + 1, yi +
1/2) là trung điểm của đoạn AB
So sánh hay kiểm tra
M sẽ được thay bằng việc xét giá trị d.
- d
> 0 điểm B được chọn khi đó yi+1 = yi - Nếu d < 0 điểm A được chọn khi đó yi+1 = yi + 1
- Trường hợp d = 0
chúng ta có thể chọn điểm bất kỳ hoặc A, hoặc B.
Sử dụng phương pháp
biểu diễn không tường minh
f(x,y)= ax +by +c =0
(1)
dx =x2-x1 dy =y2-y1
Biểu diễn tường
minh:
y= (dy/dx)x +B hay
f(x,y)=0= xdy - ydx
+Bdx (2)
So sánh (1) và (2)
a=dyb=-dx c= Bdx
Có f(x,y)=0 với mọi
(x,y) thuộc đường thẳng
Đặt
di=f(xi+1,yi+1/2) = a(xi+1) +b(yi +1/2) +c
+ Nếu chọn A
(d<0) thì M sẽ tăng theo 2 hướng x,y
di+1=f(xi+2,yi+3/2)
= a(xi+2) +b(yi +3/2) +c
di+1 – di = a+b
Hay di+1 = di + dy -
dx
+ Nếu chọn B
(d>0) thì M sẽ tăng theo x
di+1=f(xi+2,yi+1/2)
= a(xi+2) +b(yi +1/2) +c
di+1 - di = a
Hay di+1 = di + dy
Tính d1 ?
d1 = f(x1+1,y1+1/2)
= a(x1+1) +b(y1 +1/2) +c = ax1 +by1 +c +a
+1/2 b = f(x1,y1) +a +b/2
Có (x1,y1) là điểm bắt
đầu, nằm trên đoạn thẳng nên f(x1,y1) = 0
Vậy d1 = a+ b/2 = dy
- dx/2
II. Ví dụ:
Viết mã chương trình
sử dụng vòng lặp để tính tích phân:
bằng phương pháp
midpoint với số lượng điểm N = 100.
Code:
a=-1.5; % Điểm cận dưới
b=1.5; % Điểm cận trên
N=100; % Số điểm tính tích phân
h=(b-a)/N;
tp=0;
for k=1:N
x=a+(k-1/2)*h;
F=4*x^3*2*exp(x)*cos(x);
tp=tp+F;
end
tp=tp*h;
disp('Gia tri tich phan tinh theo phuong phap midpoint la: ')
tp




