Tải bản đầy đủ (.pdf) (18 trang)

NGÔN NGỮ lập TRÌNH TRONG vật lý TÍNH TOÁN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (864.22 KB, 18 trang )

NGƠN NGỮ LẬP TRÌNH TRONG VẬT LÝ TÍNH TỐN
Tuần 2


1.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


1.1 Kiểu dữ liệu trong MATLAB
Class

Max value

Min Value

Bytes

Smallest difference

logical

1

0

1

1



int8

127

-128

1

1

int16

32767

-32768

2

1

int32

2.14e+09

-2.14e+09

4

1


int64

9.22e+18

-9.22e+18

8

1

uint8

255

0

1

1

uint16

65535

0

2

1


uint32

4.29e+09

0

4

1

uint64

1.84e+19

0

8

1

single

3.40e+038

-3.40e+038

4

1.1755e-38


double

1.79e+308

-1.79e+308

8

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 dữ liệu trong 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ử trong 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ữ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


Nguồn gốc các sai số trong tính tốn
• 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 tố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


1.3 Vòng lặp và 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 khi biết trước số lần lặp nmax

Được sử dụng khi không biết trước số lần lặp

for i = 1: 1 : nmax

while (điều kiện đúng)

Làm việc gì đó theo mỗi i
end

Làm việc gì đó
end

Câu điều kiện
Có một điều kiện

Có nhiều điều kiện


if điều kiện
Làm gì đó
end

if điều kiện 1
Làm gì đó
elseif điều kiện 2
Làm gì đó
else
Làm gì đó
end

Chú ý: Các điều kiện ln phải trả về
kết quả đúng hoặc sai (1 hoặc 0)


1.4 Các hàm và thủ tục
Các hàm và thủ tục thì có hoặc khơng có đối số và 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 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;


1.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ả)


Ví dụ 1: Tính tổng của 20 số (n = 20):


S  1  2  3...   n
n 0

bằng vòng lặp WHILE:


Nhập N
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
Đúng
Tính
S=S+n
n=n+1

In ra S

Sai


Ví 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


Lập trình có cấu trúc
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.
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.


Trong MATLAB, một chương trình có cấu trúc được lập trên các
file có phần đi mở rộng “.m” (M - file).

Thơ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.
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 tốn thành 2 khối chúc năng (2 hàm):
• Hàm tính 
• Hàm tính nghiệm x.


Các file lệnh và file hàm phải ở cùng một 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 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:

Chủn từ cơng thức text book sang các phép tính:

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


Kế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() …



×