Cộng thêm 16 vào tất cả các phần tử.. Cộng thêm 3 vào các phần tử ở vị trí lẻ.. 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.. Luỹ thừa mỗi phần tử của x với số mũ tương ứ
Trang 1Ôn Tập
I Vector, ma trận
1 Cho x = [3 1 5 7 9 2 6], dự đoá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 Cho x = [2 5 1 6].
a Cộng thêm 16 vào tất cả các phần tử.
X=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; chuy
c Lấy căn bậc 2 tất cả các phần tử.
X=sqrt(x);
d Bình phương tất cả các phần tử.
X=x.*x;
3 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.
Y=y+sum(x);
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;
c Chia các phần tử của y với các phần tử tương ứng của x.
Y=y./x;
Trang 2d 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);
f Tính x.* y – w.
=x.*y-sum(x.*y);
g.Tích vô hướng của x và y
=x*y’;
Lưu y: x’ là ma trận chuyển vị của x
4 Tạo các vector x sau
a [2, 4, 6, 8, … 2n]
x=(2:2:2*n);
b [10, 8, 6, 4, 2, 0, -2, -4 -2n]
x=(10:-2:-2*n);
c [1, 1/2, 1/3, 1/4, 1/5, … 1/n]
x=1:n;
y=1./x;
d [0, 1/2 2/3, 3/4, 4/5, … (n-1)/n]
x=1:n;
y=(x-1)./x;
Lưu y: nhập vào giá trị n
5 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.
X=1:n;
Y=(-1).^(x+1)./(2.*x-1);
6 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,:);
Trang 3b Gán cho ma trận y là hai dòng còn lại (cuối) của A.
y=[A(2,:);A(3,:)];
c Tính tổng theo dòng ma trận A.
sum(A’)’;
d Tính tổng theo cột ma trận A.
sum(A);
e Tìm giá trị lớn nhất và nhỏ nhất của ma trận.
max(max(A));
min(min(a));
f Tính tổng các phần tử của A
sum(sum(A));
7 Hãy tạo ra ma trận 4x4 có giá trị nguyên nằm trong khoảng [-10,10] , Sau đó:
A=round(10-rand(4)*20); chuy
a Cộng mỗi phần tử của ma trận cho 15
A=A+15;
b Bình phương mỗi phần tử của ma trận
A=A.*A;
c Cộng thêm 10 vào các phần tử ở dòng 1 và dòng 2
A(1,:)= A(1,:)+10;
A(2,:)= A(2,:)+10;
d Cộng thêm 10 vào các phần tử ở cột 1 và cột 4
A(:,1)= A(:,1)+10;
A(:,4)= A(:,4)+10;
8 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);
Trang 4b 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]’;
9 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) A(4,:)];
b Gán cho ma trận C là các dòng ở vị trí lẻ
C=[A(1,:);A(3,:)];
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)
10 Giải các phương trình tuyến tính sau:
�
�
�
�
�
2
�
�
�
�
�
A1=[2 1 5 1;1 1 -3 -4;3 6 -2 1;2 2 2 -3];
B1=[5 -1 8 2]’;
X1=inv(A1)*B1;
II Vẽ đồ thị
1 Vẽ đường thẳng nối các điểm (0,1); (4,3); (2,0) và (5,-2) lại với nhau.
X=[0 4 2 5];
Y=[1 3 0 -2];
plot(X,Y);
2 Vẽ đồ thị hàm số f(x) = sin(1/x) với 0.01 < x < 0.1.
Trang 5plot(sin(1./x));
3 Vẽ đồ thị hàm số x3, ex và e^(x2) với 0 < x < 4 (dùng hàm linspace(0,4) để tạo các điểm x).
X=linspace( 0,4,100);
plot(x.^3)
plot(exp(x))
plot(exp(x.*x))
4 Vẽ đồ thị hàm số ex (0 < x < 4) nhưng với đường đứt nét, màu đỏ
X=linspace( 0,4,100);
plot(exp(x),’r ’)
5.Vẽ đồ thị hàm số y = cos(t) trong khoảng 0 < t < 2pi, chia lại các giá trị trên trục
0x cách đều nhau một khoảng là pi/4 Ghi nhãn cho các giá trị tương ứng là 0, pi/4, pi/2, 3pi/4, …, 2pi Chia trục Oy thành 3 khoảng là -1, 0, 1.
t=linspace(0,2*pi,100);
plot(cos(t))
for i=1:8
text(100*i/8-2,-1.15,sprintf('%dpi/4',i))
end
for i=1:3
text(-6.15,2-i,sprintf('%d',2-i))
end
6 Vẽ đồ thị hàm số
t=linspace(0,30,100);
y=(2+sin(t)).*exp(-0.05*t)./(2-cos(t/4));
plot(y)
7 Vẽ đồ thị hàm số
Trang 6y=2+3*sin(pi.*t+10).*exp(-0.35*t);
plot(y)
8.Vẽ đồ thị của một đa thức bất kỳ nhập từ bàn phím T=linspace(a,b,100);
Y=polyval(p,t);
Plot(y);
9.Vẽ đồ thị lưới và mặt của các hàm sau
z=sin(x).cos(y), 0=<x<=3pi,0=<y<=5pi
x=linspace(0,3*pi,100);
y=linspace(0,5*pi,100);
[X,Y]=meshgrid(x,y);
Z=sin(X).*cos(Y);
Subplot(2,1,1)
mesh(X,Y,Z)
title('Do thi luoi )
Subplot(2,1,2)
surf(X,Y,Z)
title('Do thi mat')
z=x.e-(x*x+y*y), -2=<x<=2pi,-2=<y<=2
x=linspace(-2,2*pi,100);
y=linspace(-2,2,100);
[X,Y]=meshgrid(x,y);
Z=X.*exp(-(X.*X+Y.*Y));
Subplot(2,1,1)
mesh(X,Y,Z)
title(‘Do thi luoi ’)
Subplot(2,1,2)
surf(X,Y,Z)
title(‘Do thi mat’)
z=xy+yx ,0<x<=1,0<y<=1
x=linspace(0.01,1,100);
y=linspace(0.01,1,100);
[X,Y]=meshgrid(x,y);
Z=X.^Y+Y.^X;
Trang 7mesh(X,Y,Z)
title('Do thi luoi )
Subplot(2,1,2)
surf(X,Y,Z)
title('Do thi mat')
z=x-x3+y2+1, -3=<x<=3,-3=<y<=3
x=linspace(-3,3,100);
y=linspace(-3,3,100);
[X,Y]=meshgrid(x,y);
Z=X-X.^3+Y*Y+1;
Subplot(2,1,1)
mesh(X,Y,Z)
title('Do thi luoi )
Subplot(2,1,2)
surf(X,Y,Z)
title('Do thi mat')
chú ý: bài toán vẽ đồ thi có thể yêu cầu vẽ đồng thời nhiều
đường cong trên 1 phân vùng, hoặc trên nhiều phân vùng.
III Lập trình trên matlab
1 Tạo hàm cộng nhiều đa thức
function kq=congdt(varargin)
if nargin==0
p1=input('p1= ');
p2=input('p2= ');
p1=[zeros(1,length(p2)-length(p1)),p1];
p2=[zeros(1,length(p1)-length(p2)),p2];
kq=p1+p2;
end
if nargin==1
p1=varargin{1};
p2=input('p2= ');
p1=[zeros(1,length(p2)-length(p1)),p1];
p2=[zeros(1,length(p1)-length(p2)),p2];
kq=p1+p2;
end
if nargin==2
p1=varargin{1};
p2=varargin{2};
p1=[zeros(1,length(p2)-length(p1)),p1];
p2=[zeros(1,length(p1)-length(p2)),p2];
kq=p1+p2;
end
if nargin>2
kq=congdt(varargin{1},varargin{2});
for i=3:nargin
kq=congdt(kq,varargin{i});
end
end
end
Trang 82 Tạo hàm nhân nhiều đa thức
function kq=nhandt(varargin)
if nargin==0
p1=input('p1= ');
p2=input('p2= ');
kq=conv(p1,p2);
end
if nargin==1
p1=varargin{1};
p2=input('p2= ');
kq=conv(p1,p2);
end
if nargin==2
p1=varargin{1};
p2=varargin{2};
kq=conv(p1,p2);
end
if nargin>2
kq=nhandt(varargin{1},varargin{2});
for i=3:nargin
kq=nhandt(kq,varargin{i});
end
end
end
3 Lập chương trình tính n! , k
n
C , Ak n (Không dùng hàm của Matlab) P(n)
function kq=P(n)
if or(or(n<0,round(n)~=n),nargin~=1)
n=input('n= ');
end
if and(and(n>=0,round(n)==n),nargin==1)
kq=1;
for i=1:n
kq=kq*i;
end
end
end
C(k,n)
function kq=C(k,n)
if or(and(or(k<1,round(k)~=k),nargin>1),nargin<1)
k=input('k= ');
n=input('n= ');
elseif or(or(and(or(n<1,round(n)~=n),nargin==2),nargin<2),k>n) n=input('n= ');
end
if nargin>2
k=input('k= ');
n=input('n= ');
end
if and(and(nargin==2,and(round(k)==k,round(n)==n)),n>=k)
kq=P(n)/(P(n-k)*P(k));
end
Trang 9A(k,n)
function kq=A(k,n)
if or(and(or(k<1,round(k)~=k),nargin>1),nargin<1)
k=input('k= ');
n=input('n= ');
elseif or(or(and(or(n<1,round(n)~=n),nargin==2),nargin<2),k>n) n=input('n= ');
end
if nargin>2
k=input('k= ');
n=input('n= ');
end
if and(and(nargin==2,and(round(k)==k,round(n)==n)),n>=k)
kq=P(n)/P(n-k);
end
end
3 Tìm các số nguyên tố từ 2 đến n(nhập từ bàn phím)
function kq=ng_to(n)
if or(or(n<2,round(n)~=n),nargin~=1)
n=input('n= ');
end
if and(and(n>1,round(n)==n),nargin==1)
k=0;
for a=2:n
kt=0;
for i=2:sqrt(a)
if (a/i)==round(a/i)
kt=1;
end
end
if kt==0
k=k+1;
q(k)=a;
end
end
end
kq=q;
end
4 Tìm đoạn liên tiếp gồm các phần tử bằng nhau,tăng dần có độ dài max của dãy số thực
% bài này còn có 1 số thuật toán khác với số phép tính bằng với thuật toán này ( Chiến TT2 !)
% Đây là thuật toán tìm các điểm cực trị
Dãy tăng dần :
function kq=timday(p)
Trang 10if nargin==0
p=input('p= ');
end
n(1)=1;
k=1;
max=0;
for i=2:length(p)-1
if or(or((and((p(i)>=p(i-1)),p(i)>p(i+1))),and((p(i)<=p(i-
1)),p(i)<p(i+1))),or((and((p(i)>p(i-1)),p(i)==p(i+1))),and((p(i)<p(i-1)),p(i)==p(i+1))))
k=k+1;
n(k)=i;
if and((p(n(k-1))<p(n(k))),(n(k)-n(k-1)>max))
max=n(k)-n(k-1);
end
end
end
n(k+1)=length(p);
q=1;
for i=1:k
if and((p(n(i))<p(n(i+1))),(n(i+1)-n(i)==max))
for l=n(i):n(i+1)
kq(q,l-n(i)+1)=p(l);
end
q=q+1;
end
end
end
Dãy bằng nhau :
function kq=timday(p)
if nargin==0
p=input('p= ');
end
n(1)=1;
k=1;
max=0;
for i=2:length(p)-1
if or(or((and((p(i)>=p(i-1)),p(i)>p(i+1))),and((p(i)<=p(i-
1)),p(i)<p(i+1))),or((and((p(i)>p(i-1)),p(i)==p(i+1))),and((p(i)<p(i-1)),p(i)==p(i+1))))
k=k+1;
n(k)=i;
if and((p(n(k-1))==p(n(k))),(n(k)-n(k-1)>max))
max=n(k)-n(k-1);
end
end
end
n(k+1)=length(p);
q=1;
for i=1:k
if and((p(n(i))==p(n(i+1))),(n(i+1)-n(i)==max))
for l=n(i):n(i+1)
kq(q,l-n(i)+1)=p(l);
end
q=q+1;
end
Trang 11end
5 Lập trình sắp xếp lại các thành phần của véctor theo thứ tự tăng, giảm dần Dãy tăng dần :
function kq=sapxep(p)
if nargin==0
p=input('p=');
end
n=length(p);
for i=1:n-1
for j=i:n
if p(j)<p(i)
tam=p(j);
p(j)=p(i);
p(i)=tam;
end
end
end
kq=p;
end
Dãy giảm dần :
function kq=sapxep(p)
if nargin==0
p=input('p=');
end
n=length(p);
for i=1:n-1
for j=i:n
if p(j)>p(i)
tam=p(j);
p(j)=p(i);
p(i)=tam;
end
end
end
kq=p;
end
6 Viết chương trình thực hiện phép cộng hai số lớn(không dùng hàm cộng matlab)
%Hàm tách số a -> đa thức pa: (vd : 123 -> [ 3 2 1] )
function kq=tach(a)
i=1;
while a>9
q(i)=mod(a,10);
i=i+1;
a=fix(a/10);
end
q(i)=a;
Trang 12end
% Hàm cộng :
function kq=congso(a,b)
if or(round(a)~=a,nargin<1)
a=input('a= ');
b=input('b= ');
elseif or(and(round(b)~=b,nargin==2),nargin<2)
b=input('b= ');
end
if nargin>2
a=input('b= ');
b=input('b= ');
end
if and(nargin==2,and(round(a)==a,round(b)==b))
pa=tach(a);
pb=tach(b);
pa=[pa,zeros(1,length(pb)-length(pa))];
pb=[pb,zeros(1,length(pa)-length(pb))];
pc=pa+pb;
pc=[pc,0];
for i=1:length(pc)
if pc(i)>9
pc(i+1)=pc(i+1)+1;
pc(i)=fix(pc(i)/10);
end
end
end
kq=pc(1);
for i=1:length(pc)-1
kq=kq+pc(i+1)*(10^i);
end
end
8 Tính các biểu thức(không dùng hàm matlab)
a
)!
1 2 ( ) 1 (
! 5
! 3 )
sin(
1 2 5
3
n
x x
x x x
n n
độ chính xác <10-6
function kq=sinx(x)
ep=0.000001;
sin2=x;
sin1=0;
t=x;
k=1;
while abs(sin1-sin2)>ep;
sin1=sin2;
t=t*(-x*x)/((2*k+1)*2*k);
sin2=sin2+t;
k=k+1;
end
kq=sin2;
end
Trang 13b
)!
2 ( ) 1 (
! 4
! 2
2 1 )
cos(
2 4
n
x x
x x
n n
function kq=cosx(x)
ep=0.000001;
s2=1;
s1=0;
t=1;
k=1;
while abs(s1-s2)>ep;
s1=s2;
t=t*(-x*x)/((2*k-1)*2*k);
s2=s2+t;
k=k+1;
end
kq=s2;
end
c Tính giá trị của số Pi sử dụng chuỗi độ chính xác <10-6
2
1
16 n (2 n 1) (2 n 1)
�
% Hàm tìm pi với sai số nhập từ bàn phím !
function kq=pix(ex)
if nargin==0
ex=10^(-6);
end
n=fix(1/(4*ex));
s=0;
for i=1:n
s=s+1/((2*i-1)*(2*i-1)*(2*i+1)*(2*i+1));
end
kq=sqrt(16*s+8);
end
V Giải phương trình vi phân sau bằng simulink
1.x’’+(x2-1)x’+x=0, với x(0)=1,x’(0)=1
Trang 142.y’’+y=cos(t), với y(0)=1, y’(0)=1
3.Hệ pt x’=10(y-x)
y’=x(28-z) z’=-2.67z+xy
Trang 154.Hệ pt x’=-z-y
y’=x+0.2y z’=xz+0.2-5.7z