1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

giáo trình MatLab pro

16 128 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 289 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 2

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);

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 3

b 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 4

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]’;

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 5

plot(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 6

y=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 7

mesh(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 8

2 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 9

A(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 10

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

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 11

end

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 12

end

% 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 13

b

)!

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 14

2.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 15

4.Hệ pt x’=-z-y

y’=x+0.2y z’=xz+0.2-5.7z

Ngày đăng: 24/03/2019, 21:23

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w