PowerPoint Presentation NGÔN NGỮ LẬP TRÌNH TRONG VẬT LÝ TÍNH TOÁN 1.1 Kiểu dữ liệu trong MATLAB Một số lệnh cover kiểu dữ liệu trong MATLAB Một số lệnh cover kiểu dữ liệu trong MATLAB 1.2 Các loại sai số Nguồn gốc các sai số trong tính toán • Sai số thật (Et) (true error) • Sai số tuyệt đối (|Et|) (absolute error) • Sai số tương đối tỉ đối Nguồn gốc các sai số trong tính toán 1.3 Vòng lặp và câu điều kiện 1.4 Các hàm và thủ tục 1.5 Cách viết và chạy chương trình
NGƠN NGỮ LẬP TRÌNH TRONG VẬT LÝ TÍNH TỐN Tuần 1.1 Kiểu dữ liệu MATLAB 1.2 Các loại sai số 1.3 Vòng lặp câu điều kiện 1.4 Các hàm thủ tục 1.1 Kiểu dữ liệu MATLAB Class Max value Min Value Bytes Smallest difference logical 1 int8 127 -128 1 int16 32767 -32768 int32 2.14e+09 -2.14e+09 int64 9.22e+18 -9.22e+18 uint8 255 1 uint16 65535 uint32 4.29e+09 uint64 1.84e+19 single 3.40e+038 -3.40e+038 1.1755e-38 double 1.79e+308 -1.79e+308 2.2251e-308 char ‘Hello World’ cell array a{1,1} = 12; a{1,2} = ’Red’; a{1,3} = b(4); structure a.day = 12; a.color =’Red’; a.mat = b(3); function handle sqr = @(x) x.^2; sqr(10) = 100 Một số lệnh cover kiểu liệu MATLAB Function char int2str mat2str num2str str2double str2num cell2mat cell2struct cellstr mat2cell num2cell struct2cell Purpose Convert to character array (string) Convert integer data to string Convert matrix to string Convert number to string Convert string to double-precision value Convert string to number Convert cell array to numeric array Convert cell array to structure array Create cell array of strings from character array Convert array to cell array with potentially different sized cells Convert array to cell array with consistently sized cells Convert structure to cell array Các toán tử MATLAB Các toán tử logical (Logical Operators) Name Operator Example with symbol Example in code Text description NOT ~ ~A not(A) True if A is false AND & A&B and(A, B) True if both A and B are true OR | A|B or(A, B) True if either A or B (or both!) are true xor(A, B) True if either A or B (but NOT both!) are true XOR Các toán tử số học (Arithmetic Operators) Operator + * / \ + : ^ ' ' * / \ ^ Description Addition Subtraction Multiplication Right division Left division Unary plus Unary minus Colon operator Power Transpose Complex conjugate transpose Matrix multiplication Matrix right division Matrix left division Matrix power Các toán tử quan hệ (Relational Operators) Operator < >= == ~= Description Less than Less than or equal to Greater than Greater than or equal to Equal to Not equal to 1.2 Các loại sai số Định nghĩa sai số: • Sai số thật (Et) (true error) : độ lệch giá trị thật giá trị xấp xỉ Et = true value – approximation • Sai số tuyệt đối (|Et|) (absolute error) : |Et| = |true value – approximation| • Sai số tương đối tỉ đối: Etf = (true value – approximation)/true value Nguồn gốc sai số tính tốn • Sai số làm tròn (roundoff error) Xảy thể hữu hạn độ xác số máy tính Xảy làm trịn tay người sử dụng • Sai số cắt cụt (truncation error) Xảy cơng thức tốn thể dạng xấp xỉ Ví dụ: khai triển Taylor hàm số liên tục 1.3 Vòng lặp câu điều kiện Vòng lặp Vòng lặp for hữu hạn Vòng lặp while Được sử dụng biết trước số lần lặp nmax Được sử dụng trước số lần lặp for i = 1: : nmax while (điều kiện đúng) Làm việc theo i end Làm việc end Câu điều kiện Có điều kiện Có nhiều điều kiện if điều kiện Làm end if điều kiện Làm elseif điều kiện Làm else Làm end Chú ý: Các điều kiện ln phải trả về kết hoặc sai (1 hoặc 0) 1.4 Các hàm thủ tục Các hàm thủ tục có hoặc khơng có đối số ln có giá trị trả về Các hàm có đối số: •Symbolic Expressions syms x; f=x^4+7*x^2+x+exp(2*x) subs(f,x,3) ans = 550.4288 •Function Handles f = @(x) x^2-x •Inline Functions f=inline('x+exp(x)','x') f(x) = x+exp(x) •Function M-Files function t=can_bac_hai(h) t=sqrt(h/4.9); end Các hàm khơng có đối số: function main % tên hàm main % in hình chữ ‘Hello world! ‘ disp('Hello world!'); function y = random % tên hàm random % trả số ngẫu nhiên y=rand; 1.5 Cách viết chạy chương trình Lưu đồ giải trình (Sơ đồ khối mã giả) Ví dụ 1: Tính tổng 20 số (n = 20): S n n 0 vòng lặp WHILE: Nhập N Nhập số số lấy tổng N: N = 20 Tạo giá trị đầu cho S: S = n=0 WHILE (n ≤ N) Tính tổng : S=S+n Tăng số lấy tổng: n = n +1 END In S n≤N Đúng Tính S=S+n n=n+1 In S Sai Ví dụ 2: giả phương trình bậc câu trúc IF – ELSE: ax2 + bx + c = Nhập hệ số a, b c Tính = b2 – 4ac IF ( < 0) In ‘Vô nghiệm’ ELSEIF ( = 0) Tính nghiệm : x = -b/(2a) In x ELSE Tính hai nghiệm: x1 = (-b + sqrt())/(2a) x2 = (-b - sqrt())/(2a) In x1 x2 END Lập trình có cấu trúc Phương pháp lập trình có cấu trúc chia chương trình (chức năng) lớn thành khối chức hay hàm (thủ tục) đủ nhỏ để dễ lập trình kiểm tra Trong chương trình máy tính, khối chức thực khơng theo trình tự mà cịn theo tình lặp lại nhiều lần • Trình tự nghĩa câu lệnh thực theo trình tự định: xuống • Quyết định qui định thực chương trình phụ thuộc vào thoả mãn điều kiện định • Vịng lặp thể thực có tính lặp số đoạn lệnh chương trình điều kiện thỏa mãn Trong MATLAB, chương trình có cấu trúc lập file có phần mở rộng “.m” (M - file) Thông thường, chương trình lập trình có cấu trúc gồm có file lệnh (script) file hàm (function) Tất file viết M – file • Các file hàm khối chức nhỏ chương trình lớn • File lệnh dùng để gọi việc thực thi file hàm theo trật tự định Ví dụ 3: Viết chương trình có cấu trúc giải phương trình bậc hai Chia tốn thành khối chúc (2 hàm): • Hàm tính • Hàm tính nghiệm x Các file lệnh file hàm phải thư mục Các file hàm: Tên file : tinh_delta.m function delta = tinh_delta(a,b,c) delta = b*b - 4*a*c; end Tên file : nghiem_kep.m function [x1,x2] = nghiem_kep(delta,a,b) x1 = 0.5*(-b + sqrt(delta))/a; x2 = 0.5*(-b - sqrt(delta))/a; end Tên file : nghiem_don.m function x = nghiem_don(a,b) x = -b*0.5/a; end File lệnh: Tên file: giai_bac2.m a = input(‘tham so a = ’); b = input(‘tham so b = ’); c = input(‘tham so c = ’); delta = tinh_delta(a,b,c); if (delta < 0) disp(‘Vo nghiệm’); elseif (delta > 0) disp(‘Nghiem kep:’) [x1,x2] = nghiem_kep(delta,a,b) else disp(‘Nghiem don:’) x = nghiem_don(a,b) end Một số lưu ý Chọn tên biến Chọn tên biến có tính tự minh họa ngắn gọn Ví dụ: Khơng nên đặt biến dài: Không nên đặt tên biến giống nhau: Chuyển từ công thức text book sang phép tính: Khơng nên đặt số vòng lặp i, j, dễ gây nhầm với số phức: z= x + i*y Kết hợp phép tính biến vào nhóm: Người dùng khơng đặt tên hàm trùng với tên hàm thư viện hàm MATLAB: sin(), cos() … ... tục) đủ nhỏ để dễ lập trình kiểm tra Trong chương trình máy tính, khối chức thực khơng theo trình tự mà cịn theo tình lặp lại nhiều lần • Trình tự nghĩa câu lệnh thực theo trình tự định: xuống... 0) Tính nghiệm : x = -b/(2a) In x ELSE Tính hai nghiệm: x1 = (-b + sqrt())/(2a) x2 = (-b - sqrt())/(2a) In x1 x2 END Lập trình có cấu trúc Phương pháp lập trình có cấu trúc chia chương trình. .. định thực chương trình phụ thuộc vào thoả mãn điều kiện định • Vịng lặp thể thực có tính lặp số đoạn lệnh chương trình điều kiện thỏa mãn Trong MATLAB, chương trình có cấu trúc lập file có phần