Tải bản đầy đủ (.doc) (24 trang)

BÀI TẬP THỰC HÀNH MATLAB CƠ BẢN

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 (156.46 KB, 24 trang )

Bài tập này cơ tải trên mạng, các em có thể làm thêm để hiểu về matlab

BÀI TẬP THỰC HÀNH MATLAB CƠ BẢN
1. Làm quen Matlab
1.1 Tính bằng tay các biểu thức sau, rồi thử lại bằng Matlab:
a. 2 / 2 * 3=3
b. 6 – 4/ 2 + 7 ^ 2 – 1=52
c. 10 / 2 \ 10 – 3 + 2 * 4=7
d. 3 ^ 2 / 6=1.5
e. 3 ^ 2 ^ 2=81
f. 2 + round(6 / 9 + 3 * 2) / 2 – 3=2.5
g. 2 + floor(6 / 9 + 3 * 2) / 2 – 3=2
h. 2 + ceil(6 / 9 + 3 * 2) / 2 – 3=2.5
k. fix(4/9)+fix(3*(5/6))=2
1.2 Dự đoán kết quả xuất ra màn hình:
a. 2 ; 4=4
b. 2 / 4=0.5
c. 2 \ 4=2
d. 2 , 4
ans =

2

ans =

4

e. 2:4:16
ans =

2



6

10

14

1.3 Cho x = 2, y = 3. Dự đoán lần lượt các kết quả tiếp theo:
z=x
=2
y = y +z
=5
x = y + x – z =5
x+y–z
=8
1.4 Giải phương trình bậc hai sau bằng cách thực hiện từng bước, sau đó kiểm tra với hàm trong
Matlab
1. x 2 − 3 x + 2 =0;


a=1 b=-3 c=2



∆ = b 2 − 4ac = 1



x1 =1 , x2 =2


Kiểm Tra : roots([1 -3 2]) = 2 1
2.

x 2 − x + 2 =0



A=1 b=-1 c=2



∆ = b 2 − 4ac = −7



x1= 0.5000 + 1.3229i , x2= 0.5000 - 1.3229i

Kiểm Tra : roots([1 -1 2]) =0.5000 + 1.3229i , 0.5000 - 1.3229i
1.5 Tạo một số ngẫu nhiên có giá trị từ 0 đến 1 >> a=rand
Tạo một số ngẫu nhiên có giá trị từ 0 đến 100 >> b=100*rand


Tạo một số ngẫu nhiên có giá trị từ n đến m (n

Ghi M-file như sau :
n=input(‘nhap n : ’)
m=input(‘nhap m : ’)
c=n+(m-n)*rand


1.6 Giải các phương trình sau


x3 − 3x + 1 = 0

>>Roots([1 0 -3 1])
ans =
-1.8794
1.5321
0.3473



3 x 4 − 3x 2 + x − 1 = 0

>>Roots([3 0 -3 1 -1])
ans =
-1.2229
1.0000
0.1114 + 0.5101i
0.1114 - 0.5101i

1.7 Cho a =-36, b =15. Tính bằng tay các biểu thức sau, rồi thử lại bằng Matlab
a. mod(a,b)=9 chia lấy dư // MOD(x,y) is x - n.*y where n = floor(x./y)
b. rem(a,b)=-6 chia lấy dư // REM(x,y) is x - n.*y where n = fix(x./y)
c. gcd(a,b)= 3 ước số chung lớn nhất
d. lcm(a,b)= !! bội số chung nhỏ nhất
>> lcm(a,b)
??? Error using ==> lcm
Input arguments must contain positive integers. (a b phải cùng là số dương )


2. Vector
2.1 Tạo một vector chứa các số nguyên từ 31 đến 75. >>A=31:75
Tạo một vector có 10 phần tử có giá trị nguyên được lấy ngẫu nhiên trong khoảng [0, 100]
>>randint(1,10,[0 100]) // >>A=round(100*rand(1,10))
Tạo một vector có 10 phần tử có giá trị nguyên được lấy ngẫu nhiên trong khoảng [-20 ,10]
>>randint(1,10,[-20 10])

2.2 Cho x = [3 1 5 7 9 2 6] dự đốn kết quả các dịng lệnh sau và thử lại bằng Matlab:
a. x(3) =5
b. x(1:7)= 3 1 5 7 9 2 6
c. x(1:end)= 3 1 5 7 9 2 6
d. x(1:end-1) )= 3 1 5 7 9 2
e. x(6:-2:1)= 2 7 1
f. x([1 6 2 1 1]) =3 2 1 3 3
g. sum(x)=33
2.3 Cho x = [2 5 1 6]
a. Cộng thêm 16 vào tất cả các phần tử. >>x+16
b. Cộng thêm 3 vào các phần tử ở vị trí lẻ.
>> x(1:2:end) = x(1:2:end) + 3
x= 5 5 4 6
c. Lấy căn bậc 2 tất cả các phần tử.


