MATLAB习题与实验.docx

上传人:b****6 文档编号:6459452 上传时间:2023-01-06 格式:DOCX 页数:18 大小:26.57KB
下载 相关 举报
MATLAB习题与实验.docx_第1页
第1页 / 共18页
MATLAB习题与实验.docx_第2页
第2页 / 共18页
MATLAB习题与实验.docx_第3页
第3页 / 共18页
MATLAB习题与实验.docx_第4页
第4页 / 共18页
MATLAB习题与实验.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

MATLAB习题与实验.docx

《MATLAB习题与实验.docx》由会员分享,可在线阅读,更多相关《MATLAB习题与实验.docx(18页珍藏版)》请在冰豆网上搜索。

MATLAB习题与实验.docx

MATLAB习题与实验

MATLAB习题与实验

实验一:

变量和矩阵的赋值、矩阵的初等运算

实验目的:

1.熟悉MATLAB的工作环境

2.掌握变量的赋值、矩阵的创建。

3.掌握矩阵和数组的初等运算。

4.熟悉和掌握inv、mean、var、randn、rand、ones、zeros、magic、eye函数的使用。

实验内容:

1.菜单栏File→Preferences→CommandWindow→FontandColors修改字体,选择Usecustomfont改为24。

同样方法File→Preferences→Editor/Debugger→FontandColors修改字体,选择Usecustomfont改为24。

点击Apply,OK即可。

2.在内产生均匀分布的200个点,形成1×200向量赋给变量X。

(结果不必记录)

X=linspace(0,2*pi,200);

3.在内每间隔3产生向量Y。

    Y=[0:

3:

10];

4.给矩阵赋值,,打开workspace查看矩阵的赋值。

使用savedataAB语句存储到data.mat数据文件中。

输入Clearall命令清空所有变量,再使用loaddata加载矩阵A和B。

    A=[14813;-36-5-9;2-7-1218];

    B=[543-2;6-23-8;-13-97];

    savedataAB;

    clearall;

    loaddata;

5.产生8*6阶的正态分布随机数矩阵R,求其各列的平均值和方差,并求全体的平均值和方差。

     R=randn(8,6);

     a=mean(R);

     b=var(R);

     c=mean(R(:

));

     d=var(R(:

));

6.模拟选号程序,现有10000人,按顺序编号为1,2,…10000号,一次随机选出一个编号,要求随机数均匀分布。

    R=round(ceil(rand(10000,1)*10000));

7.产生4*6阶的均匀分布随机数矩阵R,要求其元素在1~16之间取整数值,并求此矩阵前四列组成的方阵的逆阵。

    R=round(ceil(rand(4,6)*16));

    R=(:

[5,6])=[];

    inv(R);

8.使用矩阵运算产生99乘法表,显示数值即可。

R=[1:

1:

9];  

R'*R;

9.求下列联立方程的解:

A=[3,4,-7,-12;5,-7,4,2;1,0,8,-5;-6,5,-2,10];

B=[4;-3;9;-8];

X=A\B;

9.(选做)

产生1~100之间的奇数,按降序排列,赋给Z。

(结果不必记录)

Z=[99:

-2:

1];

10.将1~1000之间尾数为3的数取出,赋给M。

(结果不必记录)

R=[1:

1:

1000];

M=R(rem(R,10)==3);

11.(选做)

a)列出2*2阶的单位矩阵I,4*4阶的魔方矩阵M和4*2阶的全幺矩阵A,全零矩阵B。

I=eye

(2);

M=magic(4);

A=ones(4,2);

B=zeros(4,2);

b)将这些矩阵拼接为6*6阶的矩阵C:

     C=[I,A';B,M];

c)取出C的第2、4、6行,组成3*6阶的矩阵,取出C的第2、4、6列,组成6*3阶的矩阵。

C1=C([2,4,6],:

);

     C2=C(:

[2,4,6]);

d)求和

