9/3/2019
1
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 1
Giảng viên: Ths. Trần Kim Bằng
Bộ môn Cơ Kỹ Thuật, P.106B4
Khoa Khoa Học Ứng Dụng
Đại học Bách Khoa TpHCM
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 2
Chương 9
CHUỖI KÝ TỰ VÀ CÁC CÚ
PHÁP XỬ LÝ CHUỖI
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 3
9.1. Chuỗi ký tự
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 4
9.1.1. Cấu trúc của chuỗi
Chuỗi tự trong Matlab mảng các giá trị ASSCII của
tự muốn hiển thị
t='How about this charcacter string?'
size(t)
whos
Muốn xem mã ASCII của ký tự, dùng lệnh double
u=double(t)
Hàm chuyển ngược lại từ mã ASCII thành chuỗi
char([77 114 32 78 104 97 126 32 110 117 109 98 101 114 32
111 110 101 33])
char còn được dùng chuyển từ dạng symbolic thành chuỗi
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 5
Để đưa vào mảng dấu nháy đơn ta sử dụng 2 dấu nháy đơn
v='I can''t find the manual!' hoặc v=['I can''t' ' find the manual!']
Ta có thể nối 2 chuỗi với nhau
w=[u,v]
Để in ra chuỗi dùng lệnh disp
disp(w);
Với mảng các ký tự, có thể thao tác như trên một mảng thông thường
t='How about this charcacter string?'
u=t(16:24)
u=t(26:-1:16)
u=t(16:24)’
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 6
Để chuyển đổi chuỗi thành dạng số, số thành chuỗi, dùng những lệnh sau
Các lệnh chuyển đổi
str2num
num2str
Code Matlab:
tt='23'
tt*2
str2num(tt)*2
Code Matlab:
x=[12,4.6,5,15.67]
vv=mat2str(x)
vv(1)
9/3/2019
2
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 7
9.1.2. Một số lệnh quan trọng trong việc xử chuỗi
Lệnh Mô tả
ischar(s) có phải là chuỗi kí tự không
isletter(s) có phải là kí tự không
isspace(s) có khoảng trống không
findstr(s1,s2) tìm chuỗi s2 trong chuỗi s1
strcmp (s1,s2) so sánh 2 chuỗi có bằng nhau không
strmatch(s1,s2) trả về vị trí chuỗi thứ 1 có trùng kí tự đầu chuỗi 2
lower(s) chuyển sang dạng viết thường
upper(s) chuyển sang dạng viết in hoa
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 8
Code Matlab:
b='Peter Piper picked a peck of pickled peppers';
findstr(b,' ')
findstr(b,'p')
find(b=='p')
findstr(b,'cow')
findstr(b,'pick')
Code Matlab:
c='a2 : b_c';
ischar(c)
isletter(c)
isspace(c)
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 9
Code Matlab:
S=char('apple','banana','peach','mango','pineapple')
strmatch('pe',S)
strmatch('p',S)
strmatch('banana',S)
strmatch('Banana',S)
upper('Banana')
lower('Banana')
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 10
9.2. Đọc và ghi chuỗi ký tự
lên file text
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 11
fprintf(1, định dạng, chuỗi cần ghi ra theo thứ tự cột);
Kiểu loại Dạng in ra
%s Kiểu chuỗi
%d Kiểu số nguyên thập phân
%f Kiểu số dấu chấm tĩnh
%e Kiểu số dấu chấm động
Ký tự Ý nghĩa
\n Enter (xuống dòng)
\t Tab
\b Backspace
9.2.1. Ghi chuỗi ký tự ra màn hình
Code Matlab:
x=[1 2 3 4];
y=[5 6 7 8];
fprintf(1, '%6.2f %12.8f\n', x, y);
fprintf(1, '%6.2f %12.8f\n', [x; y]);
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 12
Các kí tự đặc biệt như \n, \r, \t, \b, \f có ý nghĩa như xuống dòng
mới, quay lại đầu dòng, cách lề 1 khoảng tab…
Lệnh Kết quả
sprintf('%.0e\n',pi) 3e+00
sprintf('%.1e\n',pi) 3.1e+00
sprintf('%.3e\n',pi) 3.142e+00
sprintf('%.0f\n',pi) 3
sprintf('%.1f\n',pi) 3.1
sprintf('%.3f\n',pi) 3.142
9/3/2019
3
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 13
Code Matlab:
disp('How are you')
How are you
disp(pi)
3.1416
a=[1 4 3 7];
disp(a)
1 4 3 7
length=8;
fprintf('do dai la: \n %6.1f m',length);
do dai la:
8 m
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 14
Code Matlab:
length =8;
st='met';
fprintf('do dai la%4.1f %s\n',length,st)
do dai la 8.0 met
fprintf('do dai la%4.1f\b %s\n',length,st)
do dai la 8. met
fprintf('do dai la%4.1f\t %s\n',length,st)
do dai la 8.0 met
fprintf('Hello!\n')
Hello!
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 15
9.2.2. Ghi chuỗi ký tự ra file text
Cú pháp:
fid = fopen(filename, 'wt'); % tạo file tên filename để ghi
fprintf(fid, format, var); % ghi biến var vào file text
% fid: biến chỉ định file được m
Code Matlab:
x=[1 2 3 4];
y=[5 6 7 8];
fid = fopen('test.txt', 'w');
fprintf(fid, '%6.2f %12.4f\n', [x; y]);
Code Matlab:
x=[1 2 3 4];
y=[5 6 7 8];
fid = fopen('test.txt', 'wt');
fprintf(fid, '%6.2f %12.4f\n', [x y]);
Cho phép đọc và ghi
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật
Matlab® – Matrix Laboratory 16
Code Matlab:
x=[1 2 3 4];
y=[5 6 7 8];
fid = fopen('test.txt', 'wt');
fprintf(fid, 'X va Y la: \n');
fprintf(fid, '%6.2f %12.4f\n', [x; y]);
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 17
9.2.3. Đọc file text định dạng txt
Code Matlab:
fid = fopen('test.txt', 'r');
fscanf(fid, '%g %g', [2 inf]);
fclose(fid)
Cú pháp:
fid = fopen(filename, 'r'); % gọi file tên filename để đọc
fscanf(fid,format, size); % đọc file và ghi lại với định dạng format
fclose(fid) % đóng file
% fid: biến chỉ định file được mở
% size: ma trận kích thước
Chú ý:
size: ma trận [m n], n có thể là inf, m không thể là inf
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 18
9.2.4. Đọc dữ liệu nút và phần tử từ ANSYS
Code Matlab:
fid=fopen('NLIST.lis');
no=textscan(fid,'%f%f%f%f','HeaderLines',3,'commentStyle','N');
fclose(fid);
idI=[no{1}];
xI=[no{2}];
yI=[no{3}];
node=[xI yI];
numnode = size(node,1);
fid=fopen('ELIST.lis');
el=textscan(fid,'%*d%*d%*d%*d%*d%*d%d%d%d%d%*d','HeaderLines',2,'
commentStyle','E');
fclose(fid);
element=[el{1} el{2} el{3} el{4}];
9/3/2019
4
Khoa Khoa học ứng dụng
Bộ môn Cơ kỹ thuật
Đại học Quốc gia Thành phố Hồ Chí Minh
Trường đại học Bách Khoa
Lập trình tính toán Cơ kỹ thuật Matlab® – Matrix Laboratory 19
figure
hold on
axis equal
h = plot(node(:,1),node(:,2),'bo');
set(h,'MarkerSize',3);
for i = 1:size(element)
x1 = node(element(i,1),1);
x2 = node(element(i,2),1);
x3 = node(element(i,3),1);
x4 = node(element(i,4),1);
y1 = node(element(i,1),2);
y2 = node(element(i,2),2);
y3 = node(element(i,3),2);
y4 = node(element(i,4),2);
plot([x1 x2],[y1 y2],'-r','linewidth',1);
plot([x2 x3],[y2 y3],'-r','linewidth',1);
plot([x3 x4],[y3 y4],'-r','linewidth',1);
plot([x4 x1],[y4 y1],'-r','linewidth',1);
end
Vẽ lưới phần tử