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 (3.47 MB, 125 trang )
Kỹ thuật tính toán trong công nghệ hóa học
>> t=(0:.1:2*pi);
>> subplot(2,2,1)
>> plot(t,sin(t))
>> subplot(2,2,2)
>> plot(t,cos(t))
>> subplot(2,2,3)
>> plot(t,exp(t))
>> subplot(2,2,4)
>> plot(t,1./(1+t.^2))
4.2 Vẽ đường
Hàm plot được sử dụng để vẽ dữ liệu trên mặt phẳng. Cho vec tơ x gồm các
hoành độ x1,…,xn và vec tơ y gồm các tung độ y1,…yn, lệnh plot(x,y) sẽ vẽ các điểm
từ (x1,y1) đến (xn,yn). Theo mặc định, các điểm này sẽ được nối theo thứ tự bởi các
đoạn thẳng.
Câu lệnh tổng quát:
Mầu của đường vẽ
Ký tự hiển thị
Nét vẽ
y
. dấu chấm(point)
-
solid
m magenta
O vòng tròn
:
dotted
c
cyan
X dấu x
-.
dashdot
r
red
+ dấu cộng
--
dashed
yellow
22
Kỹ thuật tính toán trong công nghệ hóa học
g
green
* dấu sao
b
blue
s hình vuông
w white
d kim cương
k
∧ tam giác chỉ lên
∨ tam giác chỉ xuống
black
<
tam giác chỉ sang
>
tam giác chỉ sang
trái
phải
p ông sao 5 cánh
h ông sao 6 cánh
Ví dụ:
Lệnh plot(x,y,’ro:’) vẽ đường nối bởi các chấm màu đỏ với điểm dữ liệu là vòng
tròn nhỏ.
Lệnh plot(x,y,’y-’,x,y,’go’) vẽ dữ liệu 2 lần với đường nối liền nét màu vàng và
các điểm dữ liệu là các vòng tròn xanh lá cây.
Để vẽ tứ giác với các đỉnh (0,0), (1,1), (4,2), và (5,-1) ta có thể dùng lệnh:
>> x=[0 1 4 5 0];
>> y=[0 1 2 -1 0];
>> plot(x,y)
Ta cũng có thể gần đúng đồ thị hàm số bằng cách lấy nhiều điểm. Ví dụ vẽ đồ thị
hàm số y = x 3 / [-2;2]. Trước hết, ta lấy vec tơ dòng với các thành phần biến thiên từ -2
đến 2 với độ dài bước chia là 0.05
>> x=-2:.05:2;
Tiếp đó là xác định các giá trị của y bằng cách lấy lũy thừa từng phần tử của x.
>> y=x.^3;
Cuối cùng:
>> Plot(x,y)
Ta đặt tên cho hình vẽ nhờ đánh lệnh
>>title(‘Do thi cua ham f(x)=x^3’)
23
Kỹ thuật tính toán trong công nghệ hóa học
Hình 1: Đồ thị hàm số f ( x) = x 3
Vẽ các đường cong tham số cũng tương tự:
r (t ) = ( 2t cos t /(t +1),2t sin t /(t +1))
với
t ∈[0,4π] .
>> t=0:.1:4*pi;
>> x=2*t.*cos(t)./(t+1);
>> y=2*t.*sin(t)./(t+1);
>> plot(x,y);
>> title( '(2t cos t/ (t+1)),2t sin t/(t+1)' )
Chú ý: các phép toán nhân chia phải được thực hiện trên từng phần tử(nghĩa là .*,
./ hoặc .^).
Để có tỷ lệ chính xác ta dùng:
>> axis equal
Hình 2: Đồ thị hàm số cho bởi phương trình tham số
Để vẽ nhiều đường trên cùng 1 hình ta dùng lệnh “hold on”.
Ví dụ: vẽ 2 đường tròn
trình tham số:
x2 + y2 = 4
và ( x −1) 2 + ( y −1) 2 = 1 . Chuyển sang phương
24
Kỹ thuật tính toán trong công nghệ hóa học
r1 (t ) = ( 2 cos t ,2 sin t ) và r2 (t ) = (1 + cos t ,1 + sin t ) với t ∈[0,2π] .
>> t=0:pi/20:2*pi;
>> plot(2*cos(t),2*sin(t))
>> hold on
>> plot(1+cos(t),1+sin(t))
>> axis equal
>> title('Cac duong tron x^2+y^2=4 va (x-1)^2+(y-1)^2=1')
Hình 3: vẽ đồ thị nhiều hàm trên cùng một hình
Trong không gian 3 chiều thì thay lệnh plot bằng plot3. Ví dụ:
Để vẽ đường tham số r (t ) = (cos(t ), sin(t ), t ) với
t ∈[0,8π]
ta có thể làm như
sau:
t=0:.1:8*pi;
>> plot3(cos(t),sin(t),t)
>> title('(cos t,sin t,t)')
Hình 4a: vẽ đồ thị đường cho bởi phương trình tham số trong không gian 3 chiều
Để vẽ đường trong tọa độ cực ρ = θ 2 , với 0 ≤ θ ≤ π :
>> theta = 0:.2:5*pi;
25
Kỹ thuật tính toán trong công nghệ hóa học
>> rho=theta.^2;
>> polar(theta,rho,'hb')
Hình 4b: vẽ đồ thị trong hệ tọa độ cực
4.3 Vẽ mặt
Để đồ thị hàm số f ( x, y ) trên miền hình chữ nhật
R =[ a, b] × c, d ] ={( x, y ) a ≤ x ≤b & c ≤ y ≤d },
[
Trước hết ta tạo lưới điểm trong miền khảo sát nhờ hàm meshgrid
Ví dụ: vẽ đồ thị hàm số f ( x, y ) = x 2 y − 2 y trên miền chữ nhật
Ta sử dụng lưới vuông với độ dài bước chia 0.1
[ − ,2] × − ,1] .
2
[ 1
>> [x,y]=meshgrid(-2:.1:2,-1:.1:1);
Sử dụng phép toán vec tơ hóa để xác định Z.
>> z=(x.^2).*y-2*y;
Cuối cùng ta vẽ
>> surf(x,y,z)
>> title('Do thi cua ham so f(x,y)=x^2y-2y')
26
Kỹ thuật tính toán trong công nghệ hóa học
Hình 5: Vẽ mặt f ( x, y ) = x 2 y − 2 y trong 3 chiều
Một trong những khó khăn khi vẽ mặt là phải đối mặt với phép chia cho 0. Chẳng
hạn, ta muốn vẽ đồ thị của hàm số
f ( x, y ) =
xy
x + y2
2
trên lưới vuông
[ − ,1] × − ,1] .
1
[ 1
Thực hiện lệnh
>> [x,y]=meshgrid(-1:.1:1);
>> z=x.*y./sqrt(x.^2+y.^2);
Warning: Divide by zero.
Nếu ta cứ vẽ mặt như vậy điểm lưới tại (0,0) sẽ khuyết
Hình 6a: Vẽ mặt
f ( x, y ) =
xy
x + y2
2
Để tránh khỏi tình huống này, một cách đơn giản là hãy xác định lưới sao cho
điểm (0,0) không thuộc điểm chia. Chẳng hạn:
>> surf(x,y,z)
>> [x,y]=meshgrid(-.99:.1:1);
>> z=x.*y./sqrt(x.^2+y.^2);
>> surf(x,y,z)
>> title('Do thi ham so f(x,y)=xy/\surd(x^2+y^2)')
>> axis equal
27
Kỹ thuật tính toán trong công nghệ hóa học
Hình 6b: Vẽ mặt trong 3 chiều tránh khuyết
Ví dụ. Vẽ z=sin(r)/r với
r =
x2 + y2
, −8 ≤ x ≤ 8, −8 ≤ y ≤ 8 .
>> x=-8:.5:8;y=-8:.5:8;
>> [x,y]=meshgrid(x,y);
>> r=sqrt(x.^2+y.^2)+eps;
>> z=sin(r)./r;
>> mesh(x,y,z)
Hình 7: vẽ mặt trong 3 chiều bởi mesh
Điểm khác nhau giữa hai lệnh surf và mesh là: surf tô màu bề mặt,còn mesh thì
không.
28
Kỹ thuật tính toán trong công nghệ hóa học
Chương 5: Các luồng điều khiển
5.1 Các toán tử logic
Lệnh
Kết quả
A=(b>c)
A=1 nếu b>c, tương tự < ,>=, <=
A=(b=c)
A=1 nếu b=c
A=(b~=c)
A=1 nếu b khác c
A= ~b
A=1 nếu b=0
A=(b&c)
A=1 nếu b =true và c=true
A=(b|c)
A=1 nếu b=true hoặc c=true
Bảng 1: mối quan hệ giữa các phép toán logic
Chú ý : toán tử & và toán tử | có mức ưu tiên như nhau trong Matlab,điều đó có
nghĩa là nó sẽ thực hiện từ trái qua phải.
5.2 Lệnh find
Chúng ta có thể trích các phần tử trong vec tơ và ma trận thỏa mãn những điều
kiện nào đó, bằng toán tử xác định vị trí. Chẳng hạn như dùng lệnh xác định vị trí find
29
Kỹ thuật tính toán trong công nghệ hóa học
>> x = [1 1 3 4 1];
>> i = (x == 1)
i=
1
1
0
0
1
>> y = x(i)
y=
1
1
1
>> j = find(x = = 1)
% j là chỉ số của phần tử thỏa mãn x = = 1
j=
1
2
5
>> z = x(j)
z=
1
1
1
Một ví dụ khác :
>> x = -1:0.05:1;
>> y = sin(x) .* sin(3*pi*x);
>> plot (x,y, ’-’); hold on
>> k = find (y <= -0.1)
k=
9
10
11
12
13
29
30
31
32
33
>> plot (x(k), y(k), ’ro’);
>> r = find (x > 0.5 & y > 0)
r=
35
36
37
38
39
40
41
>> plot (x(r), y(r), ’r*’);
Dùng toán tử find trong ma trận một cách tương tự:
>> A = [1
3
-3
-5;
-1
2
-1
0;
3
-7
2
7];
>> k = find (A >= 2.5)
k=
3
4
12
>> A(k)
ans =
30