D=C1*C2;

D=C2*C1;

实验要求:

记录命令代码或函数代码和输出结果,有图形输出

实验二:

逻辑判断与流程控制

实验目的:

1.掌握常用关系运算和逻辑运算。

2.熟悉掌握选择结构(if语句)、循环结构(for语句,while语句)、多路分支结构(switch语句)的流程控制语句。

3.学习编写脚本文件(*.m文件)。

掌握脚本文件的调用方法。

实验内容:

1.找出1~100间3的倍数和尾数是3的数,按升序排列。

提示:

排序函数为sort(X)

程序源代码和调用及结果:

X=1:

100;

Y=[X(rem(X,3)==0)X(rem(X,10)==3)];

Z=sort(Y);

fork=1:

length(Z)

    if(k+1)>length(Z)    break,  end

     ifZ(k)==Z(k+1)  Z(k)=[];end

end

disp(Z)

Columns1through15

    3    6    9   12   13   15   18   21   23   24   27   30   33   36   39

Columns16through30

   42   43   45   48   51   53   54   57   60   63   66   69   72   73   75

Columns31through39

   78   81   83   84   87   90   93   96   99

2.编写脚本文件exe31.m使用选择结构编写程序判断输入的成绩C为及格、中等、良好、优秀、满分还是不及格。

该脚本文件的第一行是:

C=input('请输入成绩C=   ');

程序源代码和调用及结果:

C=input('请输入成绩C=   ')

ifC<0|C>100'error',

elseifC==100'满分',

elseifC<100&C>=90'优秀',

elseifC>=80&C<90'良好',

elseifC>=70&C<80'中等',

elseifC>=60&C<70'及格',

else'不及格',

end  

请输入成绩C=   67

C=

   67

ans=

及格

3.编写脚本文件exe32.m使用for循环计算1~1000的累加和。

程序源代码和调用及结果

S=0;

forx=1:

1000

   S=S+x;

end

S

S=

     

思考:

不使用循环,求解上题。

(使用sum函数)

4.编写脚本文件exe33.m使用while循环计算从1开始的奇数的联乘积S1,S1=1×3×5×…。

要求S1<1×106,显示S1和最后一个奇数的值。

程序源代码和调用及结果

n=1;

s=1;

whiles<10^6

   S1=s;

   s=s*(n+2);

   n=n+2;

end,

S1,n-2

   

S1=

     

ans=

   13

5.(选做)编写脚本文件exe34.m使用switch语句改写exe31.m,完成相同功能。

程序源代码和调用及结果

C=input('请输入成绩C=   ')

ifC<0|C>100'error',

elseswitchfix(C/10),

    case10,'满分',

    case9,'优秀',

    case8,'良好',

    case7,'中等',

    case6,'及格',

    otherwise'不及格',

    end  

end

请输入成绩C=   67

C=

   67

ans=

及格

6.(选做)假设一个人从第1年到第N=10年每年投入本金S=10000元,每年利率为q=10%,编写循环求到第N+1年本利合计T,与本金总额S*N比较。

(本题应先作出数学模型再编程)

程序源代码和调用及结果

S=10000;S1=10000;N=10;q=0.1;

fori=1:

N;

S2=S1*(1+q);S1=S2+10000;T=S2;

end

T

S*N

T=

1.7531e+005

ans=

     

要求:

记录程序源代码和调用及结果。

实验三:

直角坐标系和极坐标系下基本2-D图形的绘制

实验目的:

1.掌握用linspace函数和初值:

步长:

终值生成向量。

2.熟悉使用plot在直角坐标系下绘制2-D图形。

3.掌握用subplot函数绘制子图图形,使用xlabel、ylabel和title函数进行标注。

4.掌握使用polar在极坐标系下绘制函数图形。

5.使用plot3在直角坐标系下绘制3-D图形。

实验内容:

1.设,把间分为101点,画出以x为横坐标,y为纵坐标的曲线。

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

