Tải bản đầy đủ (.docx) (6 trang)

Báo cáo Phương Pháp tính thầy Phùng Trọng Thực Đai Học BK HCM Bai 18

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (197.16 KB, 6 trang )

Đề bài: Sử dụng một phần mềm máy tính trợ giúp người dùng nhập vào toạ độ 6

điểm  1 1  ,  2 2  ,...,  6 6  trong mặt phẳng và xuất ra giá trị A và B sao
cho tổng bình phương khoảng cách từ 6 điểm này đến đường thẳng Y = A + BX là
nhỏ nhất. Yêu cầu này có gì khác phương pháp bình phương nhỏ nhất học trong
chương trình?

X ,Y

X ,Y

X ,Y

Trả lời:
 Thuật toán và source code

X ,Y X ,Y
X ,Y
- Trong mặt phẳng xOy cho 6 điểm  1 1  ,  2 2  ,...,  6 6  và đường
thẳng Y = A + BX. Bài toán tìm A,B sao cho tổng bình phương khoảng cách
từ 6 điểm này đến đường thẳng Y = A + BX là nhỏ nhất đưa và về việc tìm
cực tiểu của phiến hàm
6

 A  Bxk  yk 

g  A,B   �
k 1

2


1  B2

� min

- Bài toán quy về việc tìm cực tiểu của hàm hai biến
dừng được xác định từ hệ

g  A,B  . Tọa độ điểm


�g'  A   0

�g'  B   0
-

Việc xác định

g'  A 



g'  B 

không quá khó, ta sử dụng công thức:
6

 A  Bxk  yk 

g  A,B   �
k 1


1  B2

- Ta chạy vòng lặp từ 1 đến 6 để tính tổng trên:
fAB = 0;
f = (yk - A - B*xk)^2/(1+B^2);
for i=1:length(x)
fAB = fAB + subs(f,{xk yk},{x(i) y(i)});
end

2


- Ta tính

g'  A 



g'  B 

f1 = diff(fAB,A);
f2 = diff(fAB,B);
- Dùng lệnh solve để tìm tọa độ các điểm dừng
ng = solve(f1,f2,A,B);
6

 A  Bxk  yk 




- Sau khi có tọa độ các điểm dừng, ta thế vào k 1
gmin = inf;
for i = 1:length(ng.A)
fab = subs(f,{A B},{ng.A(i) ng.B(i)});
sum = 0;
for j = 1:length(x)
sum = sum + subs(fab,{xk yk},{x(j) y(j)});
end
if gmin > sum
gmin = sum;
Amin = ng.A(i);
Bmin = ng.B(i);
end
end
- Vẽ hình để kiểm chứng kết quả
hold on
for i=1:length(x)
plot(x(i),y(i),'-*r','Markersize',10);
end
X = linspace(min(x)-1,max(x)+1,10);

1  B2

2

tìm cực tiểu.


plot(X,A+B*X,'b');

- Xuất kết quả:
fprintf('Y = %.4f + %.4fX\n',A,B);
 Source code
%ppt
clc; clear;
syms A B yk xk xk2 yk2 xkyk;
disp('Nhap vao toa do 6 diem');
disp('Nhap hoanh do co dang: x = [x1 x2 x3 x4 x5 x6]')
x = input('x = ');
disp('Nhap tung do co dang: y = [y1 y2 y3 y4 y5 y6]')
y = input('y = ');
% x1 = input('Nhap x1: ');
% y1 = input('Nhap y1: ');
% x2 = input('Nhap x2: ');
% y2 = input('Nhap y2: ');
% x3 = input('Nhap x3: ');
% y3 = input('Nhap y3: ');
% x4 = input('Nhap x4: ');
% y4 = input('Nhap y4: ');
% x5 = input('Nhap x5: ');
% y5 = input('Nhap y5: ');
% x6 = input('Nhap x6: ');
% y6 = input('Nhap y6: ');
% x = [x1 x2 x3 x4 x5 x6];
% y = [y1 y2 y3 y4 y5 y6];
fAB = 0;
f = (yk - A - B*xk)^2/(1+B^2);
for i=1:length(x)
fAB = fAB + subs(f,{xk yk},{x(i) y(i)});
end

f1 = diff(fAB,A);


f2 = diff(fAB,B);
ng = solve(f1,f2,A,B);
gmin = inf;
for i = 1:length(ng.A)
fab = subs(f,{A B},{ng.A(i) ng.B(i)});
sum = 0;
for j = 1:length(x)
sum = sum + subs(fab,{xk yk},{x(j) y(j)});
end
if gmin > sum
gmin = sum;
Amin = ng.A(i);
Bmin = ng.B(i);
end
end
A = double(Amin);
B = double(Bmin);
hold on
for i=1:length(x)
plot(x(i),y(i),'-*r','Markersize',10);
end
X = linspace(min(x)-1,max(x)+1,10);
plot(X,A+B*X,'b');
fprintf('Y = %.4f + %.4fX\n',A,B);

Trả lời câu hỏi: Yêu cầu này có gì khác phương pháp bình phương nhỏ nhất học
trong chương trình?

Phương pháp trình bày ở trên và phương pháp bình phương nhỏ nhất đều có mục
đích tìm cực tiểu của hàm mục tiêu .Đối với hàm số f (x) = A + Bx được học trong

g  A,B    A  Bxk  yk 

2

chương trình có có hàm mục tiêu là
đơn giản hơn so với
hàm mục tiêu của phương pháp trình bày ở trên , cụ thể hàm mục tiêu có dạng


g  A,B 

 A  Bxk  yk 


2

1  B2

.Việc

này dẫn đến tìm A,B khó hơn , sinh ra thêm một

điểm dừng.

Ví dụ :
1)
X = [1.3


1.8 1.9

2.5 2.8 3.3]

Y = [1.6

1.9 2.5

2.7 3.5 3.9]

2)


X = [2.5 2.8 3.4 3.66 4.5 4.8]
Y = [1.8 2.68 3.5 3.7 4.98 5.2]



×