>> sqrt(x)
ans = 2.2361 2.2361 2.0000 2.4495
d. Bình phương tất cả các phần tử.
>> x.*x
ans = 4


25 1 36

2.4 Cho x, y lần lượt là các vector cột. x = [3 2 6 8]’, y = [4 1 3 5]’
a. Lấy tổng các phần tử của x cộng thêm vào từng phần tử của y.
>> sum(x)+y
ans =
23
20
22
24
b. Luỹ thừa mỗi phần tử của x với số mũ tương ứng là các phần tử của y.
>> x(:)=x.^y
x=
81
2
216
32768
c. Chia các phần tử của y với các phần tử tương ứng của x. >>y./x
d. Nhân các phần tử của x với các phần tử tương ứng của y, đặt trong vector z. >>z=x.*y
e. Tính tổng các phần tử của z, gán cho w. >>w=sum(z)=72
f. Tính x .* y – w. >> x.*y-w = -60 ; -70 ; -54 ; -32
g.Tích vơ hướng của x và y
Lưu y: x’ là ma trận chuyển vị của x
2.5 Tạo các vector x sau
a. [2, 4, 6, 8, …..2n]
n=input('Nhap n :')
x=2:2:2*n
b. [10, 8, 6, 4, 2, 0, -2, -4.........-2n]
n=input('Nhap n :')
x=10:-2:-2*n

c. [1, 1/2, 1/3, 1/4, 1/5, …..1/n]
n=input('Nhap n :')
format rat
x=1./(1:n)
d. [0, 1/2 2/3, 3/4, 4/5, …....(n-1)/n]
n=input('Nhap n :')
format rat
x=((1:n)-1)./(1:n)
Lưu y: nhập vào giá trị n
2.6 Tạo vector x với các phần tử là xn = (-1)n+1/(2n - 1). Tính tổng 100 phần tử đầu tiên của x.
n=input('Nhap n :')
format rat


x =((-1).^((1:n)+1))./((2.*(1:n) - 1))
n=100
>> sum(x)
ans = 1529/1953

3. Ma trận
3.1 Cho x = [1 4 8], y = [2 1 5] và A = [3 1 6 ; 5 2 7]
giải thích; rồi thử lại bằng Matlab :
a. x + y = 3
5
13
b. x + A = ??? Error using ==> +

Xét xem dịng lệnh nào hợp lệ, dự đốn kết quả,

Matrix dimensions must agree.

c. x’ + y = Matrix dimensions must agree
d. A – [x’ y’] = Matrix dimensions must agree
e. [x ; y’] All rows in the bracketed expression must have the same number of columns.
f. [x ; y]
1

4

8

2

1

5

g. A – 3
0

-2

3

2

-1

4

3.2 Cho A = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5], dự đốn kết quả, giải thích; rồi thử lại bằng Matlab:

a. A’=
2

3

8

7

1

1

9

5

2

7

6

5

b. A(:,[1 4])
ans =
2

7


3

6

8
5
c. A([2 3], [3 1])
ans =
5

3

2
8
d. reshape(A, 2, 6)
ans =
e. A(:) =
2
3
8
7
1
1
9
5

2

8


1

9

2

6

3

7

1

5

7

5


2
7
6
5


f. flipud(A)
ans =

8

1

2

5

3

1

5

6

2

7

9

7

7

9

7


2

6

5

1

3

5

2

1

8

g. fliplr(A)
ans =

h. [A; A(end,:)]
ans =
2

7

9

7


3

1

5

6

8

1

2

5

8

1

2

5

2

7

9


7

3

1

5

6

8

1

2

5

i. A(1:3,:)
ans =

j. [A; A(1:2, :)]
ans =
2

7

9


7

3

1

5

6

8

1

2

5

2

7

9

7

3

1


5

k. sum(A) ans =
l. sum(A’) ans =
m. sum(A, 2)

6

13
25

9
15

16
16

18

ans =
25
15
16
n. [ [ A ; sum(A) ] [ sum(A,2) ; sum(A(:)) ] ]
ans =
2

7

9


7

25

3

1

5

6

15

8

1

2

5

16

13

9

16


18

56

3.3 Cho ma trận A = [2 4 1 ; 6 7 2 ; 3 5 9], viết lệnh Matlab để
a. Gán cho vector x là dòng thứ nhất của A. >>x=A(1,:)
b. Gán cho ma trận y là hai dòng còn lại (cuối) của A. >>y=A(end-1:end,:)
c. Tính tổng theo dịng ma trận A. >>sum(A,2)