y=cos(x).*(0.5+3*sin(x)./(1+x.^2));

plot(x,y);

2.分别令r=2、3、4,用subplot画出参数t=0~10区间每隔0.1生成x~y曲线。

t=0:

0.1:

10;

forr=2:

4;

x=r*cos(t)+3*t;

y=r*sin(t)+3;

subplot(1,3,r-1);

plot(x,y);

end

3.设,

a)若=0.5,令N=1,2,3,4,使用循环语句在4个2*2子图中分别画出其曲线,横轴标注N的取值。

a=0.5;t=0:

0.1:

10;

forN=1:

4

   x=sin(t);

y=sin(N*t+a);

subplot(2,2,N);

plot(x,y);

xlabel(N);

end

b)若N=2,取,使用循环语句在4个2*2子图中分别画出其曲线,横轴标注的取值。

N=2;t=0:

0.1:

10;

a=[0,pi/3,pi/2,pi];

form=1:

4

   x=sin(t);

   y=sin(N*t+a(m));

   subplot(2,2,m);

   plot(x,y);

xlabel(a(m));

end

4.(选做)以下给出双曲螺线、三叶玫瑰线、箕舌线和双曲线的方程,在4个2*2子图中分别画出其曲线,横轴分别标注“双曲螺线”,“三叶玫瑰线”,“箕舌线”,“双曲线”。

保存为curve.m文件。

双曲螺线,三叶玫瑰线,箕舌线,双曲线

其中a=2,b=3,

a=2;b=3;

theta=0:

0.01:

2*pi;

r=a./theta;

subplot(2,2,1);

polar(theta,r);

xlabel('双曲螺线');

r=a.*cos(3*theta);

subplot(2,2,2);

polar(theta,r);

xlabel('三叶玫瑰线');

x=-5:

0.1:

5;

y=8*a^3./(x.^2+4*a^2);

subplot(2,2,3);

plot(x,y);

xlabel('箕舌线');

y=-5:

0.01:

5;

x=sqrt(a^2/b^2+a^2*y.^2./b^2);

subplot(2,2,4);

plot(x,y,-x,y,'b');

xlabel('双曲线');

5.(选做)

a)已知椭球面的曲面方程为,其中a=4,b=3,c=1.5用plot3函数作3-D图。

a=4;b=3;c=1.5;

x=-10:

0.1:

10;

y=x';

[X,Y]=meshgrid(x,y);

Z=sqrt(c^2-c^2.*X.^2./a^2-c^2.*Y.^2./b^2);

plot3(X,Y,Z,X,Y,-Z)

b)已知鞍形曲面的方程为,其中p=4,q=3用mesh函数作3-D图。

p=4;q=3;

[x,y]=meshgrid(-10:

0.2:

10,-10:

0.2:

10);

z=-x.^2/2*p+y.^2/2*q;

mesh(x,y,z);

c)保存为pict3d.m。

实验要求:

记录命令代码或函数代码和输出结果,有图形输出的要绘图。

实验四:

matlab应用于数字图像增强和滤波

实验目的:

1.熟悉灰度图像读入函数imread和图像显示函数imshow。

2.掌握数据类型强制转换函数y=double(x)。

(注意进行运算前类型为uint8的数据必须转换为double类型)。

3.掌握使用函数映射增强图像的方法。

4.熟悉使用imhist函数显示图像直方图。

5.熟悉使用histeq函数进行直方图均衡化,通过实验结果理解直方图均衡化的作用。

6.掌握加噪函数imnoise函数。

7.熟悉常用空域平滑滤波和锐化滤波模板,如下:

平滑滤波模板          ,

锐化滤波模板          

8.掌握空域滤波2-D卷积函数y=conv2(x,d,’same’)的调用。

其中x为原始图像,y为滤波后图像,d为滤波模板。

