- Back to Home »
- Matlab »
- Matlab – Giải thuật trung điểm midpoint
Posted by : Unknown
17 September 2014
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