Học phần Tin ứng dụng thuộc khối kiến thức cơ sở chung của các ngành Đại học kỹ thuật chuyên ngành điện. Trang bị cho sinh viên những kiến thức cơ bản về: Phần mềm Matlab và ứng dụng của nó đ
Trang 1BÀI 7:
CẤU TRÚC ĐIỀU KHIỂN
Trang 2Các phần trình bày
Khái niệm
Cấu trúc for - end
Cấu trúc while - end
Các ví dụ
Trang 3Khái niệm
Các loại vòng lặp cơ bản:
-Vòng lặp for – end
-Vòng lặp while – end
Cách dùng vòng lặp while và for
Sự khác nhau giữa hai vòng lặp này
Trang 4Cấu trúc for – end
Cú pháp:
for k=csđầu:cscuối
Lệnh 1;
Lệnh 2;
………
Lệnh n;
end
Lưu đồ giải thuật
Chú ý:
+ cs đầu và cscuối có
thể là một giá trị bất
kỳ (không nhất thiết
phải là số nguyên),
cũng có thể là một
biểu thức toán học
+ Thường trong lập trình
người ta lấy csđầu và
cscuối là số nguyên
Start
k<=cscuố i
Lệnh
End Yes
No k=csđầu
k=k+1;
Trang 5Lệnh thường sử dụng trong vòng lặp
Lệnh break : khi vòng lặp gặp lệnh này thì chương trình sẽ nhảy ra khỏi vòng lặp
Trang 6Ví dụ 1:
Tính giá trị gần đúng của số e với sai số là 10-10 theo công thức khai triển Macloran sau:
! 4
x
! 3
x
! 2
x
! 1
x 1
e )
x (
Phân tích đề:
-Để tính e, ta cho x=1 trong biểu thức trên
-Xác định số hạng tổng quát của chuỗi số
-Xác định chỉ số đầu và chỉ số cuối: csđầu=0, cscuối=50, giá trị đầu của S=0
-Xác định sai số của giá trị: Sai số ở lần lặp thứ n
-Vì vậy, cần phải giữ lại giá trị của S ở lần lặp trứơc đó để tính sai số
! n
| ) x ( S ) x ( S
|
Trang 7Viết chương trình:
Cần phải viết chương trình con tính giai thừa Chương trình con phải được viết ở một M-file riêng
Chương trình con tính giai thừa:
function kq=giaithua(n)
kq=1;
for k=1:n
kq=kq*k;
end
Chương trình chính tính tổng:
S=0;x=1;
for k=0:50
S1=S;
S=S+x^k/giaithua(k);
if abs(S-S1)<10^(-10)
break;
end end
fprintf(‘Gia tri cua e =%4.12f\n’,S);
Trang 8Ví dụ 2: Bài 6.3a trong sách Thực hành Matlab
Có 3 loại nút (bus-thanh góp) trong mạng điện:
-Nút cân bằng: Nút biết V-, nút có công suất vô cùng lớn
-Nút nguồn: Biết P-V, nút giữ điện áp, các nhà máy điện
-Nút tải: Nút biết trước P-Q
Trang 9Phân tích:
Xuất phát từ phương pháp thế nút: YBusV=I
3 2 1
3 2 1
13 23
23 13
23 13
12 12
13 12
13 12
I I
I V
V
V y
y y
y
y y
y y
y y
y y
Ta được hệ phương trình thế
nút sau:
) 3
( V
S V
) y y
( V
y V
y
) 2
( V
S V
y V
) y y
( V
y
) 1
( V
S V
y V
y V
) y y
(
3
* 3
*
3 23
13 2
23 1
13
2
* 2
*
3 23 2
23 12
1 12
1
* 1
*
3 13 2
12 1
13 12
Trang 10Phân tích:
Điện áp tại nút 1 đã biết, tìm điện áp tại nút 2 và 3 Vì vậy, trong 3 phương trình (1),(2),(3) chỉ giữ lại phương trình (2) và (3)
Hệ phương trình trên không thể giải bằng Gauss V=YBus\I vì I chưa biết
Giải hệ phương trình bằng phép lặp đơn x=(x), đưa hệ phương trình về dạng
V=(V) như sau:
23 13
2 23 1
13 3
* 3
*
3
23 12
3 23 1
12 2
* 2
*
2
y y
1
* V
y V
y V
S V
y y
1
* V
y V
y V
S V
Trang 11Cấu trúc vòng lặp while-end
Cú pháp:
while <điều kiện>
Lệnh 1;
Lệnh 2;
………
Lệnh n;
end
Lưu đồ giải thuật
thức logic hoặc điều kiện có
thể là 1 biểu thức toán học
- Nếu giá trị biểu thức khác 0 thì Matlab hiểu điều
kiện là đúng và thực thi
lệnh, và ngược lại
Start
Điều kiện
Lệnh
End Yes
No
Trang 12Giải lại ví dụ 1 bằng phép lặp while-end
S=0;x=1;saiso=1;k=0;
while saiso>=10^(-10)
S1=S;
S=S+x^k/giaithua(k);
k=k+1;
saiso=abs(S-S1);
end fprintf(‘Gia tri e= %4.12f\n’,S);
Trang 13Giải lại ví dụ 2 bằng phép lặp while-end
Trang 14Sự khác nhau giữa vòng lặp while và for
Sử dụng vòng lặp for-end để tính toán một tập hợp phần tử hữu hạn hay
theo một quy tắc xác định
Xác định rõ số vòng lặp cần sử dụng, các biến số sử dụng trong vòng
lặp: biến thay đổi giá trị theo phương pháp ghi chồng số liệu và biến lưu giá trị, biến lưu kết quả
Sử dụng vòng lặp while – end khi số vòng lặp cần tính toán là không xác
định, chỉ kết thúc với điều kiện đi kèm
Cần chú ý, nếu điều kiện kiểm tra hay bố trí cấu trúc không rõ ràng có thể chương trình không thoát ra được
Trong trường hợp này, chỉ có thể ngưng chương trình bằng phím tắt (Ctrl+C) để thoát ra khỏi chương trình và tìm chổ sai và sửa chữa
Trang 15Ví dụ 3: Bài 6-3a trong sách bài tập
Phân tích:
Điện trở tương đương nhìn vào nút 0 và E: X0=XC Điện trở tương đương nhìn vào nút 1 và E:
X1=(X0+Xcs)//Xc
Điện trở tương đương nhìn vào nút 2 và E:
X2=(X1+Xcs)//Xc
………
Điện trở tương đương nhìn vào nút M và E:
XM=(XM-1+Xcs)//Xc
Từ đó suy ra:
- Nhập giá trị ban đầu cho Xtd=XC; csđầu=1, cscuối=50
- Công thức lặp tổng quát Xtd=(Xtd+Xcs)//Xc
Trang 16Chöông trình
% Nhap so lieu ban dau
Xcs=6;Xc=12;
% Cau 1: Xac dinh dien khang giua nut 1 va E
X1E=Xc*(Xc+Xcs)/(Xc+Xc+Xcs);
fprintf(‘Dien tro X1E=%4.2f\n’,X1E);
% Cau 2: Xac dinh dien tro tuong duong giua E va
M
Xtd=Xc;
for k=1:50
Xtd=Xc*(Xtd+Xcs)/(Xc+Xtd+Xcs);
end
fprintf(‘Dien tro XME=%4.2f\n’,Xtd);