d. Tính tổng theo cột ma trận A. >>sum(A,1)
e. Tìm giá trị lớn nhất và nhỏ nhất của ma trận. >>max(A) , min(A)
f. Tính tổng các phần tử của A >>sum(A(:))
3.4 Hãy tạo ra ma trận 4x4 có giá trị nguyên nằm trong khoảng [-10,10] , Sau đó:
A=randint(4,4,[-10,10])
a. Cộng mỗi phần tử của ma trận cho 15
>> A+15
b. Bình phương mỗi phần tử của ma trận
>> A.*A // >> A.^2
c. Cộng thêm 10 vào các phần tử ở dòng 1 và dòng 2
>>A([1 2],:)=A([1 2],:)+10
d. Cộng thêm 10 vào các phần tử ở cột 1 và cột 4
>> A(:,[1 4])=A (:,[1 4])+10
3.5 Cho vectơ x=[2 4 1 6], y=[5 9 1 0]. Hãy tạo ra ma trận
a. 4x6 toàn là số 0,b. 4x5 toàn là số 1, ma trận đơn vị 5x5
>> zeros(4,6)
>> ones(4,5)
>> eye(5,5)
b. B có tính chất: dịng 1 và 4 có giá trị là vectơ x, dịng 2 và 3 có giá trị là vectơ y

>> B=[x;y;y;x]
c. C có tính chất: cột 1 và 3 có giá trị là vectơ x, cột 2 và 4 có giá trị là vectơ y
>> C=[x’ y’ x’ y’]
3.6 Cho A = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5; 1 2 3 5], viết lệnh Matlab để
a. Gán cho ma trận B là các cột ở vị trí chẵn
>> B=A(:,2:2:end)
b. Gán cho ma trận C là các dịng ở vị trí lẻ
>> C=A(1:2:end,:)
c. Gán lại A thành chuyển vị của nó
>>A=A’
d. Tính nghịch đảo mọi phần tử của A
>> 1./A
e. Lấy căn bậc hai mọi phần tử của A
>> sqrt(A)

4. Vẽ đồ thị
4.1 Vẽ đồ thị hàm số x, x3, ex và e^(x2) với 0 < x < 4
>> plot(x,x)

>> plot(x,x.^3)

>> plot(x,exp(x.^2))

4.2 Vẽ đồ thị hàm số f(x) = sin(1/x) với 0.01 < x < 0.1.
>> plot(x,sin(1./x))

Ko có ./ sẽ báo Matrix dimensions must agree.

4.3 Vẽ hai hàm y = x 2 và y = s in3x trên cùng một đồ thị, ghi chú thích
>> plot(x,x.^2)

>> hold on
>> plot(x,sin(3.*x))
4.4 Vẽ hàm số y = x 3 − 3 x + 1 sử dụng hàm plot và fplot
>> x=-3:1:3; plot(x, x.^3-3.*x+1)
>> f=inline('x.^3-3.*x+1');fplot(f,[-3 3])


5. Biểu thức logic
5.1 Cho x = [1 5 2 8 9 0 1] ,y = [5 2 2 6 0 0 2] giải thích kết quả các dịng lệnh sau:
x =
1
5
2
8
9
0
1
y =

5

2

2

6

0

0


2

=
=
=

0
0
0

1
1
0

0
0
1

1
1
0

1
1
0

0
0
1


0
0
0

1
1
1
1
1
0
0

0
0
1
1
1
1
1

1
1
1
1
1
0
0

0

0
1
1
1
1
1

0
0
1
0
0
1
1

1
1
0
0
0
0
0

1
1
1
1
1
0
0


a. x > y
b. y < x
c. x == y

d. x <= y
=
e. y >= x
=
f. x | y
=
g. x & y
=
h. x & (-y) =
i. (x > y) | (y < x)
j. (x > y) & (y < x)

5.2 Cho x = 1:10 và y = [3 1 5 6 8 2 9 4 7 0], dự đốn kết quả, giải thích và thử lại bằng Matlab:
a. (x > 3) & (x < 8) = 0
0
0
1
1
1
1
0
0
b. x(x > 5)
= 6
7

c. y(x <= 4)
= 3
1
d. x( (x < 2) | (x >= 8) ) = 1
8
e. y( (x < 2) | (x >= 8) ) = 3
4
f. x(y < 0) = Empty matrix: 1-by-0

8
5

9
6
9
7

0

10
10
0

Từ BT 5.2 này, ta đã có một kỹ thuật trích các giá trị của một vector theo chỉ số là một biểu thức logic,
hay nói gọn hơn là chỉ số logic.
5.3 Cho x = [3 15 9 12 -1 0 -12 9 6 1], viết lệnh thực hiện:
a. Chuyển các giá trị dương thành giá trị 0. >> x(x>0)=0
b. Chuyển các bội số của 3 thành số 3. >> x(mod(x,3)= =0)=3
c. Nhân các giá trị chẵn cho 5. >> x(mod(x,2)= =0)=x(mod(x,2)= =0)*5
d. Gán cho vector y các giá trị lớn hơn 10 của x. >> y=x(x>10)