9.(选做)熟悉切贝雪夫I型滤波器设计函数cheby1,滤波网络频率特性函数freqz和二维滤波filter2函数。

实验内容:

1.根据简单的函数映射规则编写程序experiment.m,完成图像求反、增强对比度、降低对比度。

(1).在MATLAB中读入名为lena.bmp的图像给矩阵X,将X强制类型转换为double。

(2).对原始图像求反,即黑色?

?

白色,形成底片效果,结果赋值给矩阵X1。

要求原图像灰度范围0~255,求反后灰度变化范围255~0。

(3).对原始图像X降低对比度,结果赋值给矩阵X2。

(提示:

使用一次直线映射)

要求原图像灰度范围0~255,降低对比度后灰度变化范围0~127。

(4).对降低对比度后的图像X2增强对比度(提示:

使用指数函数映射),结果赋值给矩阵X3,要求与原始图像外观类似。

(5).在figureNo.1显示原图像、求反图像、增强对比度图像和降低对比度图像的图像与直方图,并添加标注说明。

(6).对降低对比度后图像矩阵X2使用histeq函数进行直方图均衡化,结果赋值给矩阵X4。

在figureNo.2显示降低对比度后图像与直方图均衡化后图像,并添加标注说明。

x=imread('lena.bmp');

x=double(x)/255;

x1=1-x;

x2=(floor(x*255/2)/255);

x3=(exp(x2*255/10))/255;

figure,subplot(4,2,1),imshow(x)

title('原图像');

subplot(4,2,2),imhist(x);

title('原图像直方图');

subplot(4,2,3),imshow(x1);

title('求反图像');

subplot(4,2,4),imhist(x1);

title('求反图像直方图');

subplot(4,2,5),imshow(x2);

title('增强对比度图像');

subplot(4,2,6),imhist(x2);

title('增强对比度图像直方图');

subplot(4,2,7),imshow(x3);

title('降低对比度图像');

subplot(4,2,8),imhist(x3);

title('降低对比度图像直方图');

figure,subplot(1,2,1),imshow(x2);

title('降低对比度图像');

subplot(1,2,2),imshow(x4);

title('直方图均衡化图像');

2.以下将所有代码写成名为imfil.m的脚本文件,存盘。

在commandwindow中运行。

(1).在MATLAB中读入名为eight.tif的图像给矩阵X,将X强制类型转换为double,最大值归一化并显示X。

(2).使用imnoise函数对图像矩阵X加噪,加噪后图像矩阵名为J。

要求噪声为零均值,方差0.005的高斯噪声。

(3).使用以上给出的平滑滤波模板和conv2函数对加噪图像进行平滑滤波即降噪,输出图像Y1并显示。

(4).使用以上给出的锐化滤波模板和conv2函数对图像X进行锐化滤波即边缘增强,输出图像Y2并显示。

(5).在一个图形窗口中建立2×2子窗口,分别显示原始图像X,加噪图像J,降噪后图像Y1和边缘增强图像Y2。

X=imread('eight.tif');

Y=double(X);

x=(255-Y)./255;

J=imnoise(x,'gaussian',0,0.005);

d1=0.1.*[1,1,1;1,2,1;1,1,1];

Y1=conv2(J,d1,'same');

d2=[0,-1,0;-1,5,-1;0,-1,0];

Y2=conv2(Y,d2,'same');

subplot(2,2,1),imshow(X);title('原图象');

subplot(2,2,2),imshow(J);title('加噪图象');

subplot(2,2,3),imshow(Y1);title('降噪后图象');

subplot(2,2,4),imshow(Y2/max(max(Y2))+Y/255);title('边缘增强图象');

3.(选做)编写程序specfil.m,完成理想滤波器对一幅图像的低通、高通滤波,比较并分析结果。

(1).在MATLAB中读入名为lena.bmp的图像给矩阵X,将X强制类型转换为double。

