Tải bản đầy đủ - 0 (trang)
3 Xấp xỉ hoá hai chiều

3 Xấp xỉ hoá hai chiều

Tải bản đầy đủ - 0trang

114



Hình 15.6

Sử dụng các dữ liệu này thì độ sâu của một điểm bất kỳ nằm trong khu

vực khảo sát có thể tính đợc dựa vào hàm interp2. Ví dụ:

>> zi = interp2(x,y,z,2.2,3.3)

zi =

1.0392e+002

>> zi = interp2(x,y,z,2.2,3.3,'linear')

zi =

1.0392e+002

>> zi = interp2(x,y,z,2.2,3.3,'cubic')

zi =

1.0419e+002

>> zi = interp2(x,y,z,2.2,3.3,'nearest')

zi =

102

Còng gièng nh trong trêng hợp xấp xỉ hoá một chiều, xấp xỉ hoá hai chiều

cũng có nhiều phơng pháp, mà phơng pháp đơn giản nhất là phơng pháp nối

bằng đoạn thẳng, hay còn gọi là nối tuyến tính. Một lần nữa chúng ta có thể

xấp xỉ hoá để cho đồ thị trở lên mịn hơn với độ phân giải cao hơn:

xi=linspace(0,4,30);

% finer x-axis

yi=linspace(0,6,40);

% finer y-axis

[xxi,yyi]=meshgrid(xi,yi);

% grid of all combinations of xi and yi

zzi=interp2(x,y,z,xxi,yyi,'cubic'); % interpolate

mesh(xxi,yyi,zzi)

% smoothed data

hold on

[xx,yy]=meshgrid(x,y); % grid original data

plot3(xx,yy,z+0.1,'ok')

% plot original data up a bit to show nodes

hold off



115



Hình 15.7

ở đây hàm meshgrid đợc dùng để tạo mảng xấp xỉ hoá bao phủ toàn bộ

những điểm yêu cầu nằm trong điểm khảo sát. Nh trong hình 15.7, hàm

meshgrid thực hiện điều đó bằng cách tạo ra một mảng hai chiều dựa trên các

vector xi và yi, sử dụng mảng này chúng ta có thể dự đoán đợc chỗ nông nhất

của đáy biÓn.

>> zmax = max(max(zzi))

zmax=

108.05

>> [i,j] = find(zmax==zzi);

>> xmax = xi(j)

xmax=

2.6207

>> ymax = yi(j)

ymax=

2.9231

-----------------oOo-------------------



chơng 16

phân tích số liệu

Cho dù việc giải một bài toán tích phân hoặc tính giá trị của một hàm là

tơng đối phức tạp, nhng đối với máy tính thì đó chỉ đơn giản là việc xử lí

các số liệu. Lĩnh vực này của tin học và toán học đợc gọi là xử lí số liệu. Nh bạn

có thể dự đoán, MATLAB cung cấp các công cụ để giải quyết vấn đề này.

Trong chơng trình nàychúng ta xem xét cách sử dụng các công cụ đó.



116

16.1 Vẽ đồ thị

Cho đến thời điểm này thì việc vẽ đồ thị của một hàm vẫn chỉ đơn

giản dựa trên việc tính giá trị của hàm đó tại một số điểm rời rạc, và dùng các

điểm để biểu diễn các hàm tại các giá trị rời rạc đó. Trong nhiều trờng hợp thì

giải pháp này là có thể chấp nhận đợc. Tuy nhiên có một số hàm thì tơng đối

bằng phẳng ở một số khoảng nào đó nhng lại trở lên đột biến ở một số giá trị

nhất định. Sử dụng phơng pháp vẽ truyền thống trong trờng hợp này có thể làm

mất đi tính chân thực của đồ thị. Vì vậy MATLAB cung cấp cho ta một hàm

vẽ đồ thị thông minh, gọi là fplot. Hàm này tính toán một cách cẩn thận hàm

số cần vẽ và đảm bảo một cách chắc chắn rằng tất cả các điểm đặc biệt đợc

biểu diễn trên đồ thị. Hàm flot nhận vào là tên của hàm cần vẽ dới dạng một

chuỗi kí tự, và giá trị cần vẽ dới dạng mảng gồm hai phần tử chứa giá trị đầu và

giá trị cuối.

Ví dụ:

>> fplot('humps',[0 2])

>> title('FPLOT of humps')

Tính các giá trị của hàm humps nằm giữa 0 và 2 và thể hiện đồ thị trong

hình 16.1. Trong ví dụ này humps là một hàm M_file thiết kế sẵn.



Hình 16.1

function [out1,out2] = humps(x)

%HUMPS A function used by QUADDEMO, ZERODEMO and FPLOTDEMO.

%

Y = HUMPS(X) is a function with strong maxima near x = .3



117

%

%

%

%

%

%

%

%

%



and x = .9.



%

%



Copyright (c) 1984-98 by The MathWorks, Inc.

$Revision: 5.4 $ $Date: 1997/11/21 23:26:10 $



[X,Y] = HUMPS(X) also returns X.

HUMPS uses X = 0:.05:1.



With no input arguments,



Example:

plot(humps)

See QUADDEMO, ZERODEMO and FPLOTDEMO.



if nargin==0, x = 0:.05:1; end

y = 1 ./ ((x-.3).^2 + .01) + 1 ./ ((x-.9).^2 + .04) - 6;

if nargout==2,

out1 = x; out2 = y;

