matlab例题

matlab例题
matlab例题

例7 输入x,y的值,并将它们的值互换后输出。

程序如下:

x=input('Input x please.');

y=input('Input y please.');

z=x;

x=y;

y=z;

disp(x);

disp(y);

例8 求一元二次方程ax2 +bx+c=0的根。

程序如下:

a=input('a=?');

b=input('b=?');

c=input('c=?');

d=b*b-4*a*c;

x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];

disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);

例9 计算分段函数的值。

程序如下:

x=input('请输入x的值:');

if x<=0

y= (x+sqrt(pi))/exp(2);

else

y=log(x+sqrt(1+x*x))/2;

end

例10 输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。

c=input('请输入一个字符','s');

if c>='A' & c<='Z'

disp(setstr(abs(c)+abs('a')-abs('A')));

elseif c>='a'& c<='z'

disp(setstr(abs(c)- abs('a')+abs('A')));

elseif c>='0'& c<='9'

disp(abs(c)-abs('0'));

else

disp(c);

end

例11 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):price<200 没有折扣

200≤price<500 3%折扣

500≤price<1000 5%折扣

1000≤price<2500 8%折扣

2500≤price<5000 10%折扣

5000≤price 14%折扣

输入所售商品的价格,求其实际销售价格。

程序如下:

price=input('请输入商品价格');

switch fix(price/100)

case {0,1} %价格小于200

rate=0;

case {2,3,4} %价格大于等于200但小于500

rate=3/100;

case num2cell(5:9) %价格大于等于500但小于1000

rate=5/100;

case num2cell(10:24) %价格大于等于1000但小于2500

rate=8/100;

case num2cell(25:49) %价格大于等于2500但小于5000

rate=10/100;

otherwise %价格大于等于5000

rate=14/100;

end

price=price*(1-rate) %输出商品实际销售价格

例12 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。

程序如下:

A=[1,2,3;4,5,6]; B=[7,8,9;10,11,12];

try

C=A*B;

catch

C=A.*B;

end

C

lasterr

例13 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。

程序如下:

for m=100:999

m1=fix(m/100); %求m的百位数字

m2=rem(fix(m/10),10); %求m的十位数字

m3=rem(m,10); %求m的个位数字rem求余数

if m==m1*m1*m1+m2*m2*m2+m3*m3*m3

disp(m)

end

end

例14 已知,当n=100时,求的值。

程序如下:

程序如下:

y=0;

n=100;

for k=1:n

y=y+1/(2*k-1);

end

y

例16 从键盘输入若干个数,当输入0时结束输入,求

这些数的平均值和它们之和。

程序如下:

sum=0;

cnt=0;

val=input('Enter a number (end in 0):');

while (val~=0)

sum=sum+val;

cnt=cnt+1;

val=input('Enter a number (end in 0):');

end

if (cnt > 0)

sum

mean=sum/cnt

end

例17 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。

for m=1:500

s=0;

for k=1:m/2

if rem(m,k)==0 %rem求m/k的余数

s=s+k;

end

end

if m==s

disp(m);

end

end

例18 求[100,200]之间第一个能被21整除的整数。

程序如下:

for n=100:200

if rem(n,21)~=0

continue

end

break

end

n

例19:函数的递归调用

编写函数nj计算自然数n的阶乘

function y=nj(n)

%y=nj(n)计算n的阶乘

%输入参数n是自然数

%输出参数y是n的阶乘

if(n<0)|(floor(n)~=n)%如果输入参数不是自然数

error('输入参数必须是自然数')%则显示出错信息

end

if n==0

y=1;

elseif n==1

y=1;

else

y=n*nj(n-1);

end

例20 猜数游戏。首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“Y ou won”,同时退出游戏。用户最多可以猜7次。

程序如下:

%Play the game of guess the number

x=fix(100*rand); %a random number calculated by the computer

n=7;

test=1;

for k=1:7

numb=int2str(n);

disp(['Y ou have a right to ',numb,' guesses'])

disp(['A guess is a number between 0 and 100'])

guess=input('Enter your guess:');

if guess

disp('Low')

elseif guess>x

disp('High')

else

disp('Y ou won')

test=0;

break;

end

n=n-1;

end

if test==1

disp('Y ou lost')

end

例21 :递推与递归

核反应堆中有A和B两种粒子,每秒中内1个A粒子分裂成

3个B粒子,而1个B粒子分裂成1个A粒子和2个B粒子。

若在时刻t=0反应堆中只有1个A粒子,问t=20时反应堆中

有多少个A粒子?多少个B粒子?共有多少个粒子?

function [outf,outg,outfg]=fg(x)

%函数[outf,outg,outfg]=fg(x)计算A粒子与B粒子的个数

%输入参数x是自然数

%输出参数outf是A粒子个数

%输出参数outg是B粒子个数

%输出参数outfg是A粒子和B粒子的总数

%主函数

[m,n]=size(x);%输入参数x的行数和列数

if (m~=1)|(n~=1)|(x<0)|(round(x)~=x) %如果输入参数不是自然数

y=[]; %输出为空

disp('输入参数应为自然数'); %显示出错

elseif x>=0

outf=f(x);

outg=g(x);

outfg=outf+outg;

end

function y=f(x);

%子函数,计算A粒子

if x==0

y=1;

elseif x>0

y=g(x-1);

end

function y=g(x);

%子函数,计算B粒子

if x==0

y=0;

elseif x>0

y=3*f(x-1)+2*g(x-1);

end

例4-3 在0≤x≤2 区间内,绘制曲线

y=2e-0.5xcos(4πx)

程序如下:

x=0:pi/100:2*pi;

y=2*exp(-0.5*x).*cos(4*pi*x);

plot(x,y)

例4-6 用不同标度在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx)。程序如下:

x=0:pi/100:2*pi;

y1=0.2*exp(-0.5*x).*cos(4*pi*x);

y2=2*exp(-0.5*x).*cos(pi*x);

plotyy(x,y1,x,y2

例4-7 采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx)。

程序如下:

x=0:pi/100:2*pi;

y1=0.2*exp(-0.5*x).*cos(4*pi*x);

plot(x,y1)

hold on

y2=2*exp(-0.5*x).*cos(pi*x);

plot(x,y2);

hold off

例4-8 在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx),标记两曲线交叉点。

程序如下:

x=linspace(0,2*pi,1000);

y1=0.2*exp(-0.5*x).*cos(4*pi*x);

y2=2*exp(-0.5*x).*cos(pi*x);

k=find(abs(y1-y2)<1e-2); %查找y1与y2相等点(近似相等)的下标

x1=x(k); %取y1与y2相等点的x坐标

y3=0.2*exp(-0.5*x1).*cos(4*pi*x1); %求y1与y2值相等点的y坐标

plot(x,y1,x,y2,…k:?,x1,y3,…bp?); %y1缺省蓝色实线,y2黑色

点线,y3蓝色五角星

例4-9 在0≤x≤2 区间内,绘制曲线y1=2e-0.5x和y2=cos(4πx),并给图形添加图形标注。

程序如下:

x=0:pi/100:2*pi;

y1=2*exp(-0.5*x);

y2=cos(4*pi*x);

plot(x,y1,x,y2)

title('x from 0 to 2{\pi}'); %加图形标题

xlabel('Variable X'); %加X轴说明

ylabel('Variable Y'); %加Y轴说明

text(0.8,1.5,'曲线y1=2e^{-0.5x}'); %在指定位置添加图形说明

text(2.5,1.1,'曲线y2=cos(4{\pi}x)');

legend(…y1?,… y2?) %加图例

例4-10 在同一坐标中,可以绘制3个同心圆,并加坐标控制。

程序如下:

t=0:0.01:2*pi;

x=exp(i*t);

y=[x;2*x;3*x]';

plot(y)

grid on; %加网格线

box on; %加坐标边框

axis equal %坐标轴采用等刻度

例4-11 用fplot函数绘制f(x)=cos(tan(πx))的曲线。

命令如下:

fplot('cos(tan(pi*x))',[ 0,1],1e-4)

例4-13 绘制y=10x2的对数坐标图并与直角

坐标图进行比较。

x=1:10;

y=10*(x.^2);

subplot(2,2,1),plot(x,y),title('直角坐标')

subplot(2,2,2),loglog(x,y),title('双对数')

subplot(2,2,3),semilogx(x,y),title('x轴对数')

subplot(2,2,4),semilogy(x,y),title('y轴对数')

例4-12 绘制r=sin(t)cos(t)的极坐标图,并标记数据点。

程序如下:

t=0:pi/50:2*pi;