e. Chuyển các giá trị nhỏ hơn trung bình cộng thành giá trị 0. >> x(x5.4 Tạo vector x = randperm(35) Viết các lệnh để tính giá trị hàm sau sử dụng chỉ số logic:
y(x) = 2
nếu
x<6
y(x) = x - 4 nếu 6 <= x < 20
y(x) = 36 - x nếu 20 <= x <= 35
>> y(x<6)=2
>> y((x>=6)&(x<20))=x((x>=6)&(x<20))-4
>> y((x>=20)&(x<=35))=36-x((x>=20)&(x<=35))

6. Câu lệnh if
Dự đoán kết quả và thử lại bằng Matlab:
6.1

if n > 1
m = n+1
else
m=n–1
end

6.2 if z < 5
w = 2*z
elseif z < 10
w=9-z
elseif z < 100
w = sqrt(z)

a. n = 7 m = ? = 8
b. n = 0 m = ? = -1

c. n = -10 m = ? = -11

a. z = 1 w = ? =2
b. z = 9 w = ? = 0
c. z = 60 w = ? = 1921/248
d. z = 200 w = ? = 200


else
w=z
end
6.3 if T < 30
h = 2*T + 1
elseif T < 10
h=T–2
else
h=0
end

a. T = 50 h = 0
b. T = 15 h = 31
c. T = 0 h = 1

6.4 if 0 < x < 10
y = 4*x
elseif 10 < x < 40
y = 10*x
else
y = 500
end


a. x = -1
b. x = 5
c. x = 30
d. x = 100

y = 500
y = 20
y = 300
y = 500

Viết các script để tính các hàm sau:
6.5 h(T) = T - 10
khi 0 < T < 100
= 0.45 T + 900 khi T > 100
if (T>0)&(T<100)
h=T-10
elseif T>100
h=0.45*T+900
end
Thử các trường hợp: a. T = 5. >h= -5
b. T = 110 >h= 1899/2
6.6 f(x) = -1
=0
=1

nếu x < 0
nếu x = 0
nếu x > 0


if x>0
f=1
elseif x=0
f=0
else
f=-1
end
So sánh với hàm sign của MATLAB.
6.7 t(y) = 200
= 200 + 0.1 (y - 10,000)
= 1,200 + 0.15 (y - 20,000)
= 5,700 + 0.25 (y - 50,000)
if y<=10000
t=200
elseif (y>10000)&(y<=20000)
t=200 + 0.1*(y - 10000)
elseif (y>20000)&(y<=50000)
t=1200 + 0.15*(y - 20000)

khi y <= 10,000
khi 10,000 < y <= 20,000
khi 20,000 < y <= 50,000
khi 50,000 < y


elseif y>50000
t=5700 + 0.25*(y - 50000)
end
Thử các trường hợp: a. y = 5,000
b. y = 17,000

c. y = 25,000
d. y = 75,000

t=200
t=900
t=1950
t=11950

7. Vòng lặp
7.1 Cho vector x = [1 8 3 9 0 1], viết các dịng lệnh để
a. Tính tổng tất cả các phần tử. (So sánh kết quả với lệnh sum.)
s=0;
n=size(x,1)*size(x,2);
for i=1:n
s=s+x(i);
end
s
Kết quả s=22
Giống hàm sum(x)=22
b. Viết hàm tính tổng dãy con từ 1 đến j. (So sánh kết quả với lệnh cumsum.)
n=size(x,2)
if n<=1
x
else
for j=2:n
x(:,j)=x(:,j)+x(:,j-1);
end
KQ=x
end
x=

1

2

3

4

1

1

2

1

4

4

0

0

4

11

1


1

>> cumsum(x,2)
ans =
1

3

6

10

1

2

4

5

4

8

8

8

4


15

16

17

Run scripts :
KQ =


1

3

6

10

1

2

4

5

4

8


8

8

4

15

16

17

Vậy kết quả giống nhau
7.2 Tạo ma trận M x N các số ngẫu nhiên (dùng lệnh rand). Chuyển các giá trị nhỏ hơn 0.2 thành 0,
các giá trị lớn hơn hay bằng 0.2 thành 1.
M=input('nhap M: ')
N=input('nhap N: ')
X=rand(M,N)
X(X<0.2)=0;
X(X>=0.2)=1
////////
M=input('nhap M: ')
N=input('nhap N: ')
for i=1:M
for j=1:N
X(i,j)=rand
end
end
X(X<0.2)=0;
X(X>=0.2)=1;

X
7.3 Cho x = [4 1 6] , y = [6 2 7] tính các mảng/vector/ma trận sau
a. aij = xiyj
x = [4 1 6] , y = [6 2 7]
for i=1:3
for j=1:3
a(i,j)=x(i)*y(j);
end
end
a
b. bij = xi/yj
x = [4 1 6] , y = [6 2 7]
for i=1:3
for j=1:3
b(i,j)=x(i)/y(j);
end
end
b


c. ci = xiyi, tính tổng các phần tử của c.
x = [4 1 6] , y = [6 2 7]
for i=1:3
c(i)=x(i)*y(i);
end
sum(c)
d. dij = xi/(2 + xi + yj)
x = [4 1 6] , y = [6 2 7]
for i=1:3
for j=1:3

d(i,j)=x(i)/(2+x(i)+y(j));
end
end
d
7.4 Viết script để tính trong một vector các số ngẫu nhiên (sử dụng lệnh rand):
a. Có bao nhiêu phần tử đứng trước một phần tử đầu tiên có giá trị nằm trong khoảng 0.8 đến 0.85.
x=rand(1,10);
n=1;
while (x(n)<0.8)|(x(n)>0.85)
n=n+1;
if n>10
break
end
end
if n>10
disp('Vo nghiem')
else
ketqua=n-1
end
b. Có bao nhiêu phần tử trong khoảng [0.1, 0.4] đứng trước phần tử đầu tiên có giá trị lớn hơn trung
bình của vector đó. (Dự đốn kết quả trước khi thực thi lệnh.)
x=rand(1,10)
n=1;
x
TrungBinh=mean(x)
while x(n)<=mean(x)
n=n+1;
end
strcat('so thu : ',num2str(n),' la so dau tien co gia tri lon hon trung binh')
if n==1

disp('Ko co so nao thuoc khoang [0.1 0.4] truoc gia tri dau tien lon hon trung binh')


else
y= x((x(1:n-1)>=0.1)&(x(1:n-1)<=0.4));
if isempty(y)==1
disp('Ko co so nao thuoc khoang [0.1 0.4] truoc gia tri dau tien lon hon trung binh')
else
strcat('co :',num2str(length(y)),' so thuoc khoang [0.1 0.4] truoc gia tri dau tien lon hon trung binh')
end
end
7.5 Viết một script yêu cầu nhập một nhiệt độ Fahrenheit rồi chuyển sang độ Celcius tương ứng. Script
vẫn chạy đến khi không nhập nhiệt độ nữa thì thơi. [Sử dụng hàm isempty.]
F=input('Nhap vao nhiet do Fahrenheit : ')
while isempty(F)==0
C=(F-32)*5/9
format rat
F=input('Nhap vao nhiet do Fahrenheit : ')
end
7.6 Viết một script yêu cầu: Nhập liên tục các số, dừng lại khi nhập 0, và xuất ra trung bình cộng của
các số dương và trung bình cộng của các số âm của dãy số nói trên
s=[]
x=input('Nhap vao mot so: ')
while x~=0
s=[s x];
x=input('Nhap vao mot so: ')
end
daysoduong=s(s>0)
Tbd=mean(daysoduong)
daysoam=s(s<0)

Tba=mean(daysoam)
7.7 Cần có tổng số 50 từ 3 loại bạc 1, 2 và 5 đồng. Viết đoạn cript để tìm tất cả các phương án có thể.
s=[]
for i=0:50
for k=0:25
for h=0:10
if (i+k*2+h*5)==50
s=[s;i k h]
end
end
end
end
 ax + by = c
7.8 Giải hệ phương trình 
Ở đây phải nhập a,b,c,d,e,f
 dx + ey = f
a=input('nhap a: ')


b=input('nhap b: ')
c=input('nhap c: ')
d=input('nhap d: ')
e=input('nhap e: ')
f=input('nhap f: ')
ngiem=[a b;d e]\[c;f]
7.9 Viết script cho phép nhập vào a, b, c. Sau đó giải phương trình bậc hai ax 2 + bx + c = 0
a=input('nhap a: ')
b=input('nhap b: ')
c=input('nhap c: ')
Delta=b^2-4*a*c;

x1=(-b-sqrt(Delta))/(2*a)
x2=(-b+sqrt(Delta))/(2*a)

8. Lập trình
8.1 Lập chương trình tính n! , Cnk , x n (Không dùng hàm của Matlab)
n=input('Nhap he so giai thua can tinh vao day:');
while n<0|n~=round(n)
disp('Phai nhap mot so nguyen duong')
n=input('Nhap lai he so giai thua can tinh :')
end
if n==0
sprintf('Ket qua %d!=1',n)
else
KQ=1;
for i=1:n
KQ=KQ*i;
end
sprintf('Ket qua %d!=%d',n,KQ)
end
8.2 Viết hàm tính giá tri lớn nhất và nhỏ nhất của ma trận (Không sử dụng hàm max va min)
Theo từng phần tử
max=x(1);
for i=1:size(x,1)*size(x,2)
if x(i)>max
max=x(i);
end
end
max
Theo cột :
MAX=[];

for j=1:size(x,2)
max=x(1,j);
for i=1:size(x,1)
if x(i,j)>max
max=x(i,j);
end


end
MAX=[MAX max];
end
MAX
Theo hàng :
MAX=[];
for i=1:size(x,1)
max=x(i,1);
for j=1:size(x,2)
if x(i,j)>max
max=x(i,j);
end
end
MAX=[MAX ;max];
end
MAX
8.3 Sắp xếp lại 1 vectơ theo chiều tăng dần của các phần tử
kq=[];
while isempty(x)==0
min=x(1)
n=1
for i=1:size(x,2)

if x(i)min=x(i);
n=i;
end
end
kq=[kq x(n)];
x(n)=[];
end
kq

8.4 Tính giá trị của số Pi sử dụng chuỗi

π 2 − 8 +∞
1
=∑
2
2
16
n =1 (2 n − 1) (2 n + 1)
Giá trị của n cần đạt đến bao nhiêu để độ chính xác là 1e-12 ? Độ chính xác là bao nhiêu khi n = 100?
8.5 Dãy số Fibonacci có mối quan hệ sau: Fn = Fn-1 + Fn-2, với F0 = F1 = 1.
a. Tính 10 số Fibonacci đầu tiên.
n=input('Do lon:');
s=[];
if n==1|n==2
s=1;
else
s=[1 1]
for i=3:n
s= [s (s(i-1)+s(i-2))];

end


end
s
b. Trong 50 số Fibonacci đầu tiên, tính tỷ lệ Fn / Fn-1. Nhận xét gì các giá tỷ lệ này so với “tỷ lệ
vàng” ( (1 + sqrt(5))/2 )=1.6180.
1.0000 1.0000 2.0000 1.5000
1.6182

1.6180

1.6181

1.6667

1.6000

1.6250

1.6154

1.6190

1.6176

1.618 (13) 1.6180

1.6180


1.6180

1.6180

1.6180

1.6180

8.6 Đa thức Legendre (Pn(x)) được định nghĩa qui nạp như sau
(n+1) Pn+1(x) - (2n+1) Pn(x) + n Pn-1(x) = 0
Trong đó P0(x) = 1, P1(x) = x và P2(x) = (3x2 - 1)/2. Tính 3 đa thức Legendre tiếp theo và vẽ 6 đa
thức này trong khoảng [-1,1]
8.7 Viết script yêu cầu nhập một số tự nhiên n, rồi dựa vào giá trị của nó thực hiện hoài việc chuyển
giá trị:
Trong khi n lớn hơn 1, thay giá trị của nó bằng n/2 nếu n chẵn và nếu n lẻ thì thay bằng (3*n+1).
Tính chiều dài dãy lặp lại.Ví dụ: n =10, dãy số là 5, 16, 8, 4, 2, 1, do đó chiều dài dãy là 6.
n=input('So n:');
s=[];
while n>1
if mod(n,2)==0
n=n/2;
s=[s n] ;
else
n=n*3+1;
s=[s n] ;
end
end
s
Vẽ đồ thị mô tả chiều dài l dãy lặp lại ứng với các giá trị của n từ 2 đến 30. Ví dụ khi n = 10, l = 6; khi
n = 15, l = 17… Có nhận xét gì

function y=backa(n);
s=[];
while n>1
if mod(n,2)==0
n=n/2;
s=[s n] ;
else
n=n*3+1;
s=[s n] ;
end
end
y=length(s);


end
8.8 Viết hàm tính tích dãy con bắt đầu từ phần tử đầu tiên của một vector. Cho vector x, tích dãy con
thứ j bằng
pj = (x1)(x2) ... (xj) với j chạy từ 1 đến chiều dài l của vector x. Viết hàm bằng 2 cách:
a. Sử dụng vòng lặp for.
x=[1 2 3 4 5 ;1 1 1 5 2;1 0 1 0 2]
n=size(x,2)
if n<=1
x
else
for j=2:n
x(:,j)=x(:,j).* x(:,j-1);
end
KQ=x
end
8.10 Viết hàm sinh ngẫu nhiên ma trận các số nguyên:

function A = randint(a,b,M,N)
trong đó a và b là các chận dưới và chận trên, cịn M và N là kích thước của ma trận (số dòng, số cột).
function A = randint(a,b,M,N)
for i=1:M
for j=1:N
A(i,j)=a+(b-a)*rand;
end
end
a. Thử lại với các dòng lệnh như sau:
x = randint(10,17,10,1);
hist(x,10:17)
Nhận xét biểu đồ mô tả.




Ở đây chúng ta có 10 giá trị x ngẫu nhiên từ 10>17

x=
16.6509 11.6180 14.2479 13.4019
16.2391 15.3347 13.1953 10.1295
15.7499 13.1129
Biểu đồ miêu tả có khoảng bao nhiêu x đạt các lân cận giá trị 10,11,12,13,14,15,16,17
x = randint(7,-2,10,1);
hist(x,-2:7) (tuy ngược nhưng không sao)
xem lại điều kiện tham số cho đúng.


TUẦN 2: MA TRẬN VÀ MẢNG
Mở chương trình MATLAB và thực hiện các bài tập sau trong cửa sổ Command line:

1. Cho x = [3 1 5 7 9 2 6], kết quả các biểu thức sau đây là gì ?








x(3)=5
x(1:7)=3 1 5 7 9 2 6
x(1:end)= 3 1 5 7 9 2 6
x(1:end-1)= 3 1 5 7 9 2
x(6:-1:1) = 2 7 1
x([1 6 2 1 1])= 3 2 1 3 3
sum(x)= 33

2. Cho ma trận A = [ 2 4 1 ; 6 7 2 ; 3 5 9], viết câu lệnh thực hiện









Gán hàng thứ 1 của A cho một vectơ tên x1
 x1=A(1,:)
Gán 2 hàng cuối cùng của A cho một vectơ tên y

C1: y=A([2 3],:)
C2: y=A([end-1 end],:)
Tính tổng các cột của A
sum(A,1) // sum(A)
Tính tổng các hàng A
sum(A,2)

e)
Ta có
2 4 1
A =  6 7 2 
 3 5 9 
