MATLAB – phần mềm nổi tiếng của công ty MathWorks, là một ngôn ngữ hiệu năng cao cho tính toán kỹ thuật như được viết trong logo của phần mềm này. Nó tích hợp tính toán, hiện thị và lập trình trong một môi trường dễ sử dụng. Các ứng dụng tiêu biểu của MATLAB bao gồm:
Hỗ trợ toán học và tính toán
Phát triển thuật toán
Mô hình, mô phỏng
Phân tích, khảo sát và hiển thị số liệu
Đồ họa khoa học và kỹ thuật
Phát triển ứng dụng với các giao diện đồ họa.
10 trang |
Chia sẻ: lylyngoc | Lượt xem: 2157 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Phát triển công cụ tin học trợ giúp cho giảng dạy, nghiên cứu và ứng dụng Toán học, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
MATLAB VỚI MÔN HỌC CÁC PHƯƠNG PHÁP SỐ
Đặng Quang Á
Viện Công nghệ thông tin
Viện khoa học và công nghệ Việt nam
Trong báo cáo này chúng tôi đề cập đến việc sử dụng MATLAB trong việc giảng dạy môn Các phương pháp số và giới thiệu về một thư viện các chương trình/hàm mã nguồn phục vụ cho môn học đó.
1. Giới thiệu sơ lược về MATLAB
MATLAB – phần mềm nổi tiếng của công ty MathWorks, là một ngôn ngữ hiệu năng cao cho tính toán kỹ thuật như được viết trong logo của phần mềm này. Nó tích hợp tính toán, hiện thị và lập trình trong một môi trường dễ sử dụng. Các ứng dụng tiêu biểu của MATLAB bao gồm:
Hỗ trợ toán học và tính toán
Phát triển thuật toán
Mô hình, mô phỏng
Phân tích, khảo sát và hiển thị số liệu
Đồ họa khoa học và kỹ thuật
Phát triển ứng dụng với các giao diện đồ họa.
Tên của phần mềm MATLAB bắt nguồn từ thuật ngữ “Matrix Laboratory”. Đầu tiên nó được viết bằng FORTRAN để cung cấp truy nhập dễ dàng tới phần mềm ma trận được phát triển bởi các dự án LINPACK và EISPACK. Sau đó nó được viết bằng ngôn ngữ C trên cơ sở các thư viện nêu trên và phát triển thêm nhiều lĩnh vực của tính toán khoa học và các ứng dụng kỹ thuật.
Ngoài MATLAB cơ bản với các khả năng rất phong phú sẽ được đề cập sau, phần mềm MATLAB còn được trang bị thêm các ToolBox – các gói chương trình (thư viện) cho các lĩnh vực ứng dụng rất đa dạng như xử lý tín hiệu, nhận dạng hệ thống, xử lý ảnh, mạng nơ ron, logic mờ, tài chính, tối ưu hóa, phương trình đạo hàm riêng, sinh tin học,... Đây là các tập hợp mã nguồn viết bằng chính MATLAB dựa theo các thuật toán mới, hữu hiệu mà người dùng có thể chỉnh sửa hoặc bổ sung thêm các hàm mới.
MATLAB được thiết kế để giải các bài toán bằng số chứ không nhằm mục đích chính là tính toán ký hiệu như MATHEMATICA và MAPLE. Tuy nhiên, trong MATLAB cũng có thể tính toán ký hiệu được nhờ các hàm trong Symbolic Math ToolBox.
Một số đặc trưng chính của MATLAB:
MATLAB là ngôn ngữ thông dịch. Vì thế nó có thể làm việc ở hai chế độ: tương tác và lập trình. Trong chế độ tương tác MATLAB thực hiện từng lệnh được gõ trong cửa sổ lệnh sau dấu nhắc lệnh và kết quả tính toán được hiện ngay trong cửa sổ này, còn đồ thị được hiện trong một cửa sổ khác. Lệnh tương tác có thể là đơn giản, thí dụ tính sin(1.5) hoặc vẽ fplot('sin(1 ./ x)', [0.01 0.1]), có thể là cấu trúc điều kiện, thí dụ if x<=0; y=0; else; y=1; end hoặc các cấu trúc lặp xác định và không xác định. Trong chế độ lập trình một tập lệnh được soạn thảo và ghi thành một têp đuôi .m (m-file). Các hàm cũng được tổ chức thành các m-file. Một chương trình có thể gồm nhiều m-file. Để chạy chương trình chỉ cần gõ tên m-file chính trong cửa sổ lệnh rồi Enter.
Các hàm trong MATLAB cơ bản (không kể các thư viện chuyên dụng được gọi là các ToolBox) được chia làm 2 loại: hàm trong và hàm ngoài. Các hàm trong là các hàm được cài đặt sẵn (built-ins) tức là tồn tại dưới dạng mã nhị phân nên ta không thể xem được mã nguồn của chúng, thí dụ các hàm sin, sqrt, log, clear, clc,.... Đây là các hàm hay được sử dụng hoặc các hàm đòi hỏi nhiều thời gian xử lý. Các hàm ngoài là các hàm tồn tại dưới dạng mã nguồn mà người dùng có thể tham khảo hoặc chỉnh sửa, bổ sung khi cần thiết, thí dụ log10, ode23, fzero,...
Phần tử dữ liệu chính của MATLAB là các ma trận (mảng) mà kích thước của chúng không cần khai báo trước như trong các ngôn ngữ lập trình khác. Tuy nhiên, để tăng tốc độ xử lý cần báo trước cho MATLAB biết kích thước tối đa của mảng để phân bổ bộ nhớ bằng một lệnh gán, chẳng hạn A(20,30)=0.
Các khả năng chính của MATLAB cơ bản:
Thực hiện các tính toán toán học bao gồm: ma trận và đại số tuyến tính, đa thức và nội suy, phân tích số liệu và thống kê, tìm cực trị của hàm một biến hoặc nhiều biến, tìm nghiệm của phương trình, tính gần đúng tích phân, giải phương trình vi phân.
Đồ họa 2 chiều và 3 chiều: MATLAB cung cấp rất nhiều các hàm đồ họa, nhờ đó ta có thể nhanh chóng vẽ được đồ thị của hàm bất kỳ 1 biến hoặc 2 biến, vẽ được các kiểu mặt, các contour, trường vận tốc,...Ngoài ra MATLAB còn vẽ rất tốt các đối tượng 3 chiều phức tạp như hình trụ, hình cầu, hình xuyến,..và cung cấp khả năng xử lý ảnh và hoạt hình.
Xây dựng giao diện người dùng: với MATLAB 7 người dùng có thể dễ dàng xây dựng giao diện gồm các thực đơn, nút lệnh, hộp thoại, hộp chọn,...mà không cần phải viết mã như các phiên bản trước đây.
2. MATLAB với môn học Các phương pháp số
Nhờ có các khả năng và ưu thế như đã nói ở trên MATLAB được cộng đồng hàn lâm trên thế giới chấp nhận rộng rãi như một công cụ phục vụ cho giảng dạy, nghiên cứu toán học và phát triển các ứng dụng kỹ thuật. Hơn 3500 trường đại học nhất là các trường đại học kỹ thuật đã đưa MATLAB vào giảng dạy và nghiên cứu. Hiện nay đã có trên 700 đầu sách về MATLAB dành cho giáo viên, sinh viên và các nhà chuyên môn. Trên Internet các tài liệu có liên quan đến MATLAB rất nhiều. Nếu vào trang Web http:\\www.google.com.vn tìm kiếm theo từ khóa “MATLAB” ta sẽ tìm thấy nhiều triệu kết quả có liên quan, trong đó có nhiều tài liệu giới thiệu và dạy về MATLAB. Thí dụ: A practical introduction to MATLAB taị địa chỉ ,MATLAB summary and Tutorial tại
Ở Việt nam, theo tôi được biết, MATLAB đã được đưa vào giảng dạy cho sinh viên, học viên cao học hoặc giới thiệu tại một số khoa, trường đại học và cũng đã xuất bản một số đầu sách về MATLAB dành cho sinh viên các khối khoa học và kỹ thuật. Đã có nhiều sinh viên ngành Toán và các ngành kỹ thuật sử dụng MATLAB làm đồ án tốt nghiệp. Tuy nhiên mức độ phổ biến của MATLAB chưa phải là cao.
Với ưu thế về tính toán số trị MATLAB rất thích hợp cho việc giảng dạy môn học “Các phương pháp số”- môn học không thể thiếu được đối với sinh viên toán, lý, công nghệ thông tin và các ngành kỹ thuật. Việc sử dụng MATLAB để lập trình các thuật toán của môn học này có cái lợi là đơn giản, dễ dàng vẽ các đồ thị để hiện thị kết quả và kiểm tra kết quả các chương trình tự viết so với kết quả của các hàm đã cài đặt sẵn vì MATLAB cơ bản chứa đựng rất nhiều các hàm tính toán toán học như đã nói trong mục 1. Nhận thức được điều này, trong quá trình giảng dạy môn học “Các phương pháp số” tôi đã khuyến cáo sinh viên khai thác và sử dụng MATLAB để lập trình thay cho sử dụng ngôn ngữ truyền thống là PASCAL hoặc C. Trong giáo trình “Các phương pháp số” viết cuối năm 2003 nhưng chưa xuất bản tôi đã minh họa các thuật toán bằng các chương trình viết bằng MATLAB và trong phần Phụ lục tôi đã cung cấp một số kiến thức cơ bản về phần mềm này làm cơ sở ban đầu để sinh viên có thể tự học thêm về MATLAB. Giáo trình này tôi cũng đã cho photocopy để phổ biến.
Hiện nay trên thế giới người ta đã xuất bản khá nhiều sách về các phương pháp số với các chương trình viết bằng MATLAB. Các chương trình này thường được tổ chức thành các ToolBox và cung cấp miễn phí trên Internet. Dưới đây là danh sách một số sách và địa chỉ các Web site nơi giới thiệu hoặc có thể tải về các ToolBox –phần mềm đồng hành với sách:
Gerald Recktenwald, Numerical methods with MATLAB, Prentice Hall, 2000. Companion Software: nmm (Numerical methods with MATLAB) ToolBox.
Shoichiro Nakamura, Numerical Analysis and Graphic Visualization with MATLAB, Prentice Hall, 1996. Companion Software: Numerical Analysis and Graphic Visualization Toolbox. ftp://ftp.mathworks.com/pub/books/nakamura/,
Charles F. Van Loan, Introduction to Scientific Computing: A Matrix-Vector Approach Using MATLAB, Prentice Hall, 1997, ftp://ftp.cs.cornell.edu/pub/cv.
David Kincaid & Ward Cheney,Numerical Analysis, 2e, Brooks/Cole Publishing Company, 1996 ftp://ftp.brookscole.com/brookscole/Mathematics/Texts_by_Author/Kincaid_Cheney/matlab.
John H. Mathews, Numerical Methods for Mathematics, Science, and Engineering, 2e, Prentice Hall, 1992, ftp://ftp.mathworks.com/pub/books/mathews/
George Lindfield & John Penny, Numerical Methods Using MATLAB, Prentice Hall/Ellis Horwood, 1995,
G. J. Borse, Numerical Methods With MATLAB: A Resource for Scientists and Engineers, PWS Publishing Company, 1997,
Gunnar Backstrom, Practical Mathematics Using MATLAB 5, Studentlitteratur, 1997
G.W. Recktenwald Numerical Methods with MATLAB: Implementations and Applications, Prentice Hall, 2000. www.me.pdx.edu/~gerry/nmm
Paolo Brandimarte, Numerical Methods in Finance: A MATLAB-Based Introduction, Wiley, 2001.
Laurene V. Fausett, Applied Numerical Analysis Using Matlab, Prentice Hall, 1999.
Won Young Yang, Wenwu Cao, Tae-Sang Chung, John Morris, Applied Numerical Methods Using MATLAB, Wiley, 2005.
Howard Wilson, Louis H. Turcotte, David Halpern, Advanced Mathematics and Mechanics Applications Using MATLAB, Third Edition, CRC Press, 1998.
Trong phần tiếp theo chúng tôi giới thiệu sơ lược về Numerical methods with MATLAB ToolBox –nmm của Recktenwald.
3. Thư viện chương trình NMM ToolBox về các phương pháp số
NMM ToolBox là một thư viện chứa khoảng 150 chương trình/hàm viết bằng MATLAB và 40 tập dữ liệu từ các ứng dụng rất đa dạng được tổ chức thành các thư mục: data, eigen, errors, fit, intergrate,interact, interpolate, linalg, ode, program, rootfind and utils. Các chương trình/hàm đều cho dưới dạng mã nguồn MATLAB nên người dùng có thể xem để tham khảo thuật toán và tự mình chỉnh sửa theo ý muốn hoặc dựa vào đó để viết các hàm khác. Trừ thư mục data chứa các tệp dữ liệu mẫu cho các thí dụ, thư mục utils chứa một số hàm tiện ích và thư mục interact chứa một số hàm và thí dụ demo về các loại đường, mặt, contour, còn các thư mục khác chứa các hàm và các thí dụ minh họa về giá trị riêng, sai số, đường phù hợp, tích phân số, nội suy, hệ phương trình đại số tuyến tính và phi tuyến, giải số phương trình vi phân thường, tìm nghiệm của phương trình phi tuyến và một số chương trình tính toán khác. Dưới đây trích chọn một số hàm trong các thư mục của NMM ToolBox thể hiện các thuật toán rất cơ bản có trong bất kỳ giáo trình phương pháp tính nào.
Thư mục Intergrate:
Hàm I = trapezoid(fun,a,b,npanel) và hàm I = simpson(fun,a,b,npanel) tính gần đúng tích phân theo công thức hình thang và công thức Simpson tương ứng của hàm có tên là fun từ a đến b với số đoạn chia đều là npanel.
Hàm demoTrap và hàm demoSimp không tham số minh họa sử dụng hàm trapezoid và simpson tính tích phân của hàm số x*exp(-x) trên đoạn [0,5] với các số đoạn chia là 2 4 8 16 32 64 128 256.
Các hàm I = plotTrapInt(fun,a,b,npanel)và plotSimpInt(fun,a,b,nsub) cho biểu diễn đồ họa các công thức hình thang và Simpson.
Hàm [x,w] = GLNodeWt(n) tính các nút và trọng số của công thức cầu phương Gauss-Legendre bậc n.
Hàm I = gaussQuad(fun,a,b,npanel,nnode) tính gần đúng tích phân theo công thức Gauss-Legendre với số nút trên mỗi đoạn con là nnode.
Hàm demoGauss minh họa tính tích phân của hàm số x*exp(-x) trên đoạn [0,5] bằng công thức Gauss-Legendre.
Hàm compIntRules không tham số so sánh các công thức hình thang, Simpson và Gauss-Legendre trên thí dụ hàm x*exp(-x) trên đoạn [0,5].
Thí dụ áp dụng: Trong cửa sổ lệnh thực hiện lệnh fun = inline('x.*exp(-x)'), rồi lệnh plotTrapInt(fun,0,1,5) MATLAB sẽ tính được tích phân bằng 0.2609 và vẽ hình dưới đây
Hình 1. Minh họa công thức hình thang
Thư mục Interpolate
Hàm yi = lagrint(x,y,xi) tính nội suy hàm cho bởi bảng giá trị (x,y) tại xi bằng đa thức nội suy Lagrange.
Hàm [yhat,dy,cout] = newtint(x,y,xhat) tính nội suy bởi đa thức Newton.
Hàm linterp(x,y,xi)nội suy từng mẩu tuyến tính.
Hàm [yhat,aa,bb,cc,dd] = splint(x,y,xhat,opt1,opt2) nội suy bởi hàm spline bậc 3 với các loại điều kiện biên khác nhau.
Hàm compSplinePlot demo hàm spline với các loại điều kiện biên khác nhau.
Hình 2. Spline bậc 3 với các điều kiện biên khác nhau
Hình 2
Thư mục RootFind
Hàm r = bisect(fun,xb,xtol,ftol) tìm nghiệm của phương trình f(x)=0 bằng phương pháp chia đôi.
Hàm r = newton(fun,x0,xtol,ftol)tìm nghiệm của phương trình f(x)=0 bằng phương pháp Newton.
Hàm xm = demoBisect(xleft,xright,n) minh họa phương pháp chia đôi giải phương trình x - x^(1/3) – 2 = 0.
Hàm x = demoNewton(x0,n) minh họa phương pháp Newton.
Thư mục Fit
Hàm [c,R2] = linefit(x,y)tìm đường thẳng phù hợp (hồi quy tuyến tính).
Hàm lineTest minh họa đường thẳng phù hợp.
Hàm c = xexpfit(x,y) tìm đường phù hợp dạng y = c(1)*x*exp(c(2)*x) bằng phương pháp bình phương cực tiểu.
Hàm demoXexp(n)minh họa hàm trên
Hình 3. Đường thẳng phù hợp
Hình 4. Đường y = c1*x*exp(c2*x) phù hợp
Thư mục Linalg
Hàm x = GEshow(A,b,ptol)chỉ ra các bước giải hệ phương trình Ax=b bằng phương pháp khử Gauss không trụ xoay.
Hàm C = Cholesky(A)tìm khai triển Cholesky của ma trân đối xứng, xác định dương A = C'*C.
Hàm [L,U] = luNopiv(A,ptol)tìm khai triển A = L*U không xoay.
Hàm [L,U,pv] = luPiv(A,ptol) tìm khai triển A = L*U có xoay
Thư mục ode
Hàm [t,y] = odeEuler(f,tn,h,y0) giải số phương trình vi phân dy/dt=f(t,y) trên đoạn [0, tn] với điều kiện đầu y(0)=y0, bước lưới h bằng phương pháp Euler.
Hàm [t,y] = odeRK4(f,tn,h,y0)- phương pháp Runge-Kutta bậc 4.
Hàm demoEuler(h)minh họa phương pháp Euler giải phương trình dy/dt = t - 2*y; y(0) = 1.
Hàm demoRK4(h) minh họa phương pháp Runge-Kutta bậc 4 giải phương trình dy/dt = t - 2*y; y(0) = 1.
Hàm [t,y] = odeRK4sys(diffeq,tn,h,y0)giải hệ phương trình vi phân thường với véc tơ hàm vế phải diffeq.
Hàm demoSystem minh họa phương pháp giải hệ phương trình vi phân thường.
Để có thể hiểu các hàm nêu trên và các hàm khác trong NMM ToolBox chỉ cần nắm được một số quy ước về cách viết ma trận, trích ma trận, véc tơ, một số hàm cài đặt sẵn như: sum, max, min, prod, norm, sort, length, size (cho kích cỡ ma trận), zeros (tạo ma trận với các phần tử 0), linspace (tạo véc tơ các điểm cách đều), eye (tạo ma trận đơn vị), tril và triu (trả về ma trận tam giác dưới và trên), inline (xây dựng hàm số dạng dòng), feval (tính giá trị của hàm) , một số hàm đồ họa như plot, subplot, set, fill, xlabel, ylabel, legend, title.
4. Một số nhận xét kết luận
Đối với việc học tập và nghiên cứu môn Phương pháp số nói riêng và các môn Toán ứng dụng nói chung như Tối ưu hóa, Xác xuất-Thống kê thì MATLAB là một môi trường lý tưởng vì nó đơn giản, dễ sử dụng, hỗ trợ nhiều hàm cài đặt sẵn và rất nhiều hàm dưới dạng mã nguồn (của MATLAB cơ bản và các ToolBox Optimization, Statistics, Spline, Wavelet, Curve Fitting) cũng như hỗ trợ đồ họa phong phú. Người sử dụng không phải mất thời gian vào việc lập trình mà có thể dành nhiều thời gian và công sức cho tìm hiểu và phát triển thuật toán.
Đối với công việc phát triển các phần mềm ứng dụng toán học thì MATLAB cũng là môi trường lý tưởng vì nó cũng cung cấp công cụ xây dựng giao diện thân thiện một cách nhanh chóng.
Không chỉ như vây, MATLAB còn là môi trường vô cùng thuận lợi cho việc học tập, nghiên cứu và phát triển các ứng dụng đa dạng trong nhiều lĩnh vực khác nhau của khoa học và công nghệ từ điều khiển, trí tuệ nhân tạo đến tài chính, viễn thông,...
Chính vì thế, MATLAB được đông đảo các giới khoa học và công nghệ sử dụng rộng rãi và được giảng dạy, phổ biến trên toàn thế giới. Ở Việt nam chúng ta cũng phải làm được điều này.
TÀI LIỆU THAM KHẢO
Đặng Quang Á, Matlab-một môi trường tính toán kỹ thuật và đồ họa nhanh, Tuyển tập báo cáo Hội thảo “Phát triển công cụ tin học trợ giúp cho giảng dạy, nghiên cứu và ứng dụng toán học”, Hà nội, 9-10/4/1999, 194-198.
Lê Viết Dư Khương, Matlab một công cụ tin học mạnh trợ giúp hữu hiệu việc giảng dạy và nghiên cứu trong nhiều lĩnh vực khoa học và kỹ thuật, Tuyển tập trên, 55-74.
Đặng Quang Á, Xây dựng một số hàm giải phương trình đạo hàm riêng cấp bốn bổ sung cho ToolBox PDE của MATLAB, Hội thảo “Một số vấn đề chọn lọc của công nghệ thông tin và truyền thông”, Thái nguyên, 8/2003.
MATLAB Help của MATLAB version 7.0.1, 9/2004.
Web site
Trang Web