r=sin(t).*cos(t);

polar(t,r,'-*');

例4-14 分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。

程序如下:

x=0:pi/10:2*pi;

y=2*sin(x);

subplot(2,2,1);bar(x,y,'g');

title('bar(x,y,''g'')');axis([0,7,-2,2]);

subplot(2,2,2);stairs(x,y,'b');

title('stairs(x,y,''b'')');axis([0,7,-2,2]);

subplot(2,2,3);stem(x,y,'k');

title('stem(x,y,''k'')');axis([0,7,-2,2]);

subplot(2,2,4);fill(x,y,'y');

title('fill(x,y,''y'')');axis([0,7,-2,2]);

例4-15 绘制图形:

(1) 某企业全年各季度的产值(单位:万元)分别为:2347,1827,2043,3025,试用饼图作统计分析。

(2) 绘制复数的相量图:7+2.9i、2-3i和-1.5-6i。

程序如下:

subplot(1,2,1);

pie([2347,1827,2043,3025]);

title('饼图');

legend('一季度','二季度','三季度','四季度');

subplot(1,2,2);

compass([7+2.9i,2-3i,-1.5-6i]);

title('相量图');

例4-17 绘制三维曲线。

程序如下:

t=0:pi/100:20*pi;

x=sin(t);

y=cos(t);

z=t.*sin(t).*cos(t);

plot3(x,y,z);

title('Line in 3-D Space');

xlabel('X');ylabel('Y');

zlabel('Z');

grid on;

例4-18 绘制三维曲面图z=sin(x+sin(y))-x/10。

程序如下:

[x,y]=meshgrid(0:0.25:4*pi);

z=sin(x+sin(y))-x/10;

mesh(x,y,z);

axis([0 4*pi 0 4*pi -2.5 1]);

例4-19 在xy平面内选择区域[-8,8]×[-8,8],绘制4种三维曲面图。程序如下:

[x,y]=meshgrid(-8:0.5:8);

z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);

subplot(2,2,1);

mesh(x,y,z);title('mesh(x,y,z)')

subplot(2,2,2);

meshc(x,y,z);title('meshc(x,y,z)')

subplot(2,2,3);

meshz(x,y,z)title('meshz(x,y,z)')

subplot(2,2,4);

surf(x,y,z);title('surf(x,y,z)')

例4-20 绘制标准三维曲面图形。

程序如下:

t=0:pi/20:2*pi;

[x,y,z]= cylinder(2+sin(t),30);

subplot(2,2,1);surf(x,y,z);

[x,y,z]=sphere;

subplot(2,2,2);surf(x,y,z);

[x,y,z]=peaks(30);

subplot(2,1,2);surf(x,y,z);

例4-21 绘制三维图形:

(1) 绘制魔方阵的三维条形图。

(2) 以三维杆图形式绘制曲线y=2sin(x)。

(3) 已知x=[2347,1827,2043,3025],绘制饼图。

(4) 用随机的顶点坐标值画出五个黄色三角形。

程序如下:

subplot(2,2,1);

bar3(magic(4))

subplot(2,2,2);

y=2*sin(0:pi/10:2*pi);

stem3(y);

subplot(2,2,3);

pie3([2347,1827,2043,3025]);

subplot(2,2,4);

fill3(rand(3,5),rand(3,5),rand(3,5), 'y' )

例4-22 绘制多峰函数的瀑布图和等高线图。

程序如下:

subplot(1,2,1);

[X,Y,Z]=peaks(30);

waterfall(X,Y ,Z)

xlabel('X-axis'),ylabel('Y -axis'),zlabel('Z-axis');

subplot(1,2,2);

contour3(X,Y ,Z,12,'k'); %其中12代表高度的等级数

xlabel('X-axis'),ylabel('Y -axis'),zlabel('Z-axis');

例4-23 绘制椭球面

u=-2*pi:0.1:2*pi;

v=-2*pi:0.1:2*pi;

ezmesh('3*cos(u)*sin(v)','2*cos(u)*cos(v)','sin(u)',

[-2*pi,2*pi,-2*pi,2*pi])

例6-31 绘制了peaks 函数曲面并且将它绕z 轴旋转。

程序如下

[X,Y,Z]=peaks(30);

surf(X,Y,Z)

axis([-3,3,-3,3,-10,10])

axis off;

shading interp;

colormap(hot);

m=moviein(20); %建立一个20列大矩阵

for i=1:20

view(-37.5+24*(i-1),30) %改变视点

m(:,i)=getframe; %将图形保存到m 矩阵

end

movie(m,2); %播放画面2次

读取图像信息INFO=imfinfo('FILENAME.FMT')

【例】按256灰度级显示

3cos sin 2cos cos sin x u v

y u v

z u =??=??=?

I=i m r e a d('m o o n.t i f');

i m s h o w(I,256)

c o l o r b a r

【例】按8灰度级显示

I=i m r e a d('m o o n.t i f');

i m s h o w(I,8)

c o l o r b a r

【例】按最大灰度范围显示I=i m r e a d('m o o n.t i f');

i m s h o w(I,[])

c o l o r b a r

【例】按指定灰度范围显示I=i m r e a d('m o o n.t i f');

i m s h o w(I,[64,128])

c o l o r b a r

【例】双精度灰度图像

b w1=z e r o s(100,100);

b w1(2:2:98,2:2:98)=1;

i m s h o w(b w1);

w h o s b w1

【例】8位的灰度图像

b w1=z e r o s(100,100);

b w1(2:2:98,2:2:98)=1;

b w2=u i n t8(b w1);

i m s h o w(b w2,[]);

c o l o r b a r

w h o s b w2

【例】二值图像

b w1=z e r o s(100,100);

b w1(2:2:98,2:2:98)=1;

b w2=u i n t8(b w1);

b w3=b w2~=0;

i m s h o w(b w3);

w h o s b w3

【例】显示二值图像

B W=i m r e a d('c i r c l e s.t i f');

i m s h o w(B W);

【例】取反显示二值图像

B W=i m r e a d('c i r c l e s.t i f');

i m s h o w(~B W);

【例】显示二值图像

c l f

B W=i m r e a d('c i r c l e s.t i f');

i m s h o w(B W,[100;001]);

【例】显示索引图像

[X,M A P]=i m r e a d('c a n o e.t i f');

i m s h o w(X,M A P);

c o l o r b a r

【例】显示伪彩色图像

I=i m r e a d('m o o n.t i f');

i m s h o w(I,j e t(256))

c o l o r b a r

显示真彩色图像。

【例】

r g b=i m r e a d('f l o w e r s.t i f');

i m s h o w(r g b);

例如:显示多帧图像数组I的第七帧

命令为:i m s h o w(I(:,:,:,7))

c l e a r a l l

c l c

c l f

m r i=u i n t8(z e r o s(128,128,1,27));

%初始化一个27帧的图像数组

f o r f r a m e=1:27

[m r i(:,:,:,f r a m e),m a p]=i m r e a d('m r i.t i f');

%把对应的每一帧读入内存中

e n d

i m s h o w(m r i(:,:,:,7),m a p)%显示图像中的第七帧

显示多帧图像示例:

c l e a r a l l

c l c

c l f

m r i=u i n t8(z e r o s(128,128,1,27));

%初始化一个27帧的图像数组

f o r f r a m e=1:27

[m r i(:,:,:,f r a m e),m a p]=i m r e a d('m r i.t i f');

%把对应的每一帧读入内存中

e n d

m o n t a g e(m r i,m a p)%显示图像中的所有帧

显示动画

i m m o v i e函数可以从一个多帧图像数组中创建m a t l a b动画

例如:

c l e a r a l l

c l c

c l f

m r i=u i n t8(z e r o s(128,128,1,27));

%初始化一个27帧的图像数组

f o r f r a m e=1:27

[m r i(:,:,:,f r a m e),m a p]=i m r e a d('m r i.t i f');

%把对应的每一帧读入内存中

e n d

mov=immovie(mri,map);%创建动画帧结构

movie(mov)%播放动画

多图显示多个调色板的图像。

【例】

l o a d t r e e s;

[x2,m a p2]=i m r e a d('f o r e s t.t i f');

s u b p l o t(2,1,1),s u b i m a g e(X,m a p);c o l o r b a r

subplot(2,1,2),subimage(x2,map2);colorbar

【例】将t i f图像保存为j p g图像

[x,m a p]=i m r e a d('c a n o e.t i f');

i m w r i t e(x,m a p,'c a n o e.j p g','J P G','Q u a l i t y',75)

1、索引图像

