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
Trang 1NGÔN NGỮ LẬP TRÌNH TRONG VẬT LÝ TÍNH TOÁN
Tuần 2
Trang 21.1 Kiểu dữ liệu trong MATLAB 1.2 Các loại sai số
1.3 Vòng lặp và câu điều kiện 1.4 Các hàm và thủ tục
Trang 3Class Max value Min Value Bytes Smallest difference
int32 2.14e+09 -2.14e+09 4 1
int64 9.22e+18 -9.22e+18 8 1
single 3.40e+038 -3.40e+038 4 1.1755e-38
double 1.79e+308 -1.79e+308 8 2.2251e-308
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
1.1 Kiểu dữ liệu trong MATLAB
Trang 4Một số lệnh cover kiểu dữ liệu trong MATLAB
char Convert to character array (string)
int2str Convert integer data to string
mat2str Convert matrix to string
num2str Convert number to string
str2double Convert string to double-precision value
str2num Convert string to number
cell2mat Convert cell array to numeric array
cell2struct Convert cell array to structure array
cellstr Create cell array of strings from character array
mat2cell Convert array to cell array with potentially different sized cells num2cell Convert array to cell array with consistently sized cells
struct2cell Convert structure to cell array
Trang 5Name 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 xor(A, B) True if either A or B (but NOT
both!) are true Các toán tử logical (Logical Operators)
Các toán tử trong MATLAB
Trang 6Operator Description
- Subtraction
.* Multiplication
./ Right division
.\ Left division
- Unary minus
: Colon operator
' Complex conjugate
transpose
* Matrix multiplication
/ Matrix right division
\ Matrix left division
^ Matrix power
Operator Description
< Less than
<= Less than or equal to
> Greater than
>= Greater than or equal to
== Equal to
~= Not equal to
Các toán tử số học ( Arithmetic Operators)
Các toán tử quan hệ
( Relational Operators )
Trang 71.2 Các loại sai số
Định nghĩa sai số:
• Sai số thật (Et) (true error) : độ lệch giữa giá trị thật và 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
Trang 8• Sai số làm tròn (roundoff error)
Xảy ra do sự thể hiện hữu hạn độ chính xác một con số của máy tính Xảy ra do sự làm tròn bằng tay của người sử dụng
• Sai số cắt cụt (truncation error)
Xảy ra khi các công thức toán được thể hiện dưới dạng xấp xỉ
Ví dụ: khai triển Taylor một hàm số liên tục
Nguồn gốc các sai số trong tính toán
Trang 91.3 Vòng lặp và câu điều kiện
Vòng lặp for hữu hạn
Được sử dụng khi biết trước số lần lặp nmax
for i = 1: 1 : nmax
Làm việc gì đó theo mỗi i
end
Vòng lặp while
Được sử dụng khi không biết trước số lần lặp
while (điều kiện đúng) Làm việc gì đó
end
Vòng lặp
Câu điều kiện
if điều kiện 1 Làm gì đó
elseif điều kiện 2 Làm gì đó
else
Làm gì đó
end
if điều kiện
Làm gì đó
end
Có một điều kiện Có nhiều điều kiện
Chú ý: Các điều kiện luôn phải trả về
kết quả đúng hoặc sai (1 hoặc 0 )
Trang 10•Symbolic Expressions
syms x;
f=x^4+7*x^2+x+exp(2*x)
subs(f,x,3)
ans = 550.4288
Các hàm và thủ tục thì có hoặc không có đối số và luôn có giá trị trả về
•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
•Function Handles
f = @(x) x^2-x
1.4 Các hàm và thủ tục
Các hàm có đối số:
Các hàm không có đối số:
function main
% tên hàm là main
% in ra màn hình chữ ‘Hello world! ‘
disp('Hello world!');
function y = random % tên hàm là random % trả về một số ngẫu nhiên
y=rand;
Trang 111.5 Cách viết và chạy chương trình
Lưu đồ và giải trình (Sơ đồ khối và mã giả)
Trang 12Ví dụ 1: Tính tổng của 20 số (n = 20):
0
1 2 3
n
bằng vòng lặp WHILE :
Nhập số các số lấy tổng N: N = 20
Tạo giá trị đầu cho S: S = 0
n = 0
WHILE (n ≤ N)
Tính tổng :
S = S + n Tăng số lấy tổng:
n = n +1
END
In ra S
n ≤ N Nhập N
Tính
S = S + n
n = n + 1
In ra S
Sai Đúng
Trang 13Ví dụ 2: giả phương trình bậc 2 bằng câu trúc IF – ELSE :
ax2 + bx + c = 0 Nhập các hệ số a, b và c
Tính = b2 – 4ac
IF ( < 0)
In ra ‘Vô nghiệm’
ELSEIF ( = 0)
Tính nghiệm : x = -b/(2a)
In ra x
ELSE
Tính hai nghiệm:
x1 = (-b + sqrt())/(2a)
x2 = (-b - sqrt())/(2a)
In ra x1 và x2
END
Trang 14Lập trình có cấu trúc
Trong một chương trình máy tính, các khối chức năng có thể được
thực hiện không chỉ theo trình tự mà còn có thể theo các tình huống và lặp lại nhiều lần
• Trình tự nghĩa là các câu lệnh được thực hiện theo trình tự nhất định:
trên xuống
• Quyết định là sự qui định sẽ thực hiện chương trình như thế nào phụ
thuộc vào sự thoả mãn các điều kiện nhất định
• Vòng lặp thể hiện sự thực hiện có tính lặp một số đoạn lệnh của
chương trình khi các điều kiện nào đó vẫn được thỏa mãn
Phương pháp lập trình có cấu trúc là chia một chương trình (chức
năng) lớn thành các khối chức năng hay hàm (thủ tục) đủ nhỏ để dễ lập trình và kiểm tra
Trang 15Thông thường, một chương trình lập trình có cấu trúc gồm có 1 file lệnh
(script) và các file hàm (function) Tất cả các file này được viết trên M – file
• Các file hàm là các khối chức năng nhỏ của một chương trình lớn
• File lệnh dùng để gọi việc thực thi các file hàm theo một trật tự nhất định
Trong MATLAB, một chương trình có cấu trúc được lập trên các
file có phần đuôi mở rộng “.m” (M - file)
Ví dụ 3: Viết một chương trình có cấu trúc giải phương trình bậc hai
Chia bài toán thành 2 khối chúc năng (2 hàm):
• Hàm tính
• Hàm tính nghiệm x
Trang 16Tên file : tinh_delta.m
function delta = tinh_delta (a,b,c)
delta = b*b - 4*a*c;
end
Tên file : nghiem_don.m
function x = nghiem_don (a,b)
x = -b*0.5/a;
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 : 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
Các file lệnh và file hàm phải ở cùng một thư mục
Trang 17Một số lưu ý
Chọn tên biến
Chọn tên biến có tính tự minh họa và ngắn gọn Ví dụ:
Không nên đặt biến quá dài:
Không nên đặt tên các biến quá giống nhau:
Không nên đặt các chỉ số của vòng lặp là i, j, vì dễ gây nhầm với số phức: z= x + i*y
Chuyển từ công thức text book sang các phép tính:
Trang 18Kết hợp các phép tính trên cùng 1 biến vào cùng một nhóm:
Người dùng không được đặt tên các hàm trùng với tên các hàm trong thư viện hàm của MATLAB: sin(), cos() …