Tài liệu MATLAB
Trang 1I.1 Giới thiệu về phần mềm MatLab
-Là sản phẩm của công ty Phần mềm Matworks
-Có thể chạy trên nhiều chủng loại máy tính khác nhau
-Dùng để giải các bài toán khoa học kỹ thuật
Phần I: Nhập môn ngôn ngữ MatLab
Đặc điểm:dễ sử dụng, các thủ tục trong và ngoàiluôn được hoàn thiện phát triển Có các thủ tục
đồ hoạ rất mạnh dễ dàng kết hợp với quá trìnhtính toán, dễ phát triển cho các ứng dụng khoahọc kỹ thuật Dễ lập trình, chương trinh ngắngọn có hai chế độ làm việc là hội thoại và lậptrình
Trang 2Khởi động MatLab
-Kích chuột vào biểu tượng MatLab
- Trên cửa sổ lệnh có các menu: File, Edit, Tool, View, Help
và một số nút chức năng Có một cửa sổ lệnh đưa ra kết quảbăng số nhưng có nhiều cửa sổ đồ hoạ
Trang 4sẽ đưa ra cửa sổ đồ hoạ
Ví Dụ: ezplot(‘sin(x)/x’,[0,10])
Trang 5-Trên một dòng chúng ta có thể nhập nhiều lệnh các lệnh cách nhau bằng dấu ‟,‘ hoặc ‟;‟
Nếu viết >>x=2+3; y=x+1, z=y+x;
Kết quả của Z sẽ không được in ra
Trang 6Một lệnh của MatLab có thể viết trên nhiều hàng
Trong file văn bản chứa các lệnh hoặc hàm của MatLab Để
mở một file văn bản làm như sau:
Trang 8Ma trận là kiểu dữ liệu cơ bản trong MatLab
»
Trang 11-Các biến trong MatLab
-Để lưu giữ các hằng trong quá trình tính toán phải gán nó vàocác biến Biến là nơi chứa các Hằng, các biến các biểu thứctrong MatLab Ở chế độ chương trình dùng dấu % để viết lờichú thích
-Tên biến của MatLab bắt đầu bằng chữ cái tiếp theo tối đa là
30 ký tự chữ cái chữ số hoặc dấu gạch chân
-Phân biệt chữ hoa và chữ thường
-MatLab có một số tên biến được định nghĩa sẵn
eps, pi, inf,…:
pi=3.1416; eps=2.2204e-016; inf=vô cùng…
Trang 12Yêu cầu việc đặt tên biến Không trùng với từ khoá, tên hàm, tên các biến có sẵn
Để xoá đi tên biến không dùng nữa thì dùng lệnh
>>clear tenbien1 tenbien2
Trang 14Khi cộng trừ các ma trận
thì các ma trận phải có
cùng kích thước Trường
hợp đặc biệt một trong
hai ma trận là vô hướng,
MatLab sẽ hiểu vô hướng
Trang 15Cij= Aik*Bkj (K chạy từ 1 …n1)
Phép nhân ma trận không giao hoán
Trang 16» x=A\B
x = 4.0000 -2.4000 0.6000
B =
1 2 3
» A*x ans = 1.0000 2.0000 3.0000
»
Trang 17X1 X2 X3
=
*
Trang 183 -2 -1 1
Trang 19Để tiện lợi trong quá trình tính toán các biểu thức toán học
MatLab mở rộng thêm các phép tính nhân chia luỹ thừa theo các phần tử tương ứng của 2 ma trận và được ký hiệu là:
.*, ./, .\, .^
A={aij} ; B={Bij}
C=A.*B => cij=aij*bij D=A./B => dij=aij/bij E=A.\B=> Eij=aij.\bij F=A.^B=> Fij=aij^bij
Các phép tính nhân chia luỹ thừa theo các phần tử tương ứng
Trang 21sin - Sine.
sinh - Hyperbolic sine.
asin - Inverse sine.
asinh - Inverse hyperbolic sine.
cos - Cosine.
cosh - Hyperbolic cosine.
acos - Inverse cosine.
acosh - Inverse hyperbolic cosine.
tan - Tangent.
tanh - Hyperbolic tangent.
atan - Inverse tangent.
.
.
(để Tham khảo đầy đủ các hàm gõ lệnh help elfun )
Các hàm toán học sơ cấp trong MatLab
Trang 22một ma trận với những thành phần của nó sẽ tương ứng vớihàm trên từng thành phần của ma trận đối số.
Trang 23-Kiểu dữ liệu logic đóng một vai trò quan trọng trong ngôn
ngữ lập trình, song không có kiểu dữ liệu riêng để Mô tả các đại lượng Logic MatLab dùng các kiểu số để mô tả kiểu này
C=A o B ; {cij}={aij o bij}
Các phép toán Logic trong MatLab
Trang 250 1 0
1 0 1
Trang 27» n=str2num(s)
n = 10
>>n1=n+1 n1 =
11
Trang 28» s2='hanoi' s2 =
hanoi
» str2mat(s1,s2) ans =
haiduong hanoi
Để tìm hiểu thì gõ lệnh help strfun
Trang 29Với ma trận chúng ta có thể xử lý trên các phần tử hoặc các
khối hoặc toàn bộ ma trận
3 6 9
4 5
7 8
Trang 31Thêm hàng hoặc cột vào ma trận
Trang 34Khởi tạo các ma trận có các giá trị đặc biệt
1 1 1
1 1 1
Trang 350.9501 0.6068 0.8913 0.2311 0.4860 0.7621
randn(2,3) ans =
-0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909
rand n (m,n) tạo ra ma trận
m hàng n cột (tuân theo
quy luật phân bố chuẩn kỳ
vọng =0, phương sai=1)
Trang 36Chú ý muốn tạo ra các ma trận đặc biệt có
kích thước bằng kích thước của ma trận A
Để biết kích thước của ma trận A thì dùng lệnh: [m,n]=size(A)
Trang 37Để tạo các véc tơ hàng hoặc cột
zeros(m,1) ones(m,1)
ones(5,1) ans =
1 1 1 1 1
» ones(1,4) ans =
Trang 40X=A\B
Trang 41Bai tap
Tao mot ma tran a co cac
phan tu duong va am
Viet chuong trinh tinh tong
cac phan tu am, tong cac
phan tu duong
Trang 42lại, có những nhóm lệnh chỉ được thực hiện khi thoả mãn những điều kiện nhất định khi đó ta phải sử dụng cấu trúc lệnh điều khiển
Lệnh rẽ nhánh if
if <đk1>
Nhóm lệnh 1 elseif <đk2>
nhóm lệnh 2 elseif<đkn>
nhóm lệnh n else
nhóm lệnh n+1
end
%bai_if.m a=[1 2 3; 3 4 6; 7 5 2];
b=all(a)
if (b(1)==0) disp 'cot 1 co it nhat 1 phan tu =0'
else
disp 'cot 1 khong co phan tu =0'
end
Trang 43Cấu trúc lệnh điều khiển switch
switch a case 10 disp 'hoc tot' case 9
disp 'hoc tot' case 8
disp 'hoc kha' case 7
disp 'hoc kha' case 6
disp 'trung binh' otherwise
disp 'hoc kem' end
end
Trang 46Nhập giá trị từ bàn phím
Biến=input(„vào giá trị của biến‟)
Biến=input(„vào giá trị của biến‟,‟s‟) vào xâu ký tư
Trang 47Ghi các biến ra file bằng lệnh save
Save <filename> <danh sách biến>
Tên file không cần phần mở rộng nó tự động chọn là mat Đây là một file nhị phân nên không đọc được bằng bộ soạn thảo danh sách biến là tên các biến được đặt cách nhau bởi dấu cách
Ví dụ
Save solieu x y z
Nhập các biến số liệu từ file bằng lệnh load
Load <filename> <danh sách biến>
để biết chi tiết dùng help iofun
Trang 48» eval(x) ans = 4.4142
» x=1
x = 1
» y=feval('sin',x)
y = 0.8415
Trang 49echo là on thì trước khi thực hiện lệnh trong đoạn chương trình lệnh đó được in ra màn hình Nếu off thì lệnh không được in ra màn hình.
Các hàm người dùng định nghĩa
Cách viết các hàm mới (do người dùng định nghĩa )
-viết ngay trong đoạn chương trình
-Viết ở M_file
Hàm toán tử dùng để tính một biểu thức toán học đơn giản:
G=inline(<xâu ký tự biểu thức >,<ký tự đối số 1>,<ký tự đối số 2>,…)
» z=inline('(sin(x)+y)./(x.^2+y.^2)','x','y')
z = Inline function:
z(x,y) = (sin(x)+y)./(x.^2+y.^2)
» z(1,2) ans = 0.5683
Trang 50function [<danh sách đối số ra>]=<ten hàm>(<danh sách đối số vào>)
<lời chú giải>
<Thân hàm>
Nên đặt tên hàm trùng với tên M_file
Nếu tên hàm khác tên M-file thì MatLab lấy tên file làm tên hàm.
function [trungbinh] = hamgoiham(x)
%T ính trung bình cộng
n = length(x);
trungbinh = TTB(x,n);
function trungbinh = TTB(x,n) trungbinh = sum(x)/n;
Trang 51>>giaithua(6)
Trang 53x0 = x;
y0 = y;
End
Trang 54Các cửa sổ đồ hoạ
MatLab có thể tồn tại nhiều cửa sổ đồ hoạ đồng thời, mỗi cửa sổ đồ hoạ được xác định bởi 1 số Trên một cửa sổ đồ hoạ ta có thể vẽ nhiều hình con
Trang 55>> plot('sin(x)',[0,3])
>>subplot(2,1,1)
>> ezplot('tan(x)',[0,3])
Trang 56Vẽ đồ thị bằng hàm plot
Hàm plot cho phép vẽ đồ thị với dữ liệu được xác định trước
Plot(x,y,<k>) ở đây k có thể là kiểu điểm kiểu đường hoặc kiểu màu (là một xâu ký) x=[0:0.1:1]
y=sin(x)
plot(x, y, ‟r+‟)
Kiểu đường liền nét là dấu’-’,đứt net là dấu ‘- -’, chấm chấm là ‘:’, đường gạch chấm ‘-.’, hình tròn rỗng là ‘o’, …
Kiểu mầu là ‘r’, ‘b’,’w’….
Trang 58axis off, axis image … tham khảo
Đầy đủ vào help axis
Trang 620 1
2
-0.5
0
0.5
Trang 65-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 -2
Trang 66-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 -2
Trang 682 2
Trang 71sin(x+cos(x))=0
Trang 74Để xác định toạ độ của các điểm trên đồ thị
Trang 79Tô màu một đa giác
Trang 81Vẽ các véc tơ ở tạo độ x=1 n, y=1 m; [m,n]=size(x)=size(y)
Hàm quiver(x,y)
y=randn(10)
y=randn(10)
quiver(x,y)
Trang 83Đa giác trong không gian
Trang 84vẽ các mặt cong trong không gian
Để vẽ các mặt cong trong không gian ta phải xác định được toạ độ của các điểm trên mặt (xij, yij, zij) i=1 m, j=1 n toạ độ của cúng được lưu giữ
trong các ma trận có kích thước mn Sau khi xác định được toạ độ chúng ta
sẽ dùng các hàm mesh,surf, pcolar hoặc contour, contour3 để vẽ
Z=(-20x 2 +x)/2+(-15y 2 +y)/2 với (x,y) trong khoảng [-4,4]
Trang 85z=(-20*cos(x)+y)./2+(5*y.^2+sin(y))./2
Trang 87Hàm ẩn
x 3 +y 3 -4xy=0
Vẽ đồ thị sự phụ thuộ y vào x
Trang 89figure(1),pcolor(x,y,z), colormap, gray, shading interp
figure(2),surf(x,y,z)
z=x.*exp(-x.^2-y.^2) z=x.*exp(-x.^2-y.^2)
Trang 90contour(x,y,eval(f2),[0,0],'b:'), hold off
Giải phương hệ phương
trình
x^3+y^3-4*x*y=0
x*y-1/4=0
Trang 92[x,t]=meshgrid(linspace(0,2*pi,100),linspac e(0,2*pi,100))
Trang 94Cau truc vat lieu
Trang 97Bài toán nội suy và xấp xỉ hàm
Mở đầu: trong thực tế nhiều trường hợp chúng ta phải giải các bài toán có liên quan tới một hàm số biểu diễn sự phụ thuộc giữa đại lượng x và y nhưng biểu thức giải tích của hàm số này ta không biết mà chỉ biết một số hữu hạn các cặp giá trị được cho dưới dạng bảng
xi x1 x2 x3 x4 x5 x6 x7
yi y1 y2 y3 y4 y5 y6 y7
Trong trường hợp phải tính giá trị của y tại các điểm x
không có trong bảng thì người ta phải căn cứ vào các
thông tin biểu diễn sự phụ thụôc này để tính giá trị của y
vì thế bài toán được gọi là bài toán nội suy
Trang 98Nội suy và xấp xỉ hàm bằng đa thức đại số
Để xác định hệ số của đa thức nội suy trong
Matlab đã có hàm polyfit:
Polyfit(xi,yi,n)
ở đây n là bậc của đa thức
để tính giá trị của đa thức nội suy tại điểm x thì chúng ta dùng hàm polyval.
Polyval(polyfit(xi,yi,n),x)
Trang 100n=8
Trang 101n=6
Trang 102n=4
Trang 103từ những ví dụ trên chưa đảm bảo đa thức đại số là hàm xấp xỉ tốt với hàm y=f(x) bất
kỳ và bậc đa thức cao cũng chưa đảm bảo cho xấp xỉ tốt hơn.
Trang 104Đa thức bậc 8
Trang 105Đa thức bậc 6
Trang 106để cho xấp xỉ đa thức phù hợp với hàm gốc người
ta có thể đưa ra hai giải pháp sau đây
1 Thay đổi vị trí của các mốc nội suy xi sao cho
Trang 111Một số dạng nội suy từng đoạn Nội suy theo điểm gần nhất
Điểm x nằm giữa xi và xi+1thì
ynôi suy=yi nếu xi-x<xi+1-x
ynôi suy=yi+1 nếu xi-x>xi+1-x
Nội suy theo đường gấp khúc
Nếu chúng ta cần tính giá trị nội suy của hàm ta sẽ tính tung độ của các điểm nằm trên đường gấp
khúc đó
về mặt toán học: các đa thức nội suy từng đoạn này
là các đa thức bậc 1 được xác định theo công thức
X thuộc [x i ,x i+1 ]; y=y i +((y i+1 -y i )/(x i+1 -x i ) )(x-x i )
Trang 112Nội suy theo các đa thức bậc 3 ghép trơn hay còn gọi là nội suy spline
Trang 113y= interp1(xi,yi,x, phương pháp)
'n' nội suy gần nhất
'l' nội suy đường gấp khúc
's' nội suy đa thức bậc 3 ghép trơn
'c' nội suy đa thức bậc 3
Trang 116'spline' for cubic spline
interpolation
'spline' for cubic interpolation
Trang 117Nội suy và xấp xỉ hàm bằng đa thức suy rộng
Đa thức suy rộng là một hàm toán học được xác định bởi một tập hợp các hàm cơ sở
xác định và các hệ số tương ứng với các
hàm trong tập hợp cơ sở này Và đa thức
suy rộng được biểu diễn qua tổ hợp tuyến tính của các hàm cơ sở
giả sử chúng ta có tập hợp các hàm
φ1(x), φ2(x), … φn(x)
φ(x) gọi là đa thức suy rộng
Như vậy để xác định một đa thức suy rộng
trên hệ hàm cơ sở φi(x)
Trang 118giả sử có hàm fx có giá trị cho trong bảng sau
xi x1 y1 x3 x4 x5 x6 x7 xm
yi y1 y2 y3 y4 y5 y6 y7 ym
Chúng ta sẽ nội suy hàm f(x) bằng đa thức suy rộng dựa trên
hệ hàm cơ sở φ1(x).
H àm suy rộng phải đảm bảo
f(xi)=yi với i=1 đến n
Trang 119hệ phương trình gồm m phương trình, n ẩn số a=[a1, a2, … an] là các ẩn phải tìm
a=A\y
Trang 120Ví dụ cho dãy số liệu
xi=0:0.5:10;
yi=[2.3447,1.6068,0.8672,-0.1796,-0.4890,-0.9305, -0.9184, 0.3169,1.5604,2.3635,3.0298,3.1946,2.7402,2.7716,1.6578 , 0.5344,0.2113,0.0618,-0.0373, 0.7939,1.6059];
1.Tìm hàm nội suy f(x) của dãy số liệu trên biết rằng f(x) có dạng sau
f(x)=a +bx + cos(x) + dsin(x)
2.vẽ đồ thị của dẫy số và của hàm nội suy
Vậy
hệ hàm cơ sở là
φ(x)=[1, x,cos(x),sin(x) ]
tìm các hệ số a, b,c,d
Trang 121Chương trình như sau
p=feval(fn,x) y=p*a
function p=fvidu(x)
x=x(:)
p=[ones(size(x)),x,cos(x),sin(x)]
Trang 122%chương trình chính
xi=0:0.5:10;
yi=[2.3447,1.6068,0.8672,-0.1796,-0.4890,-0.9305, -0.9184,
0.3169,1.5604,2.3635,3.0298,3.1946,2.7402,2.771 6,
Trang 124Phép nội suy đa thức và đa thức suy rộng còn được gọi là phép nội suy tuyến tính bởi vì hàm nội suy có thể được biểu diễn dưới dạng tổ hợp tuyến tính của các hệ số cần xác định và việc xác địn các hệ số này dẫn đến việc tìm nghiệm hoặc tựa nghiệm của hệ phương trình đại số tuyến tính Trong trường hợp hàm nội suy không phụ thuộc tuyến tính vào các tham số cần tìm thì chúng ta phải tìm nghiệm hoặc tựa nghiệm của hệ phương trình phi tuyến Trong trường hợp này người ta gọi bài toán nội suy
và xấp xỉ hàm là nội suy và xấp xỉ hàm phi tuyến Nói trung việc giả các phương trình phi tuyến rất phức tạp và cần phải biết giá trị gần đúng ban đầu của chúng Điểm khó nhất của việc giải hệ phương trình phi tuyến trong b ài toán nội suy và xấp xỉ phi tuyến là phải biết giá trị gần đúng ban đầu Trong trường hợp số ẩn số nhiều hơn 2 Trong một số trường hợp đặc biệt chúng ta có thể tuyến tính hoá được biểu thức giải tích của hàm nội suy thì việc giải bài toán trở nên đơn giản vì việc xác định các tham số dẫn đến việc giả các hệ phương trình đại số tuyến tính
Trang 125Một số trường hợp điển hình, hàm nội suy có thể tuyến tính hoá
Trang 126f(x)= a1+a2x+a3.cos(x+a4)
f(x)=a1+a2x+a3[cos(x).cos(a4)-sin(x)sin(a4)]
f(x)=a1+a2x+a3.cos(x).cos(a4)-a3.sin(x)sin(a4)
A1=a1, A2=a2, A3=a3.cos(a4), A4=-a3 sin(a4)
f(x)=A1+A2+A3cos(x)+A4sin(x)
Tìm A1, A2, A3 ,A4 => a1, a2, a3, a4
Trang 127f(x)=1/(a1+a2.cos(x)+ a3sin(x) )
Trang 128The End
Ôn tập tất cả các phần lý thuyết đã học, các bài tập đã ra
Trang 129Tính gần đúng đạo hàm và tích phân hàm 1 biến
Tính đạo hàm
nhiều bài toán thực tế chúng ta phải tính đạohàm của hàm một biến Trong nhiều trườnghợp chúng ta không biết được biểu thức giảitích hoặc biểu thức giải tích quá phức tạp, côngthức đạo hàm rất dài và phức tạp thì người tathường dùng công thức gần đúng tính đạo hàm