You are on page 1of 16

Bài tập chương 2

Câu 4. Cho một mảng cell lưu trữ họ và tên các sinh viên, ví dụ fullname = {‘Nguyen Van Tí’,’Tran Van
Tho’, ‘Nguyen Canh Chan’,’Tran Luu Nam’, ‘Tan Hiep Phap’}. Hãy lập trình để trả về danh sách xếp
theo thứ tự abc theo tên.
fullname = {'Nguyen Van Ti' 'Tran Van Tho' 'Nguyen Canh Chan' 'Tran Luu Nam'
'Tan Hiep Phap'};
%test = sortrows(strvcat(reverse(strtok(reverse(fullname)))));
[ho, ten_lot] = strtok(fullname); %tach chuoi dau khi gap dau space
str_ho = strvcat(ho); %chuyen cell thanh str
[lot, ten] = strtok(ten_lot);
str_ten = strvcat(ten);
str_lot = strvcat(ho);
str_nguoc = strcat(str_ten," ", str_lot," ", str_ho); %noi chuoi
str_nguoc = sortrows(str_nguoc); %sap xep chu cai dau chuoi theo abc
[ten, lot_ho] = strtok(str_nguoc);
[lot, ho] = strtok(lot_ho);
danh_sach = strcat(ho, " ",lot, " ", ten)
Câu 5. Nhập vào một chuỗi có ký tự và số, hãy thực hiện cộng và trả về tổng của các số. Ví dụ: ‘có 2
chim xanh và 4 chim đỏ trên cành’ trả về 6.
test = 'có 2 chim xanh và 4 chim ?? trên cành';
num_in_test = find(isstrprop(test,'digit'));
tong = 0;
for i=1:1:length(num_in_test)
temp = num_in_test(i);
temp_test = str2double(test(temp));
tong = tong + temp_test;
end

tong

Câu 7. Cho vector A, tìm các phần tử đều xuất hiện ở các hàng.
test = [2 6 7; 7 6 8; 1 6 7 ];
a = [];
uni_test = unique(test);
for i = 1:1:length(uni_test)
row = find(test == uni_test(i));
if (length(test) == length(row))
a(i) = uni_test(i);
end
end
a(a==0)=[]

Câu 8. Cho cấu trúc dữ liệu s. Hãy tìm dữ liệu bị mất trong cấu trúc, thể hiện bằng con số 999 và phục
hồi bằng dữ liệu nội suy là trung bình của hai giá trị liền kề. Ví dụ: s = { ... 'Day Temp' ' 1 -5' ' 2 19' ' 3 1'
' 4 9999' ' 5 3'}; Giá trị trả về là t = [-5 19 1 2 3]; Hãy áp dụng giải thuật cho dữ liệu thu thập thực tế tại:
https://www.ndbc.noaa.gov/view_text_file.php?filename=41nt1h2008.txt.gz&dir=d
ata/historical/stdmet/

s = { ...
'Day Temp'
' 1 -5'
' 2 19'
' 3 1'
' 4 9999'
' 5 3'};
[day, temp] = strtok(s);
arr = str2double(temp);
index_9999 = find(arr==9999); %tim chi so cua gia tri 9999 trong array
if isempty(index_9999)
arr = arr;
else
arr(index_9999) = (arr(index_9999 -1)+ arr(index_9999 +1))/2;
end

t = arr';
t(2:end)

Câu 11. Bài toán tính số bước Kaprekar. Hằng số Kaprekar có giá trị là 6174. Cho một số nguyên
dương bất kỳ nhỏ hơn 10000, ta có thể tiến tới hằng số Kaprekar như sau: Sắp xếp các con số của số
nhập vào theo thứ tự tăng dần và giảm dần và sau đó trừ lấy chêch lệch. Lặp lại quá trình này cho đến
khi mức chênh lệch bằng hằng số Kaprekar. Ví dụ, n = 2376, Bước 1: các con số theo thứ tự tăng dần:
7632, các con số theo thứ tự giảm dần: 2367, độ chênh lệch: 7632 – 2367 = 5265. Bước 2: n = 5265, các
con số theo thứ tự tăng dần: 6552, các con số theo thứ tự giảm dần: 2556, độ chênh lệch: 2996. Tiếp
tục ở Bước 3…
a = 2367;
count = 0;
while(true)