假设:X8-表示8位的索引图像,X16-表示16位的索引图像,X64-表示双精度的索引图像,则有:

X64=d o u b l e(X8)+1-u i n t8格式转d o u b l e格式

X64=d o u b l e(X16)+1-u i n t16格式转d o u b l e格式

X8=u i n t8(X64-1)-d o u b l e格式转u i n t8格式

X16=u i n t16(X64-1)-d o u b l e格式转u i n t16格式

X8=u i n t8(X16)-u i n t16格式转u i n t8格式

X16=u i n t16(X8)-u i n t8格式转u i n t16格式

2、灰度图像

G=m a t2g r a y(A,[A m i n,A m a x])

A m i n A m a x默认为A的最小和最大值返回是个D o u b l e类型的值

假设:I8-表示8位的灰度图像,I16-表示16位的灰度图像,I64-表示双精度的灰度图像,则有:

I64=d o u b l e(I8/255)-u i n t8格式转d o u b l e格式

I64=d o u b l e(I16/65535)-u i n t16格式转d o u b l e格式

I8=u i n t8(r o u n d(I64*255))-d o u b l e格式转u i n t8格式

I16=u i n t16(r o u n d(I64*65535))-d o u b l e格式转u i n t16格式

I8=u i n t8(r o u n d(I16/257))-u i n t16格式转u i n t8格式

I16=u i n t16(r o u n d(I8*257))-u i n t8格式转u i n t16格式

3、真彩色图像

假设:R G B8-表示8位的真彩图像,R G B16-表示16位的真彩图像,R G B64-表示双精度的真彩图像,则有:

R G B64=d o u b l e(R G B8/255)-u i n t8格式转d o u b l e格式

R G B64=d o u b l e(R G B16/65535)-u i n t16格式转d o u b l e格式

R G B8=u i n t8(r o u n d(R G B64*255))-d o u b l e格式转u i n t8格式

R G B16=u i n t16(r o u n d(R G B64*65535))-d o u b l e格式转u i n t16格式

R G B8=u i n t8(r o u n d(R G B16/257))-u i n t16格式转u i n t8格式

R G B16=u i n t16(r o u n d(R G B8*257))-u i n t8格式转u i n t16格式

4、二值图像

G=i m2b w(f,T)T默认为0.5

假设B W8表示8位二值图像,B W64表示双精度二值图像,则有:

B W64=d o u b l e(B W8)u i n t8格式转d o u b l e格式

B W8=u i n t8(B W64)~=0d o u b l e格式转u i n t8格式

1、真彩图像→索引图像

【格式】X=d i t h e r(R G B,m a p)

【例】

C L F

R G B=i m r e a d('f l o w e r s.t i f');

m a p=j e t(256);

X=d i t h e r(R G B,m a p);

s u b p l o t(1,2,1);s u b i m a g e(R G B);t i t l e('真彩图')

s u b p l o t(1,2,2);s u b i m a g e(X,m a p);t i t l e('索引图')

2、索引图像→真彩图像

【格式】R G B=i n d2r g b(X,m a p)

【例】

C L F,l o a d t r e e s;

R G B=i n d2r g b(X,m a p);

s u b p l o t(1,2,1);s u b i m a g e(X,m a p);t i t l e('索引图')

s u b p l o t(1,2,2);s u b i m a g e(R G B);t i t l e('真彩图')

3、真彩图像→灰度图像

【格式】I=r g b2g r a y(R G B)

【例】

C L F,R G B=i m r e a d('f l o w e r s.t i f');

I=r g b2g r a y(R G B);

s u b p l o t(1,2,1);s u b i m a g e(R G B);t i t l e('真彩图')

s u b p l o t(1,2,2);s u b i m a g e(I);t i t l e('灰度图')

4、真彩图像→二值图像

【格式】B W=i m2b w(R G B,l e v e l)

【例】

C L F,R G B=i m r e a d('f l o w e r s.t i f');

B W=i m2b w(R G B,0.5);

s u b p l o t(1,2,1);s u b i m a g e(R G B);t i t l e('真彩图')

s u b p l o t(1,2,2);s u b i m a g e(B W);t i t l e('二值图')

5、索引图像→灰度图像

【格式1】I=i n d2g r a y(X,m a p)

【格式2】N e w m a p=r g b2g r a y(m a p)

【例】

C L F,l o a d t r e e s;

I=i n d2g r a y(X,m a p);

N e w m a p=r g b2g r a y(m a p);

s u b p l o t(2,2,1);s u b i m a g e(X,m a p);t i t l e('索引图')

s u b p l o t(2,2,3);s u b i m a g e(I);t i t l e('格式1灰度图')

s u b p l o t(2,2,4);s u b i m a g e(X,N e w m a p);t i t l e('格式2灰度图') 6、灰度图像→索引图像

【格式1】1、[X,m a p]=g r a y2i n d(I,n)

2、X=g r a y s l i c e(I,n)

3、X=g r a y s l i c e(I,v)

C L F,I=i m r e a d('r i c e.t i f');

[X1,m a p1]=g r a y2i n d(I,16);

X2=g r a y s l i c e(I,8);