>>B=mean(A)
B=
3.6667

5.3333

4.0000

>>C=[B;B;B]
C=
3.6667 5.3333 4.0000
3.6667 5.3333 4.0000
3.6667 5.3333 4.0000
>>E=A-C
E=
-1.6667 -1.3333 -3.0000
2.3333 1.6667 -2.0000
-0.6667 -0.3333 5.0000

>>F=E.*E
F=
2.7778 1.7778 9.0000
5.4444 2.7778 4.0000
0.4444 0.1111 25.0000
>> G=sum(F)
G=
8.6667 4.6667 38.0000


>> H=G/(size(A,1)-1)
H=
4.3333 2.3333 19.0000
>> L=sqrt(H)
L=
2.0817 1.5275 4.3589 .

(Sample Standard Deviation)

>>e= L/sqrt(size(A,1))
=
1.2019

0.8819

2.5166

Hoặc chỉ cần gõ

N = size(A,1), e = std(A)/sqrt(N)

e=
1.2019

0.8819

2.5166

Cú pháp std(X,0,1) cho cột và std(X,0,2) cho hàng với độ lệch mẫu tính bởi N-1
Cú pháp std(X,1,1) cho cột và std(X,1,2) cho hàng với độ lệch tính bởi N
3. Cho ma trận: C=[6 9 5 1; 8 7 2 3 ; 1 3 4 4 ; 5 2 8 2] , D=[4 8 ; 3 7 ; 2 3; 5 1]
a. Tạo ma trận E1 là 2 cột nằm giữa của ma trận C sử dụng toán tử ‘:’
E1=C(:,[2 3])
=> E1 =
9
7
3
2