str_a = num2str(a);
str_a_giam_dan = reverse(sort(str_a));
a_giam_dan = str2double(str_a_giam_dan);
str_a_tang_dan = sort(str_a);
a_tang_dan = str2double(str_a_tang_dan);
a1 = a_giam_dan - a_tang_dan;
count = count+1;
if(a1 == 6174)
a1
break;
end
a = a1;
end
count

Câu 12. Cho một chuỗi số, trả về chuỗi các số không trùng lặp. Ví dụ x = [ 1 1 2 3 3], trả về y = [1 2 3].
x = [ 1 1 2 3 3];
y = unique(x,'legacy')

Câu 13. Cho một chuỗi ký tự, trả về chuỗi ký tự không trùng lặp.
arr = [1 2 4 NaN];
nan_index = find(isnan(arr)==1);
arr(nan_index) = arr(nan_index -1);
arr

Câu 14. Cho một chuỗi có chứa các dấu (), trả về kết quả là số dấu () có cân bằng không?
str = input('Nhap ( ):','s')
count_mo_ngoat = 0;
count_dong_ngoat = 0;
length = numel(str);

for i = 1:1:length
if (str(i) == '(')
count_mo_ngoat = count_mo_ngoat + 1;
elseif (str(i) == ')')
count_dong_ngoat = count_dong_ngoat +1;
end
end

if count_dong_ngoat == count_mo_ngoat
display("dau dong ngoat va mo ngoat bang nhau");
else
display("dau dong ngoat va mo ngoat khong bang nhau");
end

Câu 15. Cho một vector số, trả về xác suất xuất hiện của các phần tử trong vector.

