1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng Phương pháp tính và Matlab: Chương 3.7 - Trường ĐH Bách khoa Hà Nội

20 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 545,74 KB

Nội dung

Bài giảng Phương pháp tính và Matlab: Chương 3.7 - Trường ĐH Bách khoa Hà Nội được biên soạn bao gồm các nội dung chính sau: Quản lý các biến Input; Quản lý các biến Output; Tính giá trị hàm một cách gián tiếp; Một số kinh nghiệm lập trình Matlab. Mời các bạn cùng tham khảo chi tiết bài giảng tại đây.

Quản lý biến Input, Output Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab (SAMI-HUST) Lập trình Matlab Hà Nội, 68/87 tháng năm 2015 68 / 87 Quản lý biến Input, Output Quản lý biến Input, Output Mỗi hàm có biến nội bao gồm nargin (number of input arguments) nargout (number of output arguments) Sử dụng giá trị nargin phần đầu hàm để xác định có biến đầu vào sử dụng Sử dụng giá trị nargout phần cuối hàm để xác định số biến đầu mong muốn Lợi ích Cho phép chương trình đơn thực nhiều công việc liên quan Cho phép hàm giả thiết giá trị mặc định số biến đầu vào, làm đơn giản việc sử dụng hàm số trường hợp (SAMI-HUST) Lập trình Matlab Hà Nội, 69/87 tháng năm 2015 69 / 87 Quản lý biến Input, Output Quản lý biến Input, Output Ví dụ 19 Xét hàm plot plot(x,y) plot(x,y,’s’) plot(x,y,’s ’) plot(x1,y1,’s’,x2,y2,’o’) h=plot(x,y) nargin 3 nargout 0 0 Các giá trị nargin nargout xác định hàm plot gọi (SAMI-HUST) Lập trình Matlab Hà Nội, 70/87 tháng năm 2015 70 / 87 Tính giá trị hàm cách gián tiếp Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab (SAMI-HUST) Lập trình Matlab Hà Nội, 71/87 tháng năm 2015 71 / 87 Tính giá trị hàm cách gián tiếp Tính giá trị hàm cách gián tiếp Sử dụng hàm feval Lợi ích Cho phép thủ tục viết xử lý hàm f (x) Chia nhỏ thuật toán phức tạp cách sử dụng đoạn mã riêng Ví dụ 20 function s=fsum(fun,a,b,n) x=linspace(a,b,n); y=feval(fun,x); s=sum(y); end >> fsum(’sin’,0,pi,5) ans = 2.4142 >> fsum(’cos’,0,pi,5) ans = (SAMI-HUST) Lập trình Matlab Hà Nội, 72/87 tháng năm 2015 72 / 87 Tính giá trị hàm cách gián tiếp Các hàm inline MatLab giới thiệu mở rộng lập trình hướng đối tượng (object-oriented programming - OOP) Hàm inline đơn giản giúp chương trình linh hoạt Cụ thể, ta không cần viết hàm m-files để tính giá trị số hàm có công thức đơn giản dùng hàm feval Thay function y=myFun(x) y=x.^2-log(x); ta dùng myFun=inline(’x.^2-log(x)’); Cả hai dạng khai báo myFun cho phép biểu thức dạng z=myFun(3); s=linspace(1,5); t=myFun(s); (SAMI-HUST) Lập trình Matlab Hà Nội, 73/87 tháng năm 2015 73 / 87 Chú thích Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab (SAMI-HUST) Lập trình Matlab Hà Nội, 74/87 tháng năm 2015 74 / 87 Chú thích Chú thích Cú pháp : % Matlab comment line Các thích đặc biệt ➢ Các khối comment liền m-file phần help m-file đó: >> help filename =⇒ Khi viết hàm m-file, cố gắng thêm thích: mơ tả mục đích hàm, yêu cầu biến input định dạng biến output ➢ Mã "cells" phân định %% Cell title Trình soạn thảo Matlab Editor có khả đặc biệt để làm việc với "cells" Sử dụng publish(’file.m’) để thực thi file.m tạo ouput dễ nhìn % publish all m-files in current directory files=dir(’*.m’); cellfun(@(x) publish(x,struct(’evalCode’,false)), {files.name},’UniformOutput’,false); (SAMI-HUST) Lập trình Matlab Hà Nội, 75/87 tháng năm 2015 75 / 87 Gỡ lỗi Nội dung Mở đầu Các thủ tục Các hàm m-file Nhập, xuất liệu Điều khiển luồng Vector hóa (Vectorization) Quản lý biến Input, Output Tính giá trị hàm cách gián tiếp Chú thích 10 Gỡ lỗi 11 Một số kinh nghiệm lập trình Matlab (SAMI-HUST) Lập trình Matlab Hà Nội, 76/87 tháng năm 2015 76 / 87 Gỡ lỗi Gỡ lỗi MatLab hỗ trợ trình gỡ lỗi tương tác Các lệnh type dbtype hiển thị toàn nội dung m-file Lệnh error hiển thị lời nhắn hình dừng hẳn chương trình Hàm warning hiển thị lời nhắn lên hình nhiên khơng dừng chương trình Các lệnh pause keyboard dùng để tạm dừng chương trình Để khỏi chế độ gỡ lỗi (debug-mode) tiếp tục chương trình dùng lệnh return, dbcont, dbquit (SAMI-HUST) Lập trình Matlab Hà Nội, 77/87 tháng năm 2015 77 / 87 Gỡ lỗi Gỡ lỗi Sử dụng lệnh keyboard function r = quadroot(a,b,c) % quadroot Roots of quadratic equation and demo of keyboard command % % Synopsis: r = quadroot(a,b,c) % % Input: a,b,c = coefficients of a*x^2 + b*x + c = % % Output: r = column vector containing the real or complex roots d = b^2 - 4*a*c; if d> profile on >> profile clear (SAMI-HUST) Lập trình Matlab Hà Nội, 80/87 tháng năm 2015 80 / 87 Một số kinh nghiệm lập trình Matlab (The Profiler) Bây giờ, chạy thử chương trình >> example1(50000); Sau đó, nhập vào lệnh >> profile report Profiler tạo thông báo dạng HTML chương trình khởi tạo cửa sổ trình duyệt Tùy theo hệ thống máy tính mà kết hiển thị dạng khác (SAMI-HUST) Lập trình Matlab Hà Nội, 81/87 tháng năm 2015 81 / 87 Một số kinh nghiệm lập trình Matlab Tiền cấp phát nhớ cho mảng Các biến ma trận MatLab có khả điều chỉnh số hàng số cột cách linh động Ví dụ >> a=2 a = >> a(4,4)=1 a = 0 0 0 0 0 0 0 MatLab tự động điều chỉnh kích cỡ ma trận Do đó, nhớ dành cho liệu ma trận cần phải tiền cấp phát với cỡ lớn (SAMI-HUST) Lập trình Matlab Hà Nội, 82/87 tháng năm 2015 82 / 87 Một số kinh nghiệm lập trình Matlab Tiền cấp phát nhớ cho mảng Ví dụ 21 Xét đoạn mã a(1)=1; b(1)=0; for k=2:8000 a(k)=0.99803 * a(k-1) - 0.06279 * b(k-1); b(k)=0.06729 * a(k-1) + 0.99803 * b(k-1); end Thời gian thực thi đoạn mã 0.147 giây (SAMI-HUST) Lập trình Matlab Hà Nội, 83/87 tháng năm 2015 83 / 87 Một số kinh nghiệm lập trình Matlab Tiền cấp phát nhớ cho mảng Sau vịng lặp for kết thúc kích thước hai mảng a,b 10000 Do đó, để tiền cấp phát nhớ, tạo hai vector hàng a,b với 10000 phần tử 0: a = zeros(1,10000); b = zeros(1,10000); a(1) = 1; b(1) = 0; for k = 2:10000 a(k) = 0.99803 * a(k-1) - 0.06279 * b(k-1); b(k) = 0.06729 * a(k-1) + 0.99803 * b(k-1); end Với thay đổi này, thời gian thực thi 0.005 giây (nhanh gần lần) (SAMI-HUST) Lập trình Matlab Hà Nội, 84/87 tháng năm 2015 84 / 87 Một số kinh nghiệm lập trình Matlab Giới hạn giá trị mà không dùng cấu trúc if Để giới hạn giá trị khoảng cho trước, cách trực tiếp để lập trình if x < lowerBound x = lowerBound; elseif x > upperBound x = upperBound; end Tuy nhiên, cách thực thi chậm Một phương pháp nhanh dùng hàm max x = max(x,lowerBound); % Clip elements from below, x >= lowerBound x = min(x,upperBound); % Clip elements from above, x

Ngày đăng: 26/01/2023, 18:16

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w