(2).用cheby1分别设计低通和高通滤波器并对原始图像X进行滤波,低通滤波后图像为X1,高通滤波后图像为X2。

(3).在FigureNO1中开设1*3个子窗口显示原始图像X、低通滤波后图像X1和高通滤波后图像X2。

4.(选做)编写函数[f2,f3]=photo(ut),图像文件名为lena256.bmp,第ut行为破损行,即令该行值全为255,文件存为lena2.bmp,编写程序进行预测修补,文件保存为lena3.bmp。

其中图像文件读入函数为imread,写出函数为imwrite,无符号8位整型数转换为双精度类型函数为double,其逆运算函数为uint8。

实验要求:

记录命令代码或函数代码和输出结果,实验三依次输入ut=1,ut=110和ut=256进行测试。

实验五:

函数编写与程序调试

实验目的:

1.掌握函数的编写[y1,y2…]=functionname(x1,x2,…),明确输入变量与输出变量,掌握函数的调用。

2.熟悉使用if…end中插入error,break终止循环。

3.熟悉掌握使用设置断点的方法进行程序调试。

实验内容:

1.设,写出一个MATLAB函数程序f31.m,使得调用f31时,x可用矩阵代入,得出的f(x)为同阶矩阵。

画出x=[0,4]区间内的f31曲线。

(P874.19)

functiony=f31(x)

  y=1./((x-2).^2+0.1)+1./((x-3).^4+0.01);

plot(x,y);

2.寻找Fibonacc数组中大于N的元素T并显示从1开始截止到N的全部数组S,Fibonacc数组如下:

{11235813213455……}。

方法一.编写function[S,T]=findfib(N)函数文件,使用while循环。

function[S,T]=findfib(N)

      S=[1,1];i=1;

    whileS(i)+S(i+1)

          S(i+2)=S(i+1)+S(i);

          i=i+1;

      end    

          T=S(i+1)+S(i);

输出结果:

[S,T]=findfib(100)

S=

    1    1    2    3    5    8   13   21   34   55   89

T=

  144

方法二.编写function[S,T]=findfib1(N)函数文件,使用for循环,用if条件语句找到符合条件的元素使用break并退出循环。

function[S,T]=findfib1(N)

        f=[1,1];

        form=1:

1000

           f(m+2)=f(m+1)+f(m);

            iff(m+2)>N;

                break;

              end

        end

        T=f(m+2);

        f(m+2)=[];

        S=f;

输出结果:

[S,T]=findfib1(100)

S=

    1    1    2    3    5    8   13   21   34   55   89

T=

144

3.使用两种方法根据模型画出一组椭圆,其中a为0.5~4.5间隔0.25的一组数,要求横轴标注’X’,纵轴标注’Y’,图形标题标注’一组a=0.5~4.5的椭圆’。

方法一.使用for循环做出exp1.m文件。

clearall;closeall;

    fora=0.5:

0.25:

4.5;

        thita=0:

0.01:

2*pi;

        x=a.*cos(thita);

        y=sqrt(25-a.^2).*sin(thita);

        plot(x,y);

        axis('equal');

        gridon;

        holdon;

        title('一组a=0.5~4.5的椭圆');

        xlabel('X');

        ylabel('Y');

    end

方法二.不使用for循环,编写函数function[x,y]=exp2(a),在commandwindow中给a赋值,调用exp2函数作图。

function[x,y]=exp2(a)

        thita=0:

0.01:

2*pi;

        x=cos(thita')*a;

        y=sin(thita')*sqrt(25-a.^2);

        plot(x,y,'b-');

        axis('equal');

        gridon;

        holdon;

        title('一组a=0.5~4.5的椭圆');

        xlabel('X');

        ylabel('Y');

        

比较两种方法。

提示:

使用下列一段程序可以画单位圆。

clearall;closeall;

thita=0:

0.01:

2*pi;R=1;

x=R*cos(thita);y=R*sin(thita)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1