X3=g r a y s l i c e(I,255*[00.210.230.260.300.350.61.0]');

s u b p l o t(2,2,1);s u b i m a g e(I);t i t l e('灰度图')

s u b p l o t(2,2,2);s u b i m a g e(X1,m a p1);t i t l e('16灰度级图')

s u b p l o t(2,2,3);s u b i m a g e(X2,h o t(8));t i t l e('均匀量化图')

s u b p l o t(2,2,4);s u b i m a g e(X3,j e t(8));t i t l e('非均匀量化图') 7、灰度图像→二值图像

【格式一】B W=d i t h e r(I);

【格式二】B W=i m2b w(I,l e v e l)

【例】

C L F,I=i m r e a d('s a t u r n.t i f');

B W1=d i t h e r(I);

B W2=i m2b w(I,0.5);

s u b p l o t(2,2,1);s u b i m a g e(I);t i t l e('灰度图')

s u b p l o t(2,2,3);s u b i m a g e(B W1);t i t l e('抖动二值化')

s u b p l o t(2,2,4);s u b i m a g e(B W2);t i t l e('阈值二值化')

8、索引图像→二值图像

【格式】B W=i m2b w(X,m a p,l e v e l)

【输入】X可以是d o u b l e、u i n t16或u i n t8类型

【输出】B W为u i n t8类型

【例】

C L F,l o a d t r e e s;

B W=i m2b w(X,m a p,0.5);

s u b p l o t(1,2,1);s u b i m a g e(X,m a p);t i t l e('索引图')

s u b p l o t(1,2,2);s u b i m a g e(B W);t i t l e('二值图')

9、数据矩阵→灰度图像

【格式】1、I=m a t2g r a y(A,[m a x,m i n])

2、I=m a t2g r a y(A)

【例】

C L F;I=i m r e a d('r i c e.t i f');

A=f i l t e r2(f s p e c i a l('s o b e l'),I);

J=m a t2g r a y(A);

s u b p l o t(1,2,1);s u b i m a g e(I);t i t l e('原图')

s u b p l o t(1,2,2);s u b i m a g e(J);t i t l e('转换图')

I=i m r e a d('r i c e.p n g');

J=i m r e a d('c a m e r a m a n.t i f');

K=i m a d d(I,J,'u i n t16');

i m s h o w(K,[])

注意类型处理

>> X=uint8([255 0 75; 44 225 100]);

>> Y=uint8([50 50 50; 50 50 50]);

>> Z=imadd(X,Y)

结果:

Z =

255 50 125

94 255 150

两图相加

I=imread('rice.png');

J=imread('cameraman.tif');

K=imadd(I,J,'uint16');

imshow(K,[])

图加数

RGB=imread(‘peppers.png’);

RGB2=imadd(RGB,150);

Subplot(121);imshow(RGB);

Subplot(122);imshow(RGB2);

加噪声

?I=imread('eight.tif');

?>> J=imnoise(I,'salt & pepper',0.02);

?>> imshow(I)

?>> figure,imshow(J)

减法

?J=imread('cameraman.tif');

?I=uint8(filter2(fspecial('gaussian'),J));

?K=imabsdiff(J,I);

?imshow(K

乘法

?I=imread('moon.tif');

?I16=uint16(I);

?J=immultiply(I16,I16);

?imshow(I);

?figure,imshow(J)

除法

?I=imread('rice.png');

?>> J=imdivide(I,2);

?>> imshow(I)

?>> figure(2),imshow(J)

例:计算两幅图像的均值

>> I=imread('rice.png');

>> J=imread('cameraman.tif');

>> k=imdivide(imadd(I,J), 2);

>> imshow(k

>> I=imread('rice.png');

>> J=imread('cameraman.tif'); >> L=imlincomb(.5,I,.5,J);

>> imshow(L)

补运算

>> bw=imread('text.png');

>> bw2=imcomplement(bw);

>> imshow(bw);

>> figure,imshow(bw2)

补或非

clear all

clc

I=imread('rice.png');

J=imdivide(I,2);

K1=bitand(I,J);

imshow(K1)

title('图像的位与运算')

K2=bitcmp(I,8);

figure(2)

imshow(K2);

title('图像的位补运算')

K3=bitor(I,J);

figure(3)

imshow(K3);

title('图像的位或运算')

K4=bitxor(I,J);

figure(4)

imshow(K4);

title('图像的位异或运算')

K5=bitshift(I,2);

figure(5)

imshow(K5);

title('图像的位移位运算')

A=magic(5);

x=[19.5,23.5];

y=[8.0 12.0];

Image(A,?XDAT A?,x, ?YDAT A?,y,);

axis image, colormap(jet(25))

图像缩放

B=imresize(A,M,method)

?A:原图像矩阵

?M:放大倍数。

?M>1放大

?0

?Method:插值方法

clear all

clc

close all

I=imread('peppers.png');

imshow(I);

I1=imresize(I,2,'bilinear');

figure,imshow(I1);

I2=imresize(I,2,'bicubic');

figure,imshow(I2);

I3=imresize(I,0.3,'nearest');

figure,imshow(I3);

图像旋转

clear all

clc

close all

I=imread('peppers.png');

imshow(I);

I1=imrotate(I,30,'nearest');

figure,imshow(I1);

I2=imrotate(I,30,'bilinear');

figure,imshow(I2);

I3=imrotate(I,80,'bicubic');

figure,imshow(I3);

I4=imrotate(I,30,'bicubic','crop');

figure,imshow(I4);

图像剪切

I = imread(‘circuit.tif');

I2 = imcrop(I,[75 68 130 112]);

figure,imshow(I)

figure,imshow(I2)

例10.1 利用函数impixel显示像素信息imshow canoe.tif

vals=impixel

例10.2 利用函数improfile绘制线段像素分布图

?imshow peppers.png

?improfle

分段线性变换

例9.3 对于原图pout.tif,将其小于30的灰度值不变,将30到150的灰度值拉伸到30到200,同时压缩150到255的灰度值到200与255间。

I=imread('pout.tif');

imshow(I);

I=double(I);

[M,N]=size(I);

for k = 1:M

for l = 1:N

if I(k,l)<=30

I(k,l)=I(k,l);

elseif I(k,l)<=150

I(k,l)=(200-30)/(150-30)*( I(k,l)-30)+30;

else

I(k,l)=(255-200)/(155-150)*( I(k,l)-150)+200;

end

end

end

figure(2);

imshow(uint8(I));

imadjust函数可以实现图像的灰度变换

clc;

I=imread('pout.tif');

imshow(I);

J=imadjust(I,[0.3 0.7],[0 1],1 );

figure;

imshow(J);

J=imadjust(I,[0.3 0.7],[0 1],0.5);

figure;

imshow(J);

J=imadjust(I,[0.3 0.7],[0 1],1.5);

figure;

imshow(J);

以下程序代码示例就是用imadjust函数将输入图像的灰度范围从[0 51]映射到[128 255],输入图像如图所示:

I=imread('cameraman.tif');

J=imadjust(I,[0 0.2],[0.5 1]);

imshow(I)

figure,imshow(J

直方图均衡化

I=imread('tire.tif');

imshow(I)

figure;imhist(I);

J=histeq(I,64);

figure;

imshow(J);

figure;

imhist(J);

J=histeq(I,32);

figure;

imshow(J);

利用adapthisteq函数来调整图像的对比度问题I=imread('pout.tif');

J=adapthisteq(I);

imshow(I)

figure,imshow(J)

imhist(J,64)

锐化(拉普拉斯)滤波器

例3

?f=imread('moon.tif');

?imshow(f)

?w4=fspecial('laplacian',0);

?w8=[1,1,1;1,-8,1;1,1,1];

?f=im2double(f);

?g4=f-imfilter(f,w4,'replicate');

?g8=f-imfilter(f,w8,'replicate');

?imshow(f)

?figure,imshow(g4)

?figure,imshow(g8)

锐化(拉普拉斯)滤波器例4

?f=imread('moon.tif');

?imshow(f)

?w4=fspecial('laplacian',0);

?w8=[1,1,1;1,-8,1;1,1,1];

?f=im2double(f);

?g4=f-imfilter(f,w4,'replicate');

?g8=f-imfilter(f,w8,'replicate');

?imshow(f)

?figure,imshow(g4)

?figure,imshow(g8)

matlab基础练习题带答案

Matlab 基础练习题 常量、变量、表达式 1、 MATLAB 中,下面哪些变量名是合法的?( ) (A )_num (B )num_ (C )num- (D )-num 2、 在MA TLAB 中,要给出一个复数z 的模,应该使用( )函数。 (A )mod(z) (B )abs(z) (C )double(z) (D )angle(z) 3、 下面属于MATLAB 的预定义特殊变量的是?( ) (A )eps (B )none (C )zero (D )exp 4、 判断:在MA TLAB 的内存工作区中,存放一个英文字符 'a' 需要占用1个字节,存放 一个中文字符‘啊’需要占用2个字节。( 错,都是2个字节 ) 5、 判断:MA TLAB 中,i 和j ( 对 ) 6、 判断:MA TLAB 中,pi 代表圆周率,它等于3.14。( 错,后面还有很多位小数 ) 7、 在MA TLAB 中,若想计算的5 1)3.0sin(21+= πy 值,那么应该在MA TLAB 的指令窗中 输入的MA TLAB 指令是__y1=2*sin(0.3*pi)/(1+sqrt(5))_。 8、 在MA TLAB 中,a = 1,b = i ,则a 占_8__个字节,b 占_16_个字节,c 占________字 节。 9、 在MA TLAB 中,inf 的含义是__无穷大__,nan 的含义是__非数(结果不定)___。 数组 1、 在MA TLAB 中,X 是一个一维数值数组,现在要把数组X 中的所有元素按原来次序 的逆序排列输出,应该使用下面的( )指令。 (A )X[end:1] (B )X[end:-1:1] (C )X (end:-1:1) (D )X(end:1) 2、 在MA TLAB 中,A 是一个字二维数组,要获取A 的行数和列数,应该使用的MATLAB 的命令是( )。 (A )class(A) (B )sizeof(A) (C )size(A) (D )isa(A) 3、 在MATLAB 中,用指令x=1:9生成数组x 。现在要把x 数组的第二和第七个元素都 赋值为0,应该在指令窗中输入( ) (A )x([2 7])=(0 0) (B )x([2,7])=[0,0] (C )x[(2,7)]=[0 0] (D )x[(2 7)]=(0 0) 4、 在MA TLAB 中,依次执行以下指令:clear;A=ones(3,4); A(:)=[-6:5];这时, 若在指令窗中输入指令b=A(:,2)',那么,MATLAB 输出的结果应该是( ) (A )b = -3 -2 -1 (B )b = -2 -1 0 1 (C )b = -5 -1 3 (D )b = -5 -2 1 4 5、 在MA TLAB 中,A = 1:9,现在执行如下指令L1 = ~(A>5),则MATLAB 的执行结果应 该是L1 =___ 1 1 1 1 1 0 0 0 0___。

matlab考试题及答案

%1、编制一个解数论问题的函数文件:取任意整数,若是偶数,则用2除,否则乘3加1,重复此过程,直到整数变为1。 function f=NO_1(X); Y(1)=X;k=1; while (X~=1) k=k+1; if (mod(X,2)==0) X=X/2; else X=3*X+1; end Y(k)=X; end plot(Y,'b.') end % 2、编制程序产生一个数组,满足:a1=1,a2=1,从第三个元素开始,每个元素等于前两个元素的和,直到数组的前后两个元素的比值比小于1e-4,并且以红色点线的形式画出这个数组。 clear; A(1)=1; A(2)=1; i=3; Z=1; while (abs(Z)>=1e-4) A(i)=A(i-1)+A(i-2); Z=A(i-1)/A(i); i=i+1; end plot (A,'r.') % 3、编写一个函数,能够产生分段函数。function y=test_3_1(X) if (X<=2) y=*X; elseif (X>6) y=; else y=调用分段函数,绘制曲线。 clear; i=1; for j=0::2; x(i)=j;y(i)=test_3_1(j)*test_3_1(j+2); i=i+1; end plot(x,y) % 4、在2pi周期内画正弦函数曲线,并加注坐标轴标识和标题,然后在3pi/4,pi,5pi/4处分别加入带箭头的说明性文本,最后加注图例。 clear; t = 0:pi/50:2*pi; n = length(t); y = sin(t); plot(t,y,'-bo','linewidth',1) xlabel('X');ylabel('Y'); title('正弦函数曲线'); text,, ' \leftarrow 3pi/4','FontSize',18); text,, ' \leftarrow 3pi/4','FontSize',18); text,,' \leftarrow 3pi/4','FontSize',18); hleg1 = legend('sin(x)'); % 5、A为任意一个n*m矩阵,写程序来计算A 中有多少个零元素,并输出个数。 A=input('输入一个矩阵 A = ') n=length(find(A==0)) % 6、A为任意一个向量,写程序找出A中的最小元素,并且输出这个最小元素。 A=input('输入一个向量 A = '); x=length(A); i=1; y=A(i); while (iA(i)) y=A(i); end end disp('最小元素是:') disp(y) % 7、某系统由四个典型环节构成,试根据四阶龙格—库塔公式,求输出量y的阶跃响应,取仿真时间Tf=10s, %步长h=。

利用MATLAB进行时域分析

自动控制原理与系统课程实验报告 实验题目:利用MATLAB进行时域分析 班级:机电1131班姓名:刘润学号:38号 一、实验目的及内容 时域分析法是一种直接在时间域中对系统进行分析的方法,具有直观、准确的优点,并且可以提供系统时间响应的全部信息。在此实验中,主要介绍时域法进行系统分析,包括一阶系统、二阶系统以及高阶系统,以及系统的性能指标。通过实验,能够快速掌握、并利用MATLAB及控制系统箱对各种复杂控制系统进行时域分析。 二、实验设备 三、实验原理 典型的二阶系统在不同的阻尼比的情况下,它们的阶跃响应输出特性的差异是很大的。若阻尼比过小,则系统的振荡加剧,超调量大幅度增加;若阻尼比过大,则系统的响应过慢,又大大增加了调整时间,下面通过此实验课题分析输出响应变化规律: 已知二阶振荡环节的传递函数为:G(s)=ωn*ωn/(s*s+2*ζ*ωn*s+ωn*ωn), 其中ωn=0.4,ζ从0变化到2,求此系统的单位阶跃响应曲线,并分析当ζ发生变化时,二阶系统的响应有什么样的变化规律。

四、实验步骤编出程序如下图: 五、实验结果画出图表如下图:

六、结果分析 (1)当ξ=0(无阻尼)(零阻尼)时: 无阻尼时的阶跃响应为等幅振荡曲线。如图ξ=0曲线。 (2)当0<ξ<1(欠阻尼)时: 对应不同的ξ,可画出一系列阻尼振荡曲线,且ξ越小,振荡的最大振幅愈大。如图ξ=0.4曲线。 (3)当ξ=1(临界阻尼)时: 临界阻尼时的阶跃响应为单调上升曲线。如图ξ=1曲线。 (4)当ξ>1(过阻尼)时: 过阻尼时的阶跃响应也为单调上升曲线。不过其上升的斜率较临界阻尼更慢。如图ξ=1.6曲线 七、教师评语

matlab经典习题及解答

第1章 MATLAB概论 1.1与其他计算机语言相比较,MATLAB语言突出的特点是什么? MATLAB具有功能强大、使用方便、输入简捷、库函数丰富、开放性强等特点。 1.2 MATLAB系统由那些部分组成? MATLAB系统主要由开发环境、MATLAB数学函数库、MATLAB语言、图形功能和应用程序接口五个部分组成。 1.4 MATLAB操作桌面有几个窗口?如何使某个窗口脱离桌面成为独立窗口?又如何将脱离出去的窗口重新放置到桌面上? 在MATLAB操作桌面上有五个窗口,在每个窗口的右上角有两个小按钮,一个是关闭窗口的Close按钮,一个是可以使窗口成为独立窗口的Undock按钮,点击Undock按钮就可以使该窗口脱离桌面成为独立窗口,在独立窗口的view菜单中选择Dock ……菜单项就可以将独立的窗口重新防止的桌面上。 1.5 如何启动M文件编辑/调试器? 在操作桌面上选择“建立新文件”或“打开文件”操作时,M文件编辑/调试器将被启动。在命令窗口中键入edit命令时也可以启动M文件编辑/调试器。 1.6 存储在工作空间中的数组能编辑吗?如何操作? 存储在工作空间的数组可以通过数组编辑器进行编辑:在工作空间浏览器中双击要编辑的数组名打开数组编辑器,再选中要修改的数据单元,输入修改内容即可。 1.7 命令历史窗口除了可以观察前面键入的命令外,还有什么用途? 页脚内容1

命令历史窗口除了用于查询以前键入的命令外,还可以直接执行命令历史窗口中选定的内容、将选定的内容拷贝到剪贴板中、将选定内容直接拷贝到M文件中。 1.8 如何设置当前目录和搜索路径,在当前目录上的文件和在搜索路径上的文件有什么区别? 当前目录可以在当前目录浏览器窗口左上方的输入栏中设置,搜索路径可以通过选择操作桌面的file 菜单中的Set Path菜单项来完成。在没有特别说明的情况下,只有当前目录和搜索路径上的函数和文件能够被MATLAB运行和调用,如果在当前目录上有与搜索路径上相同文件名的文件时则优先执行当前目录上的文件,如果没有特别说明,数据文件将存储在当前目录上。 1.9 在MATLAB中有几种获得帮助的途径? 在MATLAB中有多种获得帮助的途径: (1)帮助浏览器:选择view菜单中的Help菜单项或选择Help菜单中的MATLAB Help菜单项可以打开帮助浏览器; (2)help命令:在命令窗口键入“help”命令可以列出帮助主题,键入“help 函数名”可以得到指定函数的在线帮助信息; (3)lookfor命令:在命令窗口键入“lookfor 关键词”可以搜索出一系列与给定关键词相关的命令和函数 (4)模糊查询:输入命令的前几个字母,然后按Tab键,就可以列出所有以这几个字母开始的命令和函数。 注意:lookfor和模糊查询查到的不是详细信息,通常还需要在确定了具体函数名称后用help命令显示详细信息。 第2章MATLAB矩阵运算基础 页脚内容2

matlab例题

五、某公司投资2000万元建成一条生产线。投产后,在时刻t 的追加成本和追加收益分别为3/225)(t t t G ++=(百万元/年),3/218)(t t H -=(百万元/年)。试确定该生产线在何时停产可获最大利润?最大利润是多少? 提示:利用函数?=T G H t R 0t 20-d ))t (-)t (()((百万元),由于H (t )-G (t )单调 下降,所以H (t )=G (t )时,R (t )取得最大利润。 5.解:构造函数f(t)=H(t)-G(t)=13-t-3t 2/3=0 ; 令t 1/3=x,则f(t)=-t 3-3t 2+13 可得矩阵P=[-1,-3,0,13] 求最佳生产时间的源程序如下: p=[-1,-3,0,13]; x=roots(p); t=x.^3 运行结果如下: t = 3.6768 +21.4316i 3.6768 -21.4316i 4.6465 再分别将t 的三个值带入函数f(t),比较大小后,得到最大利润与最佳生产时间。 求最大利润的程序代码如下: ① t=3.6768 +21.4316i; x=0:0.01:t; y=13-x-3*x.^(2/3); trapz(x,y) 运行结果: ans = 25.2583 ② t=3.6768 -21.4316i; x=0:0.01:t; y=13-x-3*x.^(2/3); trapz(x,y) 运行结果: ans = 25.2583 ③ t=4.6465; x=0:0.01:t; y=13-x-3*x.^(2/3); trapz(x,y) 运行结果: ans = 26.3208 比较以上三组数据,可知最佳生产时间t=4.6465年,可获得的最大利润 26.3208(百万元/年)。 clear; close; fplot('18-t^(2/3)',[0,20]);grid on;hold on; fplot('5+t+2*t^(2/3)',[0,20],'r');hold off; %发现t 约为4

matlab课程设计题目

课题一: 连续时间信号和系统时域分析及MATLAB实现 课题要求: 深入研究连续时间信号和系统时域分析的理论知识。利用MATLAB强大的图形处理功能、符号运算功能以及数值计算功能,实现连续时间信号和系统时域分析的仿真波形。 课题内容: 一、用MATLAB实现常用连续时间信号的时域波形(通过改变参数,分析其时域特性)。 1、单位阶跃信号, 2、单位冲激信号, 3、正弦信号, 4、实指数信号, 5、虚指数信号, 6、复指数信号。 二、用MATLAB实现信号的时域运算 1、相加, 2、相乘, 3、数乘, 4、微分, 5、积分 三、用MATLAB实现信号的时域变换(参数变化,分析波形变化) 1、反转, 2、使移(超时,延时), 3、展缩, 4、倒相, 5、综合变化 四、用MATLAB实现信号简单的时域分解 1、信号的交直流分解, 2、信号的奇偶分解 五、用MATLAB实现连续时间系统的卷积积分的仿真波形 给出几个典型例子,对每个例子,要求画出对应波形。 六、用MATLAB实现连续时间系统的冲激响应、阶跃响应的仿真波形。 给出几个典型例子,四种调用格式。 七、利用MATLAB实现连续时间系统对正弦信号、实指数信号的零状态响应的仿真波形。 给出几个典型例子,要求可以改变激励的参数,分析波形的变化。 课题二: 离散时间信号和系统时域分析及MATLAB实现。 课题要求: 深入研究离散时间信号和系统时域分析的理论知识。利用MATLAB强大的图

形处理功能、符号运算功能以及数值计算功能,实现离散时间信号和系统时域分析的仿真波形。 课题内容: 一、用MATLAB绘制常用信号的时域波形(通过改变参数分析其时域特性) 1、单位序列, 2、单位阶跃序列, 3、正弦序列, 4、离散时间实指数序列, 5、离散时间虚指数序列, 6、离散时间复指数序列。 二、用MATLAB实现信号的时域运算 1、相加, 2、相乘, 3、数乘。 三、用MATLAB实现信号的时域变换(参数变化,分析波形的变化) 1、反转, 2、时移(超时,延时), 3、展缩, 4、倒相。 四、用MATLAB实现离散时间系统卷积和仿真波形 给出几个典型例子,对每个例子要求画出e(k),h(k),e(i),h(i),h(-i),Rzs(k)波形。 五、用MATLAB实现离散时间系统的单位响应,阶跃响应的仿真波形 给出几个典型例子,四中调用格式。 六、用MATLAB实现离散时间系统对实指数序列信号的零状态响应的仿真波形 给出几个典型例子,要求可以改变激励的参数,分析波形的变化。 课题三: 连续时间信号傅里叶级数分析及MATLAB实现。 课题要求: 深入研究连续时间信号傅里叶级数分析的理论知识,利用MATLAB强大的图形处理功能,符号运算功能以及数值计算功能,实现连续时间周期信号频域分析的仿真波形。 课题内容: 一、用MATLAB实现周期信号的傅里叶级数分解与综合 以周期矩形波信号为例,绘出包含不同谐波次数的合成波形,观察合成波形与原矩形 波形之间的关系及吉布斯现象。

matlab经典编辑习题集及解答

第1章 MATLAB 概论 1.1 与其他计算机语言相比较,MATLAB 语言突出的特点是什么? MATLAB 具有功能强大、使用方便、输入简捷、库函数丰富、开放性强等特点。 1.2 MATLAB 系统由那些部分组成? MATLAB 系统主要由开发环境、MATLAB 数学函数库、MATLAB 语言、图形功能和应用程序接口五个部分组成。 1.4 MATLAB 操作桌面有几个窗口?如何使某个窗口脱离桌面成为独立窗口?又如何将脱离出去的窗口重新放置到桌面上? 在MATLAB 操作桌面上有五个窗口,在每个窗口的右上角有两个小按钮,一个是关闭窗口的Close 按钮,一个是可以使窗口成为独立窗口的Undock 按钮,点击Undock 按钮就可以使该窗口脱离桌面成为独立窗口,在独立窗口的view 菜单中选择Dock ……菜单项就可以将独立的窗口重新防止的桌面上。 1.5 如何启动M 文件编辑/调试器? 在操作桌面上选择“建立新文件”或“打开文件”操作时,M 文件编辑/调试器将被启动。在命令窗口中键入edit 命令时也可以启动M 文件编辑/调试器。 1.6 存储在工作空间中的数组能编辑吗?如何操作? 存储在工作空间的数组可以通过数组编辑器进行编辑:在工作空间浏览器中双击要编辑的数组名打开数组编辑器,再选中要修改的数据单元,输入修改内容即可。 1.7 命令历史窗口除了可以观察前面键入的命令外,还有什么用途? 命令历史窗口除了用于查询以前键入的命令外,还可以直接执行命令历史窗口中选定的内容、将选定的内容拷贝到剪贴板中、将选定内容直接拷贝到M 文件中。 1.8 如何设置当前目录和搜索路径,在当前目录上的文件和在搜索路径上的文件有什么区别? 当前目录可以在当前目录浏览器窗口左上方的输入栏中设置,搜索路径可以通过选择操作桌面的file 菜单中的Set Path 菜单项来完成。在没有特别说明的情况下,只有当前目录和搜索路径上的函数和文件能够被MATLAB 运行和调用,如果在当前目录上有与搜索路径上相同文件名的文件时则优先执行当前目录上的文件,如果没有特别说明,数据文件将存储在当前目录上。 1.9 在MATLAB 中有几种获得帮助的途径? 在MATLAB 中有多种获得帮助的途径: (1)帮助浏览器:选择view 菜单中的Help 菜单项或选择Help 菜单中的MATLAB Help 菜单项可以打开帮助浏览器; (2)help 命令:在命令窗口键入“help ” 命令可以列出帮助主题,键入“help 函数名”可以得到指定函数的在线帮助信息; (3)lookfor 命令:在命令窗口键入“lookfor 关键词”可以搜索出一系列与给定关键词相关的命令和函数 (4)模糊查询:输入命令的前几个字母,然后按T ab 键,就可以列出所有以这几个字母开始的命令和函数。 注意:lookfor 和模糊查询查到的不是详细信息,通常还需要在确定了具体函数名称后用help 命令显示详细信息。 第2章 MATLAB 矩阵运算基础 2.1 在MATLAB 中如何建立矩阵?? ? ???194375,并将其赋予变量a ? >> a=[5 7 3;4 9 1] 2.2 有几种建立矩阵的方法?各有什么优点? 可以用四种方法建立矩阵: ①直接输入法,如a=[2 5 7 3],优点是输入方法方便简捷; ②通过M 文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改; ③由函数建立,如y=sin(x),可以由MATLAB 的内部函数建立一些特殊矩阵; ④通过数据文件建立,该方法可以调用由其他软件产生数据。 2.3 在进行算术运算时,数组运算和矩阵运算各有什么要求? 进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a 与b 相乘(a*b )

matlab典型例题

【例】水资源系统规划调度常应用系统分析方法处理,以一个水资源分配问题为例,讨论线性规划问题。例:有甲、乙两个水库同时给A、B、C三个城市供水,甲水库的日供水量为28万m3/d,乙水库的日供水量为35万m3/d,三个城市的日需水量分别为A≥10万m3/d,B≥15万m3/d,C≥20 万m3/d。由于水库与各城市的距离不等,输水方式不同,因此单位水费也不同。各单位水费分别为c11=2000元/万m3、c12=3000元/万m3、c13=4000元/万m3、c21=4500元/万m3、c22=3500元/万m3、c23=3000元/万m3。试作出在满足对三个城市供水的情况下,输水费用最小的方案。

设甲水库向三城市日供水量分别为x ll、x12、x13,乙水库向三城市日供水量分别为x2l、x22、x23。 建立约束条件: x11 + x21 ≥10 x12 + x22 ≥15 x13 + x23 ≥20 x11 + x12 + x13 ≤28 x21 + x22 + x23 ≤35 x11,x12,x13,x21,x22,x23,≥0 目标函数: fmin=c11x11+c12x12+c13x13+c21x21+c22x22+c23x23

这样的问题单纯求解是非常繁琐的,而MLTLAB求解是十分简单的,只要在命令行输入: 》f=[0.2 0.3 0.4 0.45 0.35 0.3]’; 》A=[-1 0 0 -1 0 0;0 -1 0 0 -1 0;0 0 -1 0 0 -1;1 1 1 0 0 0; 0 0 0 1 1 1]; 》B=[-10 -15 -20 28 35]; 》lb=zeros(6,1); 》[X,Zmin]=linprog(f,A,B,[],[],lb,[]) 最后得出x=[10 15 0 0 0 20]万m3,Zmin=12.5万元。

MATLAB习题参考答案

第1章 MATLAB简介 1、MA TLAB的主要特点有:①语言简洁,编程效率高。②人机界面友善,交互性好。③绘图功能强大,便于数据可视化。④学科众多、领域广泛的MATLAB工具箱。⑤源程序的开放性。 MATLAB的典型应用领域有:①自动控制②汽车③电子④仪器仪表⑤生物医学⑥信号处理⑦通信等。 2、填空题 ⑴命令窗口、命令历史窗口、当前目录窗口 ⑵查阅、保存、编辑 ⑶清除图形窗、清除命令窗口中显示内容、清除MATLAB工作空间中保存的变量。 3、如果想查看某一变量具体内容或者对其修改操作,可以在工作空间中双击该变量名称,可以打开数组编辑器,在数组编辑器中可以查看变量的具体内容,也可以对其修改。如果想删除MATLAB内存中的变量,可以在工作空间中选中该变量,然后利用工作空间窗口的菜单命令或工具条中的快捷图标进行删除。 4、1+2+3+4+5+... (+ 后面可以直接跟...,也可以在+和...中加一个空格。) 6+7+8+9 1+2+3+4+5 ... (5后面必须跟一个空格,不能直接跟...,否则报错,这在预置一个+6+7+8+9 大数组时很重要。) 第2章矩阵与数值数组 1、填空题: ⑴非数、无穷大、机器零阈值,浮点数相对精度,eps= 2.2204e-016。 ⑵全下标、单下标。 2、阅读程序题: (本题主要考察数组的寻访、赋值和简单运算,提示:带;的语句不显示结果) ⑴ans = 2 3 7 Sa = 10 20 30 A = 1 20 5 30 9 10 4 6 8 10 ⑵ A = 1 3 5 7 9 11 13 15

2 4 6 8 10 12 14 16 ans = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 A = 0 0 5 7 0 0 13 15 2 4 0 0 10 12 0 0 ⑶ ans = -1 -4 6 4 ans = 3 0 5 -2 ans = 3 6 9 12 ans = 3 6 9 12 3、A=magic(4); L=A<10 L = 0 1 1 0 1 0 0 1 1 1 1 0 1 0 0 1 4、省略。 第3章字符串、元胞和构架数组 1. 直接创建法:S1=['Where there is life,' 'there is hope. '] %注意第2行要加入6个空格使其与第一 行字符数相等,否则报错。 S2=str2mat('Where there is life,','there is hope.') S3=strvcat('Where there is life,','there is hope.') %后两种方法则不用考虑两行 字符的数目 2. 填空题:A(2,3);A{2,3} 3. 阅读程序题: ⑴subch = ABc12

matlab习题

1、标点符号;可以使命令行不显示运算结果,%用来表示该行为注释行。 2、x为0~4pi,步长为0.1pi的向量,使用命令x=0:0.1*pi:4*pi创建。4、输入矩阵A= 错误!未找到引用源。 ,使用全下标方式用A(2,2)取出元素 “-5”,使用单下标方式用A(5)取出元素“-5”。 5、符号表达式sin(2*a+t)+m中独立的符号变量为t。 6、M脚本文件和M函数文件的主要区别是M脚本文件没有函数定义和M函数文件有函数定义。 7. 设x是一维数组,x的倒数第3个元素表示为 ______x(_end-2_)________________;要在x的第36和37个元素之间插入一个元素154,使用的命令(集)为_x=x(_1:36,[154],37:end)_;设y为二维数组,要删除y 的第34行和48列,可使用命令_y(34,:)=[];y(:,48)=[]_; 8. 将变量x以Ascii文本格式存储到文件fname.txt,应使用命令__save _x_;将Excel文件data.xls读入WorkSpace并赋值给变量x,可使用命令 _x=xlsread('data.xls')_; 9. 在while表达式,语句体,End 循环语句中,表达式的值__非零__时表示循环 条件为真,语句体将被执行,否则跳出该循环语句; 10. 打开Matlab的一个程序文件fname.m,以添加的方式进行读写,应当使用命 令_fid= fopen('fname.m','w+'); 11.要从键盘读入一个字符串并赋值给变量x,且给出提示“Who is she?”,应使用命令__x=input(…Who is she??,?s?)_;使用fprintf()函数以含有2位小数的6位浮点格式输出数值变量weight到文件wt.txt,使用的命令(集)为fid = fopen(…wt.txt?,??,_); fprintf () ;12.设A= 错误!未找到引用源。,和B= 错误!未找到引用源。 和 C=错误!未找到引用源。均为m*n矩阵,且存在于WorkSpace中,要产生矩阵D=

MATLAB习题及参考答案经典.doc

习题: 1, 计算?? ????=572396a 与??? ???=864142b 的数组乘积。 2, 对于B AX =,如果???? ? ?????=753467294A ,??????????=282637B ,求解X 。 3, 已知:?? ?? ? ?????=987654321a ,分别计算a 的数组平方和矩阵平方,并观察其结果。 4, 角度[]604530=x ,求x 的正弦、余弦、正切和余切。(应用sin,cos,tan.cot) 5, 将矩阵?? ?? ??=7524a 、??????=3817b 和??? ???=2695c 组合成两个新矩阵: (1)组合成一个4?3的矩阵,第一列为按列顺序排列的a 矩阵元素,第二列为按列顺序排列的b 矩阵元素,第三列为按列顺序排列的c 矩阵元素,即 ?? ??? ???? ???237 912685 574 (2)按照a 、b 、c 的列顺序组合成一个行矢量,即 []296531877254 6, 将(x -6)(x -3)(x -8)展开为系数多项式的形式。(应用poly,polyvalm) 7, 求解多项式x 3-7x 2+2x +40的根。(应用roots) 8, 求解在x =8时多项式(x -1)(x -2) (x -3)(x -4)的值。(应用poly,polyvalm) 9, 计算多项式9514124234++--x x x x 的微分和积分。(应用polyder,polyint ,poly2sym)

10, 解方程组???? ? ?????=??????????66136221143092x 。(应用x=a\b) 11, 求欠定方程组?? ? ???=???? ??5865394742x 的最小范数解。(应用pinv) 12, 矩阵???? ? ?????-=943457624a ,计算a 的行列式和逆矩阵。(应用det,inv) 13, y =sin(x ),x 从0到2π,?x =0.02π,求y 的最大值、最小值、均值和标准差。(应用max,min,mean,std) 14, 参照课件中例题的方法,计算表达式() 2 2 e 1053y x y x z ---=的梯度并绘图。(应用meshgrid, gradient, contour, hold on, quiver) 15, 用符号函数法求解方程a t 2+b*t +c=0。(应用solve) 16, 用符号计算验证三角等式:(应用syms,simple) 17, 求矩阵?? ? ? ??=2221 1211a a a a A 的行列式值、逆和特征根。(应用syms,det,inv,eig) 18, 因式分解:6555234-++-x x x x (应用syms, factor) 19, ? ??? ?? ?? =)sin()log(12 x x e x x a f ax ,用符号微分求df/dx 。(应用syms,diff) 20, 符号函数绘图法绘制函数x=sin(3t)cos(t),y=sin(3t)sin(t)的图形,t 的变化范围为[0,2π]。(应用syms,ezplot) 21, 绘制曲线13++=x x y ,x 的取值范围为[-5,5]。(应用plot) 22, 有一组测量数据满足-at e =y ,t 的变化范围为0~10,用不同的线型和标记点画出a=0.1、a=0.2和a=0.5三种情况下的曲线,在图中添加标题-at e =y ,并用箭头线标识出各曲线a 的取值,并添加标题-at e =y 和图例框。(应用plot,title,text,legend) 23 24, x= [66 49 71 56 38],绘制饼图,并将第五个切块分离出来。

matlab练习题和答案

matlab练习题和答案 控制系统仿真实验 Matlab 部分实验结果 目录 实验一MATLAB基本操作..................................................................... .......................1 实验二Matlab 编程..................................................................... ...............................5 实验三Matlab 底层图形控制..................................................................... .....................6 实验四控制系统古典分析...................................................................... .......................12 实验五控制系统现代分析..................................................................... . (15) 实验六PID 控制器的设计..................................................................... ......................19 实验七系统状态空间设计...................................................................... .......................23 实验九直流双闭环调速系统仿真..................................................................... . (25) 实验一MATLAB基本操作

Matlab考题题整理带答案

MATLAB 考试试题(1) 产生一个1x10的随机矩阵,大小位于(-5 5),并且按照从大到小的顺序排列好!(注:要程序和运行结果的截屏) 答案: a=10*rand(1,10)-5; b=sort(a,'descend') 1.请产生一个100*5的矩阵,矩阵的每一行都是[1 2 3 4 5] 2. 已知变量:A=’ilovematlab’;B=’matlab’, 请找出: (A)B在A中的位置。 (B)把B放在A后面,形成C=‘ilovematlabmatlab’ 3. 请修改下面的程序,让他们没有for循环语句! A=[1 2 3; 4 5 6; 7 8 9]; [r c]=size(A); for i=1:1:r for j=1:1:c if (A(i,j)>8 | A(i,j)<2) A(i,j)=0; end end end 4. 请把变量A=[1 2 3; 4 5 6; 7 8 9]写到文件里(output.xls),写完后文件看起来是这样的 1 2 3 4 5 6 7 8 9 5.试从Yahoo网站上获得微软公司股票的2008年9月的每日收盘价。 6.编写M文件,从Yahoo网站批量读取60000.SH至600005.SH在2008年9月份的每日收盘价(提示:使用字符串函数)。 7. 将金牛股份(000937)2005年12月14日至2006年1月10日的交易记录保存到Excel中,编写程序将数据读入MATLAB中,进一步将数据读入Access数据库文件。 8.已知资产每日回报率为0.0025,标准差为0.0208,资产现在价值为0.8亿,求5%水平下资产的10天在险价值(Var)。 9.a=[1 2 3 4 5],b=a(1)*a(5)+a(2)*a(4)+a(3)*a(3)+a(4)*a(2)+a(5)*a(1).试用MATLAB中最简单的方法计算b,注意最简单哦。

matlab总练习题(完整版)

>> vpa('pi',20) ans = 3.1415926535897932385 >> vpa('exp(1)',20) ans = 2.7182818284590452354 >> x=linspace(-pi,pi,21); >> y=sin(x) y = Columns 1 through 6 -0.0000 -0.3090 -0.5878 -0.8090 -0.9511 -1.0000 Columns 7 through 12 -0.9511 -0.8090 -0.5878 -0.3090 0 0.3090 Columns 13 through 18 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 19 through 21 0.5878 0.3090 0.0000 >> k=1:1000; >> kk=1./k; >> kkk=kk./k; >> res=sum(kkk)-(pi^2)/6 res =

-9.9950e-04 %承接上题 >> sum(kk)-log(1000) ans = 0.5777 >> power(1+eps,1/eps) ans = 2.7183 >> a=rand(2,3) a =

0.8147 0.1270 0.6324 0.9058 0.9134 0.0975 >> x=a(1,:) x = 0.8147 0.1270 0.6324 >> y=a(2,:) y = 0.9058 0.9134 0.0975 >> norm(x) ans = 1.0391 >> norm(y) ans = 1.2900 >> acos(dot(x,y)/norm(x)/norm(y)) ans = 0.8189 >> rand(3,3) ans = 0.2785 0.9649 0.9572 0.5469 0.1576 0.4854 0.9575 0.9706 0.8003 >> det(ans) ans =

matlab经典编程例题

以下各题均要求编程实现,并将程序贴在题目下方。 1.从键盘输入任意个正整数,以0结束,输出那些正整数中的素数。 clc;clear; zzs(1)=input('请输入正整数:');k=1; n=0;%素数个数 while zzs(k)~=0 flag=0;%是否是素数,是则为1 for yz=2:sqrt(zzs(k))%因子从2至此数平方根 if mod(zzs(k),yz)==0 flag=1;break;%非素数跳出循环 end end if flag==0&zzs(k)>1%忽略0和1的素数 n=n+1;sus(n)=zzs(k); end k=k+1; zzs(k)=input('请输入正整数:'); end disp(['你共输入了' num2str(k-1) '个正整数。它们是:']) disp(zzs(1:k-1))%不显示最后一个数0 if n==0 disp('这些数中没有素数!')%无素数时显示 else disp('其中的素数是:') disp(sus) end 2.若某数等于其所有因子(不含这个数本身)的和,则称其为完全数。编程求10000以内所有的完全数。 clc;clear;

wq=[];%完全数赋空数组 for ii=2:10000 yz=[];%ii的因子赋空数组 for jj=2:ii/2 %从2到ii/2考察是否为ii的因子 if mod(ii,jj)==0 yz=[yz jj];%因子数组扩展,加上jj end end if ii==sum(yz)+1 wq=[wq ii];%完全数数组扩展,加上ii end end disp(['10000以内的完全数为:' num2str(wq)])%输出 3.下列这组数据是美国1900—2000年人口的近似值(单位:百万)。 (1)若. 2c + = y+ 与试编写程序计算出上式中的a、b、c; 的经验公式为 t at bt y (2)若.bt 的经验公式为 y= 与试编写程序计算出上式中的a、b; y ae t (3)在一个坐标系下,画出数表中的散点图(红色五角星),c + =2中 ax bx y+拟合曲线图(蓝色实心线),以及.bt y=(黑色点划线)。 ae (4)图形标注要求:无网格线,横标注“时间t”,纵标注“人口数(百万)”,图形标题“美国1900—2000年的人口数据”。 (5)程序中要有注释,将你的程序和作好的图粘贴到这里。 clf;clc;clear %清除图形窗、屏幕、工作空间 t=1900:10:2000; y=[76 92 106 123 132 151 179 203 227 250 281]; p1=polyfit(t,y,2);%二次多项式拟合

MatLab考试题题库(必做题)(带答案)

MatLab考试题题库(必做题)(带答案) 一, 1.请登陆美国 MathWorks 公司的网站,查看看现在大概有多少本 MATLAB-based books (以MATLAB 为基本软件,来说明各个专业领域的教科书或工具书)。哪一个领域的 MATLAB-based books 最多中文书共有几本 答:1612本,数学方面的最多,中文书共有37本。 2.请在 MATLAB中直接输入下列常数,看它们的值是多少: a.i b.j c.eps d.inf e.nan f.pi g.realmax h.realmin 依次解为:ans = 0 + ans = 0 + ans = ans =Inf ans = NaN ans = ans = +308 ans = 3.试写一函数 regPolygon(n),其功能为画出一个圆心在 (0, 0)、半径为 1 的圆,并在圆内画出一个内接正 n 边形,其中一顶点位于 (0, 1)。例如 regPolygon(8) 可以画出如下之正八边型:

解:新建文件如下: function y=regPolyfon(n) n=8;%要画的n边形 R=1; %圆的半径 t=0::2*pi; x=R*cos(t); y=R*sin(t); m=linspace(pi/2,5/2*pi,n+1); xz=R*cos(m); yz=R*sin(m); hold on plot(x,y,xz,yz);

axis 'equal'; 4.一条参数式的曲线可由下列方程式表示: x = sin(t), y = 1 - cos(t) + t/10 当 t 由 0 变化到 4*pi 时,请写一个 MATLAB 的脚本,画出此曲线在 XY 平面的轨迹。 解:新建: t = linspace(0, 4*pi); x = sin(t); y = 1-cos(t)+t/10; plot(x, y, '-o'); 5.当一个小圆轮沿着一条曲线行进时,轮缘任一点的轨迹就会产生变化丰富的摆线。假设小圆轮的半径 r=2。

matlab典型例题

例2.1 >> muw0=1.785; >> a=0.03368; >> b=0.000221; >> t=0:20:80; >> muw=muw0./(1+a*t+b*t.^2) 例2.2 数值数组和字符串的转换 >> a=[1:5]; >> b=num2str(a); >> a*2 ans = 2 4 6 8 10 >> b*2 ans = 98 64 64 100 64 64 102 64 64 104 64 64 106 例2.9比较左除和右除求解恰定方程 >> rand('seed',12); >> a=rand(100)+1.e8; >> x=ones(100,1); >> b=a*x; >> cond(a) ans = 5.0482e+011 >> tic;x1=b'/a;t1=toc t1 = 0.4711 >> er1=norm(x-x1') er1 = 139.8326

>> re1=norm(a*x1'-b)/norm(b) re1 = 4.3095e-009 >> tic;x1=a\b;t1=toc t1 = 0.0231 >> tic;x1=a\b;t1=toc t1 = 0.0011 >> er2=norm(x-x1) er2 = 1.5893e-004 >> re1=norm(a*x1-b)/norm(b) re1 = 4.5257e-016 例2.14:计算矩阵的指数 >> b=magic(3); >> expm(b) ans = 1.0e+006 * 1.0898 1.0896 1.0897 1.0896 1.0897 1.0897 1.0896 1.0897 1.0897 例 2.18:特征值条件数

相关文档
最新文档