5
2
4
8

b. Tạo ma trận E2 từ hàng 1 và 2 và cột 2 và 3 của ma trận C sử dụng toán tử ‘:’
E2=
c. Tạo ma trận E3 bằng cách ghép 2 ma trận E1 và D với nhau. d. Tìm tích C24 và D12.
• E3=[E1 D]
• B=C(2,4)*D(1,2)=24
4. Cho các vectơ x = [1 4 8], y = [2 1 5] và A = [3 1 6 ; 5 2 7], xác định
biểu thức nào sau đây viết đúng và cho kết quả hợp lý. Nếu khơng đúng, giải thích vì sao ? Sử dụng lệnh

whos có thể có ích trong bài này.
a. x + y >Đúng
>>x+y
ans =
3 5 13
b. x + A >
Sai vì hai ma trận khác kích cỡ
• ??? Error using ==> +
• Matrix dimensions must agree.
c. x' + y >
Sai vì hai ma trận khác kích cỡ
• ??? Error using ==> +
• Matrix dimensions must agree.
d. A - [x' y'] > Sai vì hai ma trận khác kích cỡ
• ??? Error using ==> • Matrix dimensions must agree
e. [x ; y'] > Sai vì hai ma trận khác kích cỡ
• ??? Error using ==> vertcat
• All rows in the bracketed expression must have the same
• number of columns.


f. [x ; y] > Đúng
ans =
1 4 8
2 1 5
g. A - 3 > Đúng
ans =
0 -2 3
2 -1 4
5. Cho ma trận A = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5], giải thích kết quả các lệnh sau:

a. reshape(A,2,6)
ans =
2 8 1 9
3 7 1 5

2
7

6
5

Nếu
>> reshape(A,2,9) sẽ lỗi
??? Error using ==> reshape
To RESHAPE the number of elements must not change.
b. [ [ A ; sum(A) ] [ sum(A,2) ; sum(A(:)) ] ]
>>[ [ A ; sum(A) ]
ans =
2 7 9 7
3 1 5 6
8 1 2 5
13 9 16 18
Nếu có sai sót sẽ báo
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns
>> [ sum(A,2) ; sum(A(:)) ]
ans =
25
15

16
56
>>X= [ [ A ; sum(A) ] [ sum(A,2) ; sum(A(:)) ] ]
X=
2
3
8
13

7
1
1
9

9 7 25
5 6 15
2 5 16
16 18 56

Nếu có sai sót sẽ báo
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of rows

6. Cho ma trận A = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5], viết lệnh thực hiện
a. Gán các cột lẻ của A cho ma trận B
>> B=A(:,1:2:end)
B=
2 9
3 5

8 2
b. Gán các cột chẵn của A cho ma trận C
>> C=A(:,2:2:end)
C=


7 7
1 6
1 5
c. chuyển A thành ma trận 4 hàng 3 cột
>> reshape(A,4,3)
ans =
2 1 2
3 1 7
8 9 6
7 5 5
d. Tìm ma trận với các phần tử giá trị nghịch đảo của mỗi phần tử trong A
>> B=1./A
B=
0.0826 0.1575 0.0461
0.1976 0.3745 0.0695
-0.2994 -0.1266 0.1083
e. Tính ma trận với các phần tử căn bậc 2 của mỗi phần tử trong A
>> C=sqrt(A(:,:))
C=
3.4799
2.5199
4.6583
2.2494
1.6340