else

out1 = y;

end

Hµm fplot lµm viƯc víi bất cứ một hàm M_file nào có một giá trị vào và một

giá trị ra, nghĩa là giống nh hàm humps ở trên, biến ra y trả về một mảng có

cùng kích thớc với biến vào x. Một lỗi thông thờng xảy ra khi sử dụng hàm fplot

cũng giống nh khi sử dụng các hàm phân tích số khác là bỏ quyên dấu nháy

đơn ở tên hàm cần vẽ. Hàm fplot cần dấu nháy đơn đó để tránh nhầm lẫn

tên hàm với các biến trong môi trờng MATLAB. Đối với các hàm đơn giản đợc biểu

diễn bằng một chuỗi các kí tự. Ví dụ y = 2.e-xsin(x) thì hàm fplot có thể vẽ

đợc đồ thị của hàm trên mà không cần phải tạo ra một M_file. Để thực hiện

điều đó chỉ cần viết hàm cần vẽ dới dạng một chuỗi kí tự có sử dụng x là biến

số độc lập.

>> f = '2*exp(-x).*sin(x)';

ở đây hàm f(x) = 2.e-xsin(x) đợc định nghĩa bằng cách sử dụng phép

nhân ma trận.

>> fplot(f,[0 8])

>> title(f), xlabel('x')

Vẽ đồ thị của hàm nằm trong khoảng từ 0 đến 8 tạo ra đồ thị nh hình 16.2.



118



Hình 16.2

Dựa trên những tính năng cơ bản này, hàm fplot có những khả năng rất

mạnh, hãy xem phần trợ giúp trực tuyến của MATLAB để hiểu rõ hơn về cách

dùng hàm này.



16.2 Cực trị của một hàm

Ngoài việc sử dụng phơng pháp vẽ đồ thị để thu đợc những thông tin trực

quan về hàm, chúng ta còn cần phải biết thêm những thông tin về một số

thuộc tính nhất định của hàm. Trong nhiều trờng hợp chúng ta cần phải biết

các cực trị của hàm đó, đó là các cực đại, các cực tiểu. Về mặt toán học thì

cực trị đợc tìm theo phơng pháp giải tích bằng cách tính đạo hàm của hàm

đó và tìm những điểm mà tại đó đạo hàm bằng 0. Điều này rất dễ hiểu nếu

bạn xem lại đồ thị của hàm humps nói trên. Những điểm mà đồ thị của hàm

nhô lên cao là những điểm cực đại, còn những điểm đồ thị lõm xuống thấp

nhất là những điểm cực tiểu. Rõ ràng rằng khi hàm đợc định nghĩa một cách

đơn giản thì phơng pháp giải tích có thể dễ dàng thực hiện đợc, tuy nhiên

đối với một số hàm cho dù việc tính đạo hàm là khá dễ dàng thì việc tìm

nghiệm của đạo hàm thì lại không phải là đơn giản.Trong những trờng hợp

này, và trong những trờng hợp khó có thể tìm ra cách phân tích đạo hàm, thì

cần thiết phải tìm hàm vô cùng về số lợng. MATLAB cung cấp hai hàm thực hiện

việc này, đó là fmin và fmins , hai hàm này tơng ứng tìm giá trị cực tiểu của

các hàm một chiều và hàm n chiều. Ta chỉ quan tâm đến fmin trong phần



119

này. Hơn nữa fmin cã thĨ t×m thÊy trong help trùc tun. Bëi v× max của f(x)

hoàn toàn tơng đơng với min của -f(x) , nên fmin và fmins , cả hai đều đợc

dùng để tìm giá trị lớn nhất và nhỏ nhất.

Để minh hoạ phép cực tiểu hoá và cực đại hoá, hãy xem ví dụ trớc đó một lần

nữa.Từ hình 16.2 có một giá trị cực đại gần x max =0.7 và một giá trị nhỏ nhất

gần xmin =4. Điều này có thÓ cho phÐp ta xem nh xmax=/40.785, xmin=5/43.93.

ViÕt ra mét script-file dùng chế độ soạn thảo thuận tiện và sử dụng fmin để

tìm ra số này:

function ex_fmin.m

%ex_fmin.m

fn='2*exp(-x)*sin(x)';

% define function for min

xmin=fmin(fn,2,5)

% search over range 2
emin=5*pi/4-xmin

x=xmin;

ymin=eval(fn)

fx='-2*exp(-x)*sin(x)';

xmax=fmin(fn,0,3)



% find error

% eval needs x since fn has x

% as its variable

% evaluate at xmin

% definr function for max:

% note minus sign

% search over range 0


emax=pi/4-xmax



% find error



x=xmax;



% eval needs x since fn has x

% as its variable

%evaluate at xmax



ymax=eval(fn)



Chạy M_file này thì kết quả nh sau:

xmin =

3.9270

emin =

1.4523e-006

ymin =

-0.0279

xmax =

3.0000

emax =

-2.2146

ymax =

0.0141

Kết quả này hoàn toàn phù hợp với đồ thị trớc đó. Chú ý r»ng fmin lµm viƯc

nãi chung lµ nh fplot. VÝ dụ này còn giới thiệu hàm eval , hàm này nhận một

xâu kí tự và giải thích nó nh là xâu đợc đánh vào từ dấu nhắc của MATLAB.



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

3 Xấp xỉ hoá hai chiều

Tải bản đầy đủ ngay(0 tr)

×