test = [1 1 1; 1 1 1; 5 5 5];
uni = unique(test);
arr = [];
for i = 1:1:length(uni)
arr(i) = numel(find(test==uni(i))) / numel(test);
end
arr';
sol = [uni, arr']

Câu 20. Nhập vào một ma trận bất kỳ, kiểm tra và thực hiện xóa hàng nếu hàng có chứa giá trị NaN.
test = [NaN -5 19 1 2 3; 1 2 3 4 5 6; NaN 3 4 5 6 7];
find_nan = isnan(test); %tra ve ma tran neu 1 la nan 0 la ko phai
[row, col] = find(find_nan==1);
if not(isempty(row))
test(row,:) = [];
end
test

Câu 21. Nhập vào một vector số nguyên, trả về giá trị logic là true nếu tồn tại một số là bình phương
của một số khác trong vector. Ngược lại là 0.
D=[1 3 5 ; 2 4 1 ; 3 3 3 ; 2 1 9]
[nr,nc]=size(D)
omega = numel(D)
m=0;
a=2
for i=1:4
for j=1:3
if (D(i,j)==a)
m=m+1
end
if (D(i,j)==a*a)
tr??c
bool=or(true,false)
end
end
end
p=m/omega

Câu 22. Nhập vào một câu và loại bỏ tất cả các nguyên âm trong câu.
nguyen_am = ["a", "e", "o", "i", "u"];
str_test = 'hello world';
str_test = erase(str_test, nguyen_am)

Câu 23. Cho số n, hãy tính tổng các con số tạo nên bình phương của n. Ví dụ, n  5 , thì 2 n  25 , kết
quả trả về là 7
n = 5;
n_binh_phuong = n*n;
a = [];
b = num2str(n_binh_phuong);
for i = 1:1:numel(b)
temp = str2double(b(i));
a(i) = temp;
end
tong = sum(a)

Câu 24. Cho một ma trận bất kỳ, hãy hoán chuyển cột cuối với cột một.
a = [1 2 3; 4 5 6; 7 8 9];
b = a(:,3);
a(:,3) = a(:,1);
a(:,1) = b;
a

Câu 25. Cho ma trận bất kỳ, hãy tìm các phần tử nhỏ hơn trung bình của ma trận và thay thế bằng giá
trị lớn nhất trong ma trận.
test = [ 5 4 3 2 1 ];
idx = findpeaks(test); %tim cac gia tri dong bien nghich bien
if not(isempty(idx))
value = 0;
else
if (test(1) < test(end))
value = 1;
else
value =2;
end
end
value

Câu 26. Cho một vector bất kỳ, trả về 1 nếu vector đồng biến, 2 nếu nghịch biến và 0 nếu không đồng
biến cũng như nghịch biến.
test = [ 5 4 3 2 1 ];
idx = findpeaks(test); %tim cac gia tri dong bien nghich bien
if not(isempty(idx))
value = 0;
else
if (test(1) < test(end))
value = 1;
else
value =2;
end
end
value

27. Tính tổng của n số Fibonacci đầu tiên


n = 10;
a = [1 1];
for i =1:1:n
a(i+2) = a(i) + a(i+1);
end

tong_fibonacci = sum(a)

Câu 29. Viết chương trình có giao diện giải phương trình bậc 2 tổng quát.
%giai phuong trinh bac 2
disp('De giai phuong trinh bac 2 ax^2+bx+c=0 xin moi nhap ')
a=input('Nhap he so a: ');
b=input('Nhap he so b: ');
c=input('Nhap he so c: ');
delta = ((b^2)-(4*a*c));
disp(['He so delta la : ',num2str(delta)])
% disp(delta)
if(delta>0)
disp('Phuong trinh co 2 nghiem :')
x1=(-b+sqrt(delta))/(2*a);
disp([' x1 = ',num2str(x1)]);
x2=(-b-sqrt(delta))/(2*a);
disp([' x2 = ',num2str(x2)]);
elseif(delta==0)
disp('phuong trinh co nghiem kep ')
x=-b/(2*a);
disp(['x1=x2 = ',num2str(x)]);
elseif(delta<0)
disp('phuong trinh vo nghiem ‘)
end

Bài tập chương 4


Câu 1. Giả sử 1 2 , , , X X  X n là các biến ngẫu nhiên độc lập có phân bố đều từ 0 đến 1. Dùng mô
phỏng chứng minh Y n n  n X 1 ma  x( 1 2 , , , X X  ) sẽ hội tụ theo phân bố đều có tham số 1.
N = 10^6;

X = rand(20, 10^6);
%Y = zeros(1,N);
maxX = max(X,[],1);
Y = ones(1, 10^6);
for i =1:10^6
Y(i) = 20.*(1 -maxX(i));
end

h = histogram(Y)

pdf_e = h.Values./(N*h.BinWidth);
axis_x = (h.BinEdges(1:end-1) + h.BinEdges(2:end))/2;
tmax = max(axis_x);
t = 0:0.1:tmax;
F = exp(-t);
%plot(axis_x,pdf_e,t,F,'o');

Câu 2: Thời gian đến trạm của xe buýt có phân bố đều từ 8:00 đến 8:30. Mô phỏng để tìm xác suất
chúng ta đợi từ 5 đến 15 phút, kiểm chứng với lý thuyết

N = 10^6;
a = 0;
b = 30;
% Mô ph?ng
CDF_s = unifrnd(a,b,1,N);

val_CDF_s = numel(CDF_s(CDF_s>=5 & CDF_s <=15))/N


val_CDF_t = (15-a)/(b-a) - (5-a)/(b-a)

Câu 5: Cho X và Y là hai biến phân bố mũ độc lập và đồng nhất. Sử dụng mô phỏng để kiểm chứng
min( , ) X Y cũng là một biến có phân bố mũ. So sánh với lý thuyết.
N = 10^6;
MU = 5;
muX = 20;
muY = 2;
varX = muX^2;

X = exprnd(muX, 1, N);
Y = exprnd(muY, 1, N);
T = min(X,Y);

%histogram(T)
dx = 0.5;
XmT = max(T);
t = 0:dx:XmT
ly_thuyet = (1/muX + 1/muY).*exp((-1/muX - 1/muY)*t);
%history(ly_thuyet)
plot(t,ly_thuyet,'r','LineWidth',2)

PDF_s = zeros(size(t));
for idx = 2:length(t)
PDF_s(idx) = PDF_s(idx) + sum((T >= t(idx-1))&(T < t(idx)))/(dx*N);
end
%histogram(PDF_s)
plot(t,ly_thuyet);
hold on
stem(t,PDF_s,'s');

%plot(t,PDF_s,t,ly_thuyet,'r','LineWidth',2)
%plot(t,ly_thuyet,'y','LineWidth',2)

Câu 7. Cho X và Y là hai biến phân bố mũ độc lập và đồng nhất. Sử dụng mô phỏng để kiểm chứng
max( , ) X Y có phân bố mũ hay không? Kiểm chứng với lý thuyết.
N = 10^6;
MU = 5;
muX = 2;
muY = 1;
varX = muX^2;

X = exprnd(muX, 1, N);
Y = exprnd(muY, 1, N);

T = max(X,Y);

h=histogram(T,50);

dx = 0.5;
XmT = max(T);
t = 0:dx:XmT;
ly_thuyet = (1/muX + 1/muY).*exp((-1/muX - 1/muY)*t);

PDF_s = zeros(size(t));
for idx = 2:length(t)
PDF_s(idx) = PDF_s(idx) + sum((T >= t(idx-1))&(T < t(idx)))/(dx*N);
end
pdf_e = h.Values./(N*h.BinWidth);
axis_x = (h.BinEdges(1:end-1) + h.BinEdges(2:end))/2;
plot(axis_x,pdf_e,'r','LineWidth',2)
hold on
stem(t,ly_thuyet,'r','LineWidth',0.25)

Bài tập chương 5


Bài 5: Hãy mô phỏng kênh truyền nhiễu trắng với điều chế MPSK và kiểm chứng với lý thuyết.
clc
clear all
close all
EbNo = 0:1:10;
SNR = 10.^(EbNo/10);
M = [4 8 16];
for idx = 1:length(M)

BER_t(idx,:)=(2./log2(M(idx))).*qfunc(sqrt(2.*SNR*log2(M(idx)))*sin(pi/M(idx))
);
end

BER_t

N = 10^6;
BER_s = zeros(size(BER_t));
for x = 1:length(M)
for idx = 1:length(SNR)
Ps = SNR(idx)*log2(M(x));
Pn= 1;
m = randi([0 1],1 ,N);
Tx = pskmod(m, M(x),0,'gray');
n = sqrt(Pn/2).*(randn(1,N) + 1i*randn(1,N));
Rx = sqrt(Ps).*Tx + n;
m_ = pskdemod(Rx/sqrt(Ps), M(x), 0, 'gray');
BER_s(x,idx) = BER_s(x,idx) + sum(m~=m_)/(log2(M(x))*N);
end
end
BER_s
semilogy(EbNo,BER_t,'-', EbNo, BER_s,'o','linewidth',1.2);
xlabel('Ty so tin hieu tren nhieu theo dB');
ylabel('BER');
set(gcf,'color','white');
grid on
Bài 6: Hãy mô phỏng kênh truyền nhiễu trắng với điều chế DPSK và kiểm chứng với lý thuyết
clc

clear all

close all
EbNo = 0:1:10;
SNR = 10.^(EbNo/10);

BER_t = 1./(2.*SNR); %cong thuc ly thuyet bi sai


BER_s = zeros(size(BER_t));
N = 10^6;
for idx = 1:length(SNR)
Ps = SNR(idx)*log2(2);
Pn= 1;
m = randi([0 1],1 ,N);
Tx = dpskmod(m, 2,pi/4,'gray');
n = sqrt(Pn/2).*(randn(1,N) + 1i*randn(1,N));
Rx = sqrt(Ps).*Tx + n;
m_ = dpskdemod(Rx/sqrt(Ps), 2, pi/4, 'gray');
BER_s(idx) = BER_s(idx) + sum(m~=m_)/(log2(2)*N);
end

semilogy(EbNo,BER_t,'-', EbNo, BER_s,'o','linewidth',1.2);


xlabel('Ty so tin hieu tren nhieu theo dB');
ylabel('BER');
set(gcf,'color','white');
grid on

Bài 7: Hãy mô phỏng kênh truyền nhiễu trắng với điều chế MQAM và kiểm chứng với lý thuyết.
clc
clear all
close all
EbNo = 0:1:10;
SNR = 10.^(EbNo/10);
M = [4 8 16];
for idx = 1:length(M)
%
BER_t(idx,:)=(2./log2(M(idx))).*qfunc(sqrt(2.*SNR*log2(M(idx)))*sin(pi/M(idx))
);
BER_t(idx,:)=(4./log2(M(idx))).*qfunc(sqrt((3.*SNR*log2(M(idx)))./(M(idx)-
1)));
end

BER_t

N = 10^6;
BER_s = zeros(size(BER_t));
for x = 1:length(M)
for idx = 1:length(SNR)
Ps = SNR(idx)*log2(M(x));
Pn= 1;
m = randi([0 M(x)-1],1 ,N);
Tx = qammod(m, M(x),'gray');
n = sqrt(Pn/2).*(randn(1,N) + 1i*randn(1,N));
Rx = sqrt(Ps).*Tx + n;
m_ = qamdemod(Rx/sqrt(Ps), M(x), 'gray');
BER_s(x,idx) = BER_s(x,idx) + sum(m~=m_)/(log2(M(x))*N);
end
end
BER_s
semilogy(EbNo,BER_t,'-', EbNo, BER_s,'o','linewidth',1.2);
xlabel('Ty so tin hieu tren nhieu theo dB');
ylabel('BER');
set(gcf,'color','white');
grid on

Bài tập chương 6


Bài tập thực hành Môn mô phỏng HTTT
Câu 1. Hãy nêu công thức chuyển đổi đơn vị công suất từ dB sang W và ngược lại.

Áp dụng cho vector công suất phát của nguồn là A = 0, 2, 4...28, 30 dB. Sau đó, sử

dụng chương trình kiểm chứng kết quả trên.


A=(0:2:30);
B=db2pow(A);
disp(B);
A=pow2db(B);
disp(A);

Câu 2: Viết chương trình vẽ đồ thị tín hiệu sóng s(t)= 10cos(10πt+2) hiển thị nhãn trục
hoành  “Time/s”, nhãn trục tung là “Amplitude/v” và tên đồ thị “Detail of the cosine voltage
with frequency 5 Hz”.
t=(0:0.01:2); %vector thoi gian
s=10*cos(10*pi*t+pi/2); % tin hieu
plot(t,s); %ve hinh
xlabel('Time/s');
ylabel('Amplitute');
title('Detail of the cosine voltage with frequency 5HZ');

10
5 2
Câu 3: Sử dụng phương pháp đại số, tính tính phân sau:  ∫ ( x − x + x +3 ) dx
0

a=0;
b=10;
N=1000;
h=(b-a)/N;
X=0;
for j=1:N
xj= a+(j-0.5)*h;
X= X + (xj^5 - xj^2 + xj + 3);
end
X=X*h;
disp(X);

Câu 4: Viết chương trình mô phỏng điều chế và giải điều chế AM với: tần số sóng mang
fc=10Hz, tần số lấy mẫu fs=50Hz và tín hiệu x=sin (2πt+π/6) . Tất cả dạng sóng hiển thị
trong cùng một đồ thị và chú thích rõ ràng.
fs=50;
fc=10;
t=(0:1/fs:5); %vector thoi gian
x=sin(2*pi*t+(pi/6));
hold on;
plot(t,x,'k');
DC=ammod(x,fc,fs); % dieu che
plot(t,DC,'g');
GDC=amdemod(DC,fc,fs); % giai dieu che
plot(t,GDC,'r');

xlabel('Thoi gian');
ylabel('Bien do');
title('Dieu che va giai dieu che AM');
legend('Tin hieu goc','Tin hieu sau dieu che','Tin hieu giai dieu che');
Câu 5: Viết chương trình mô phỏng điều chế và giải điều chế FM với: tần số sóng mang
fc=10Hz, tần số lấy mẫu fs=50Hz và tín hiệu x=sin (2πt+π/6) . Tất cả dạng sóng hiển thị
trong cùng một đồ thị và chú thích rõ ràng.
fs=50;
fc=10;
t=(0:1/fs:5);
fDev = input('nhap vao do lech tan: '); % do lech tan
x= sin(2*pi*t+(pi/6));
hold on;
plot(t,x,'k');
DC=fmmod(x,fc,fs,fDev);
plot(t,DC,'g');
GDC=fmdemod(DC,fc,fs,fDev);
plot(t,GDC,'r');

xlabel('Thoi gian');
ylabel('Bien do');
title('Tin hieu');
legend('Tin hieu goc','Tin hieu sau dieu che','Tin hieu giai dieu che');

 Câu 6. Biến ngẫu nhiên liên tục X phân bố đều trên đoạn [a,b] có hàm mật độ xác suất.
1
{
f x ( x ) = b−a
, a≤ x ≤ b
0 , x> a∨x >b
a. Tìm hàm phân phối xác suất F (x).
x

 b. Tính giá trị trung bình và phương sai của X.


 c. Kiểm chứng bằng chương trình mô phỏng Monte-Carlo
aa=2;
bb=5;
xx= (0:0.5:8);
trial_num = 10^5;
sum_ppdeu(aa,bb,xx,trial_num);
hold on;
theory_ppdeu(aa,bb,xx);
legend('Mo phong','Ly thuyet');
grid on;
xlabel('x'); ylabel('CDF');

function sum_ppdeu(aa,bb,xx,trial_num)
BCDF=zeros(1,length(xx));
for tt=1:length(xx)
for num=1 :trial_num
RV = aa + (bb-aa)*rand;
if(RV <xx(tt))
BCDF(tt) = BCDF(tt)+1;
end
end
end
BCDF=BCDF/trial_num;
plot(xx,BCDF,'ko');
end

function theory_ppdeu(aa,bb,xx)
ACDF=zeros(1,length(xx));
for tt=1:length(xx)
if(xx(tt) <aa)
ACDF(tt) = 0;
else if(aa <= xx(tt) && xx(tt) <= bb)
ACDF(tt) = (xx(tt) - aa)./(bb-aa);
else
ACDF(tt) = 1;
end
end
end
plot(xx,ACDF,'b-');
end

Câu 7. Biến ngẫu nhiên X có phân bố Gauss với trị trung bình μ và phương sai 2. Kiểm chứng
bằng chương trình mô phỏng Monte-Carlo hàm phân bố tích lũy CDF.
x
x−u
−∞
( )
F x ( X )= ∫ f x ( t ) dt =1=Q
σ
trial_num=10^5;
xx=-5:0.5:5;
mean=1;
var=1;
mophong(mean,var,xx,trial_num);
hold on; grid on;
lythuyet(mean,var,xx);
xlabel('x');
ylabel('CDF');
legend('Mo phong','Ly thuyet');

function mophong(mean,var,xx,trial_num)
CDF=zeros(1,length(xx));
for t=1:length(xx)
for num=1:trial_num
RV= mean + sqrt(var)*randn(1,1);
if (RV < xx(t))
CDF(t) = CDF(t) + 1;
end
end
end
CDF = CDF/trial_num;
plot(xx,CDF,'o');
end

function lythuyet(mean,var,xx)
LT=zeros(1,length(xx));
for (t=1:length(xx))
LT(t) = 1 - qfunc((xx(t)-mean)/sqrt(var));
end
plot(xx,LT,'r' );
end

Câu 8: Biến ngẫu nhiên X, Y có phân bố Gauss với trị trung bình 0 và phương sai 2 . Kiểm
chứng bằng chương trình mô phỏng Monte-Carlo hàm phân bố tích lũy CDF của biến
Z=√ X 2 +Y 2

−x 2
F x ( X )=1−exp ( )
2 σ2
, x ≥0

trial_num=10000;
xx=0:0.25:5;
mean=0;
var=1.5;
mophong(mean,var,xx,trial_num);
hold on;
lythuyet(mean,var,xx);
xlabel('x');
ylabel('CDF');
legend('Mo phong','Ly thuyet');
title('Mo phong');

function mophong(mean,var,xx,trial_num)
CDF=zeros(1,length(xx));
for t=1:length(xx)
for num=1:trial_num
X=sqrt(var)*randn(1,1);
Y=sqrt(var)*randn(1,1);
RV=sqrt(X^2+Y^2);
if (RV < xx(t))
CDF(t) = CDF(t) + 1;
end
end
end
CDF = CDF/trial_num;
plot(xx,CDF,'ko');
end

function lythuyet(mean,var,xx)
LT=zeros(1,length(xx));
for (t=1:length(xx))
LT(t)=1-exp(-xx(t).^2/(2*var));
end
plot(xx,LT,'r' );
end

Câu 9: Biến ngẫu nhiên X, Y có phân bố Gauss với trị trung bình 0 và phương sai 1/ √ 2 λ . Kiểm
chứng bằng chương trình mô phỏng Monte-Carlo hàm phân bố tích lũy CDF của biến T=X +Y . 2 2

F (x) = 1 – exp(-𝞴x), x≥0 


x

trial_num=10000;
xx=0:0.2:5;
mean=0;
lamda=1.5;
var=1/(sqrt(2*lamda));

mophong(mean,var,xx,trial_num);
hold on;
lythuyet(lamda,xx);
xlabel('x');
ylabel('CDF');
legend('Mo phong','Ly thuyet');

function mophong(mean,var,xx,trial_num)
CDF=zeros(1,length(xx));
for t=1:length(xx)
for num=1:trial_num
X=(var)*randn(1,1);
Y=(var)*randn(1,1);
RV=X^2+Y^2;
if (RV < xx(t))
CDF(t) = CDF(t) + 1;
end
end
end
CDF = CDF/trial_num;
plot(xx,CDF,'ko');
end

function lythuyet(lamda,xx)
LT=zeros(1,length(xx));
for (t=1:length(xx))
LT(t)=1-exp(-lamda*xx(t));
end
plot(xx,LT,'r' );
end

Câu 10: Hệ thống vô tuyến với nút nguồn S truyền dữ liệu đến nút đích D, trên truyền fading
Rayleigh và công suất phát của nguồn là P .
S

a)Mô phỏng Monte Carlo để kiểm chứng kết quả lý thuyết xác suất dừng của hệ thống. 
PdB = 0:2:20;
LD = 1.5;
gth = 0.75;
bit_frame = 10^5;
PP=10.^(PdB/10);
OUT_SM = zeros(1,length(PP));
%ly thuyet
for aa = 1 : length(PP)
OUT_SM(aa) = 1 - exp((-LD*gth)/PP(aa));
end

%mo phong
OUT_SM1 = zeros(1,length(PP));
for aa = 1 : length(PP)
fprintf('Running %d per %d \n',aa,length(PP));
for bitnum = 1 : bit_frame
hh = 1/sqrt(2*LD)*(randn(1,1)+j*randn(1,1));
SNR = PP(aa)*(abs(hh)^2);
if (SNR < gth)
OUT_SM1(aa) = OUT_SM1(aa) + 1;
end
end
end
OUT_SM1 = OUT_SM1/bit_frame;
figure,
semilogy(PdB,OUT_SM,'bo',PdB,OUT_SM1,'r')
grid on;
legend(‘lythuyet’,’mo phong’);

b) Mô phỏng Monte Carlo để kiểm chứng kết quả lý thuyết dung lượng kênh trung bình của
hệ thống.
PdB1=0:2:20;
PP1=zeros(1,length(PdB1));
for ii1=1:length(PdB1)
PP1(ii1)= 10^(PdB1(ii1)/10);
end
gth1=1;
xS=0;
xD=1;
yS=0;
yD=1;
beta=1;
dSD=sqrt((xS-xD)^2+(yS-yD)^2);
lSD=dSD^beta;
%ly thuyet
C=zeros(1,length(PP1));
for ii1=1:length(PP1)
C(ii1)=1/log(2)*exp(lSD/PP1(ii1))*expint(lSD/PP1(ii1));
end
%mo phong
C1=zeros(1,length(PP1));
for kk = 1 : length(PP1)
for bitnum1 = 1 : bit_frame
hh1 = 1/sqrt(2*lSD)*(randn(1,1)+j*randn(1,1));
SNR1 = PP1(kk)*(abs(hh1)^2);
C1(kk)=C1(kk)+log2(1+SNR1);
end
end
C1=C1/bit_frame;

plot(PdB1,C,'r',PdB1,C1,'o')
grid on;
legend('ly thuyet','mo phong');

câu 12: Giải phương trình bậc 2. 


a=input('nhap a: ');
b=input('nhap b: ');
c=input('nhap c: ');
delta=b^2-4*a*c;
if delta>0
x1= ((-b+sqrt(delta))/(2*a));
x2= ((-b-sqrt(delta))/(2*a));
disp('phuong trinh co 1 nghiem la x1 = ');
disp(x1);
disp('phuong trinh co 1 nghiem la x2 = ');
disp(x2);
else if delta == 0
x=(-b/(2*a));
disp('phuong trinh co 1 nghiem kep la x = ');
disp(x);
else
disp('phuong trinh vo nghiem');
end

câu 13: tính giai thừa


n=input('nhap n: ');
for i = 1:(n-1);
n=n*i;
end
disp(n);

câu 14: tính tổng  từ 1 đến N


n=input('nhap n: ');
for i = 1:(n-1)
n=n+i;
end
disp(n);

câu 15: tính gần đúng


x0=2;
x1=1.5;
while(x0-x1) >0.00001
x0=x1;
x1=(x0^2+2)/(2*x0)
end
disp('gia tri gan dung: ');
disp(x1);

câu 16: vẽ hình tròn 


x=-1:0.001:1;
y=sqrt(1-x.^2);
y(2,:)=-sqrt(1-x.^2);
plot(x,y);
Tính ước lượng số pi:
% T?ng s? l?n th?y
N = 10^3;
% T?o bi?n phân b? ??u trong kho?ng [-1,1]
rng default
x = -1 + 2*rand(1,N);
y = -1 + 2*rand(1,N);
% Tính s? l??ng ?i?m r?i trong hình tròn
148
Nc = sum(x.^2 + y.^2 <=1);
% ??c l??ng s? pi
pi_est = 4*Nc./N
% Sai s? t??ng ??i
abs(pi_est-pi)/pi
Bất đẳng thức Markov:
N = 10^3;
X = rand(1,N);
a = 0.3;
LHS = sum(X >=a)/N
RHS = mean(X)/a
I = (LHS <= RHS)
Bất đẳng thức Chebyshev
N = 10^3;
mu = 2;
sigma = 1;
X = mu + sigma.*rand(1,N);
k =0.3;
LHS = sum(abs(X - mu) >= k*sigma)/N
RHS = 1/k^2
I = (LHS <= RHS)
Định luật số lớn:
N = 10.^[1 2 3 4 5];
mu = 2;
sigma = 1;
epsilon = 0.1;
132
for idx = 1:length(N)
X = mu + sigma.*rand(1,N(idx));
LHS(idx)=sum(abs(mean(X) - mu) >= epsilon)/N(idx);
end
LHS
Định luật giới hạn trung tâm:
% Chi?u dài chu?i
N = 10^4;
% S? l??ng ?i?m ?? v? ?? th? t?n su?t
NoB = 30;
% S? l??ng bi?n ?? c?ng vào
133
M = 20;
% Giá tr? k? v?ng
muX = 2;
% Giá tr? ph??ng sai
varX = muX^2;
% T?ng c?a M bi?n ng?u nhiên phân b? m? có trung bình muX
x = sum(exprnd(muX,M,N),1)/M;
% Bi?u ?? t?n su?t
h = histogram(x,NoB);
pdf_e = h.Values./(N*h.BinWidth);
axis_x = (h.BinEdges(1:end-1) + h.BinEdges(2:end))/2;
% Bi?n ng?u nhiên phân b? Gauss
mean_g = muX;
var_g = varX/M;
pdf_g = pdf('norm',axis_x,mean_g,sqrt(var_g));
% V? bi?u ?? t?n su?t và hàm PDF c?a phân b? chu?n
plot(axis_x,pdf_e,axis_x,pdf_g,'r');
xlabel('Z_n');
ylabel('f_Z(z)');
legend('CLT','PDF')

You might also like