3.7921
0 + 1.8276i 0 + 2.8107i 3.0381
8. Dự đoán kết quả của các câu lệnh sau và kiểm tra lại bằng Matlab:
a. x = ones(1,10)
ones( hàng , cột )
x=

b. y =zeros(5,1)

zeros(hàng,cột)

1

1

1

1

1

1

1

1

1

1


y=
0
0
0
0
0

c. z = linspace(1,4,5)
z=
1.0000 1.7500 2.5000

3.2500

4.0000

d. t = logspace(1,3,4)
t=
10
100
1000

e. u = rand(2,4)
ans =
0.3784
0.8600

9. Cho ma trận A=[12.11 -7.9 9.23; 5.06 6.35 21.7;-3.34 2.67 14.38]
viết lệnh Matlab để:
a. Tìm ln của giá trị tuyệt đối tất cả các phần tử của A

>>A=abs(A);
>> log(A)
ans =
2.4940
1.6214
1.2060

2.0669
1.8485
0.9821

2.2225
3.0773
2.6658

0.8537
0.5936

0.4966 0.8216
0.8998 0.6449


b. Tìm log cơ số 10 của giá trị tuyệt đối tất cả các phần tử của A
>>A=abs(A(:,:));
>> log10(A(:,:))
ans =
1.0831
0.7042
0.5237


0.8976
0.8028
0.4265

0.9652
1.3365
1.1578

c. Tìm sin, cos của tất cả các phần tử của A.
>> sin(A)
ans =
-0.4407 -0.9989 0.1935
-0.9402 0.0668 0.2871
0.1971 0.4543 0.9707
>> cos(A)
ans =
0.8977 -0.0460 -0.9811
0.3407 0.9978 -0.9579
-0.9804 -0.8908 -0.2405
D1. Làm tròn những phần tử của A đến số nguyên gần nhất.
>> round(A)
ans =
12 -8 9
5 6 22
-3 3 14
D2. Làm tròn những phần tử của A đến số nguyên lớn hơn. Làm tròn về dương
>> ceil(A)
ans =
13 -7 10
6 7 22

-3 3 15
D3. Làm tròn những phần tử của A đến số nguyên nhỏ hơn. Làm tròn về âm
>> floor(A)
ans =
12 -8 9
5 6 21
-4 2 14
D4. Làm tròn những phần tử của A về 0
>> fix(A)
ans =
12 -7 9
5 6 21
-3 2 14
e. xét dấu những phần tử của A
>> sign(A)
ans =
1 -1 1
1 1 1
-1 1 1
f. Tìm giá trị lớn nhất và nhỏ nhất của mỗi cột của A.
>> max(A)
ans =
12.1100 6.3500 21.7000
>> min(A)


ans =
-3.3400 -7.9000 9.2300
g. Sắp xếp những phần tử trong mỗi cột của A theo thứ tự tăng dần.
>> sort(A)

ans =
-3.3400 -7.9000 9.2300
5.0600 2.6700 14.3800
12.1100 6.3500 21.7000
h. Sắp xếp những phần tử trong mỗi cột của A theo thứ tự giảm dần.
>> B=sort(A)
B=
-3.3400 -7.9000 9.2300
5.0600 2.6700 14.3800
12.1100 6.3500 21.7000
>> A=B(end:-1:1,:)
A=
12.1100 6.3500 21.7000
5.0600 2.6700 14.3800
-3.3400 -7.9000 9.2300

ANSWERS
2. A = [ 2 4 1 ; 6 7 2 ; 3 5 9]
x1 = A(1,:)
y = A(end-1:end,:)
c = sum(A)
d = sum(A,2) or d = sum(A')'
N = size(A,1), e = std(A)/sqrt(N)
5. A = [2 7 9 7 ; 3 1 5 6 ; 8 1 2 5]
B = A(:,2:2:end)
C = A(1:2:end,:)
c = reshape(A,4,3) or c = A' (they are different but are both 4x3)
d = 1./A , rats(d)
e = sqrt(A)
6. randn('seed',123456789)

F = randn(5,10);
N = size(F,1)
avg = mean(F)
s = std(F)
tscore = (avg - 0)./(s/sqrt(N))
None were different at 90% LOC (all < 2.132).



×