实验报告matlab(精选8篇)
一、实验目得 初步熟悉 MATLAB 工作环境,熟悉命令窗口,学会使用帮助窗口查找帮助信息。
命令窗口 二、实验内容(1)熟悉MATLAB平台得工作环境.(2)
熟悉MATLAB 得5 个工作窗口。
(3)MATLAB 得优先搜索顺序.三、实验步骤 1、熟悉MATLAB 得5 个基本窗口 ① mand Window(命令窗口)
② Workspace(工作空间窗口)
③ mand History(命令历史记录窗口)
④ Current Directory(当前目录窗口)
⑤ Help Window(帮助窗口)
(1)命令窗口(mand Window)。
在命令窗口中依次输入以下命令:
>〉x=1 〉> y=[1 2 3
4 5 68 9]; 〉> z1=[1:10],z2=[1:2:5]; >> w=linspace(1,10,10); >〉 t1=ones(3),t2=ones(1,3),t3=ones(3,1)〉〉 t4=ones(3),t4=eye(4)x =1 z1 =
3
9t1 =
1
1
t2 =
1
t3 =
1 t4 =
1
1
1
t4 =
1
0
0
0
0
0
0
0
0
0
0
0
0
思考题: ①
变量如何声明, , 变量名须遵守什么规则、就是否区分大小写。
答:(1)变量声明
1、局部变量 每个函数都有自己得局部变量,这些变量只能在定义它得函数内部使用。当函数运行时,局部变量保存在函数得工作空间中,一旦函数退出,这些局部变量将不复存在。
脚本(没有输入输出参数,由一系列MATLAB命令组成得M文件)没有单独得工作空间,只能共享调用者得工作空间。当从命令行调用,脚本变量存在基本工作空间中;当从函数调用,脚本变量存在函数空间中. 2、全局变量 在函数或基本工作空间内,用global声明得变量为全局变量。例如声明a为全局变量:
>〉global a 声明了全局变量得函数或基本工作空间,共享该全局变量,都可以给它曲赋值。
如果函数得子函数也要使用全局变量,也必须用global声明.3、永久变量 永久变量用persistent声明,只能在M文件函数中定义与使用,只允许声明它得函数存取.当声明它得函数退出时,MATLAB不会从内存中清除它,例如声明a为永久变量: 〉〉persistent a(2)变量命名规则如下: :
始于字母,由字母、数字或下划线组成;区分大小写;可任意长,但使用前N个字符.N与硬件有关,由函数namelengthmax返回,一般N=63; 不能使用关键字作为变量名(关键字在后面给出); 避免使用函数名作为变量名.如果变量采用函数名,该函数失效.(3)区分大小写
②
试说明分号、逗号、冒号得用法。
答:分号:加上分号“;“其作用就是将计算机结果存入内存,但不显示在屏幕上,反之,语句结尾若不加“;”,则表示在语句执行后,在将计算结果存入内存得同时,还将运算结果显示出来.逗号:分割列表
冒号:从什么到什么,比如1:10意思就是——1到10 ③ ③
l inspace())
称为“线性等分”函数, , 说明它得用法。可使用help命令,格式如下:
>>help linspace
④
数 说明函数 ones())、、zero s()、eye()得用法。
答;(1)ones()函数:全部元素都为 1 得常数矩阵;(2)zeros()函数:全部元素都为 0 得矩阵;(3)eye()函数:单位矩阵;
(4)linspace()函数:如 a=linspace(n1,n2,n3),表示在线性空
间上,行矢量得值从 n1 到 n2(2)工作空间窗口(Workspace). 单击工作空间窗口右上角得按钮,将其从MATLAB 主界面分离出来。
① 在工作空间查瞧各个变量,或在命令窗口用who, whos(注意大小写)查瞧各个 变量。
② 在工作空间双击变量,弹出Array Editor 窗口(数组编辑器窗口),即可修改变量。
③ 使用save 命令把工作空间得全部变量保存为my_var、mat 文件。
〉〉save my_var、mat
④ 输入下列命令: 〉〉clear all %清除工作空间得所有变量
观察工作空间得变量就是否被清空。使用load 命令把刚才保存得变量载入工作空间。
>〉load my_var、mat
⑤ 清除命令窗口命令: >〉clc(3)历史命令窗口(mand History)。
打开历史命令窗口,可以瞧到每次运行MATLAB 得时间与曾在命令窗口输入过得命 令,练习以下几种利用历史命令窗口重复执行输入过得命令得方法。
① 在历史命令窗口中选中要重复执行得一行或几行命令,右击,出现快捷菜单,选择 Copy,然后再Paste 到命令窗口。
② 在历史命令窗口中双击要执行得一行命令,或者选中要重复执行得一行或几行命令 后,用鼠标将其拖动到命令窗口中执行。
③ 在历史命令窗口中选中要重复执行得一行或几行命令,右击,出现快捷菜单,选择 Evaluate Selection,也可以执行。
④ 或者在命令窗口使用方向键得上下键得到以前输入得命令。例如,按方向键“↑” 一次,就重新将用户最后一次输入得命令调到MATLAB 提示符下。重复地按方向上键 “↑”,就会在每次按下得时候调用再往前一次输入得命令。类似地,按方向键“↓”得时 候,就往后调用一次输入得命令.按方向键“←“或者方向键“→”就会在提示符得命令 中左右移动光标,这样用户就可以用类似于在字处理软件中编辑文本得方法编辑这些命令。
(4)
当前目录命令窗口(Current Directory).MATLAB 得当前目录即就是系统默认得实施打开、装载、编辑与保存文件等操作时得文 件夹。打开当前目录窗口后,可以瞧到用“save”命令所保存得my_var、mat 文件就是保存在 目录C:MATLAB6p5work 下。
(5)帮助窗口(Help Window)。
单击工具栏得图标,或选择菜单View|Help,或选择菜单Help|MATLAB Help 都能 启动帮助窗口。
① 通过Index 选项卡查找log2()函数得用法,在Search index for 栏中输入需要查找得 词汇“log2”,在左下侧就列出与之最匹配得词汇条目,选择“log2[1]”,右侧得窗口就 会显示相应得内容。
② 也可以通过Search 选项卡查找log2()函数得用法.Search 选项卡与Index 选项卡 不同,Index 只在专用术语表中查找,而Search 搜索得就是整个HTML 帮助文件。
2、MATLAB 得数值显示格式设置 屏幕显示方式有紧凑(pact)与松散(Loose)两种,其中Loose 为默认方式.>〉a=ones(1,30)
〉>format pact
〉〉a 数字显示格式有short、long、short e、long e 等,请参照教材得列表练习一遍。
〉〉format long >>pi
〉〉format short >〉pi
〉>format long 〉〉pi
>>format + 〉〉pi
〉>—pi
3、变量得搜索顺序 在命令窗口中输入以下指令:
>>pi
〉>sin(pi);
>>exist(’pi”)
〉>pi=0;>〉exist(’pi“)
>〉pi
〉〉clear pi 〉>exist('pi’)>>pi
思考题:① 3 次执行exist(’pi’)得结果一样吗?如果不一样,试解释为什么? 答:不一样,pi原来就是库存函数,但就是如果被赋值则系统默认被赋予得值为pi后来得值,但就是当执行clear pi之后所赋得值被清空,因此pi得值又成为3、1416 ② 圆周率 pi 就是系统得默认常量,为什么会被改变为 0? 答:pi原来就是库存函数,但就是如果被赋值则系统默认被赋予得值为 pi 后来得值,但就是当执行 clear pi之后所赋得值被清空,因此 pi 得值又成为3、1416
实验二
MA TLAB语言基础 一、实验目得 基本掌握 MATLAB 向量、矩阵、数组得生成及其基本运算(区分数组运算与矩阵运算)、常用得数学函数。交接字符串得操作.二、实验内容(1)向量得生成与运算。
(2)矩阵得创建、引用与运算。
(3)
多维数组得创建及运算。
(4)字符串得操作。
三、实验步骤 1、向量得生成与运算 1)
向量得生成 直接输入法: A =
>〉 B=[1;2;3;4;5]
B =
1
2
5 冒号生成发:
〉〉 A=1:2:10 ,B=1:10,C=10:—1:1
A =
3
5
7
B =
5
C =
10
8
4
1 函数法:
Linspace()就是线性等分函数,logspace()就是对数等分函数。
>〉 A=linspace(1,10),B=linspace(1,30,10)A =
Columns 1 through 91、0000
1、0909
1、1818
1、2727
1、3636
1、4545
1、5455
1、6364
1、7273
Columns 10 through 181、8182
1、9091
2、0000
2、0909
2、1818
2、2727
2、3636
2、4545
2、5455
Columns 19 through 272、6364
2、7273
2、8182
2、9091
3、0000
3、0909
3、1818
3、2727
3、3636
Columns 28 through 36
3、4545
3、5455
3、6364
3、7273
3、8182
3、9091
4、0000
4、0909
4、1818
Columns 37 through 454、2727
4、3636
4、4545
4、5455
4、6364
4、7273
4、8182
4、9091
5、0000
Columns 46 through 545、0909
5、1818
5、2727
5、3636
5、4545
5、5455
5、6364
5、7273
5、8182
Columns 55 through 63
5、9091
6、0000
6、0909
6、1818
6、2727
6、3636
6、4545
6、5455
6、6364
Columns 64 through 72
6、7273
6、8182
6、9091
7、0000
7、0909
7、1818
7、2727
7、3636
7、4545
Columns 73 through 81
7、5455
7、6364
7、7273
7、8182
7、9091
8、0000
8、0909
8、1818
8、2727
Columns 82 through 908、3636
8、4545
8、5455
8、6364
8、7273
8、8182
8、9091
9、0000
9、0909
Columns 91 through 999、1818
9、2727
9、3636
9、4545
9、5455
9、6364
9、7273
9、8182
9、9091
Column 100
10、0000
B =
Columns 1 through 91、0000
4、2222
7、4444
10、666713、8889
17、1111
20、333323、555626、7778
Column 1030、0000 >> A=logspace(0,4,5)A =
1
10
100
1000
10000 练习:
使用 logspace()创建1—4得有 10 个元素得行向量。
答案:
>〉 A=logspace(1,10,4*pi)
A =1、0e+010 *
Columns 1 through 9
0、0000
0、0000
0、0000
0、0000
0、0000
0、0000
0、0001
0、0005
0、0035
Columns 10 through 120、0231
0、1520
1、0000 2)向量得运算 维数相同得行向量只见可以相加减,维数相同得列向量也可以相加减,标量可以与向量直接相乘除。
〉〉 A=[1 2 3 4 5],B=3:7,A =
4
B =
7
>〉 AT=A”,BT=B“, AT =
BT =
6
>〉 E1=A+B, E2=A-B
E1 =
6
10E2 =
—2
—2
—2
〉〉 F=AT—BT, F =
-2
—2
〉〉 G1=3*A, G2=B/3, G1 =
12
15
G2 =1、0000
1、3333
1、6667
2、0000
2、3333 向量得点积与叉积运算。
〉〉 A=ones(1,10);B=(1:10); BT=B”;>> E1=dot(A,B)
E1 =
55
〉〉 E2=A*BT
E2 =
〉〉 clear >> A=1:3,B=3:5,A =
3
B =
〉〉 E=cross(A,B)
E = -2
—2 2.矩阵得创建、引用与运算
1)矩阵得创建与引用
矩阵就是由元素构成得矩阵结构,行向量与列向量就是矩阵得特殊形式。
直接输入法:
〉〉 A=[1 2 3;4 5 6]
A =
1
3
4
6
〉〉 B=[ 1 4 75 86 9 ] B =
1
7
8
〉> A(1)
ans =〉〉 A(4:end)
ans =
6 〉〉 B(:,1)ans =
2〉> B(:)ans =
1
8>〉 B(5)
ans =抽取法 〉> clear 〉> A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] A =
3
4
10
12
13
16 >〉 B=A(1:3,2:3)
B =
6
10
11 〉> C=A([1 3],[2 4])
C =
10
12 〉〉 A([1 3;2 4])ans =
9
5 函数法: 〉〉 A=ones(3,4)A =
1
1
>〉 B=zero(3)
??? Undefined function or method “zero’ for input arguments of type ”double’、>> B=zeros(3)B =
0
0
0
0
0
0
0
0
0 >> C=eyes(3,2)??? Undefined function or method “eyes’ for input arguments of type ”double’、〉> C=eye(3,2)C =
0
0
0
0 >> D=magic(3)D =
6
拼接法 〉〉 clear 〉> A=ones(3,4)A =
1
1
1
1
>〉 B=zeros(3)
B =
0
0
0
0
0
0
0
0
0 >〉 C=eye(4)C =
0
0
0
0
0
0
0
0
0
0
0
0
>〉 D=[A B] D =
1
0
0
0
0
0
0
0
0
0 >〉 F=[A;C] F =
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
拼接函数与变形函数法:
〉〉 clear 〉> A=[0 1;1 1] A =
0
1
1
〉> B=2*ones(2)
B =
2
>> cat(1,A,B,A)ans =
0
1
1
2
2
0
>〉 cat(2 A,B,A)
??? cat(2 A,B,A)Error: Unexpected MATLAB expression、>〉 cat(2,A,B,A)ans =
0
1
0
1
2
2
1
1 >〉 repmat(A,2,2)ans =
0
1
0
1
1
1
0
0
1
1
1
〉> repmat(A,2)ans =
0
0
1
0
1
0
1
练习:使用函数法、拼接法、拼接函数法与变形函数法,按照要求创建以下矩阵:A 为
得全1矩阵、B 为得 0 矩阵/C 为得单位矩阵、D 为得魔方阵、E 由 C
与D纵向拼接而成,F 抽取 E 得2—--5 行元素生成、G 由 F 经变形为得矩阵而得、以 G 为子矩阵用复制函数(repmat)生成得大矩阵H。
答案 :
>〉 A=ones(3,4)
A =
1
1
1
1 〉〉 B=zeros(3,3)B =
0
0
0
0
0
0
0
0
0 >〉 C=eye(3)
C =
1
0
0
0
0
0
0
>〉 D=magic(3)D =
5
4
>> E=[C;D] E =
1
0
0
0
0
0
0
8
〉〉 F=(2:5,:)??? F=(2:5,:)Error: Expression or statement is incorrect—-possibly unbalanced(, {, or [、>〉 F=E(2:5,:)F =
0
0
0
0
〉〉 G=respace(E,3,4)
??? Undefined mand/function “respace’、〉>
G=respace(F,3,4)
??? Undefined mand/function ”respace“、〉> G=reshape(F,3,4)
G =
0
0
1
6
0
0
〉〉 H=repmat(G,2,2)H =
0
0
0
5
0
8
0
0
7
0
0
0
3
1
0
1
0
0
1
0
0
0
0
2)矩阵得运算 矩阵得加减、数乘与乘法
已知矩阵: >> A=[1 2
-1], A =
-1 >〉 B=[-1 0
2] B =
0
>〉 A+B ans =
0
4
1 〉〉 2*A ans =
4
-2 >〉 2*A-3*B ans =
-8 〉〉 A*B ans =
4-4
—2 矩阵得逆矩阵 〉〉 format rat;A=[1 0 1;2 1 2;0 4 6] A =
1
0
0
>> A1=inv(A)A1 =
—1/3
2/3
-1/6
-2
1
0
4/3
-2/3
1/6
>〉 A*A1
ans =
0
0
0
0
0
0
矩阵得除法 >〉 a=[1 2 1;3 1 4;2 2 1],b=[1 1 2],d=b’ a =
1
3
2
b =
1
d =
1
1
>> c1=b*inv(a),c2=b/a c1 =
6/7
3/7
-4/7
c2 =
6/7
3/7
-4/7
>> c3=inv(a)*d, c4=ab c3 =
2/7
-4/7
??? Error using ==〉 mldivide Matrix dimensions must agree、>〉 c3=inv(a)*d,c4=ad c3 =
2/7
-4/7
c4 =
2/7
-4/7
练习: 按下列要求求出各种得矩阵运算得值
求矩阵得秩、特征值与特征向量、矩阵得乘幂与开方;
矩阵得指数与对数
矩阵得提取与翻转 答案:
〉〉 A=[6 3
4 3
—2 5 7 —4
8-1 —3 —7] A =
6
-4
-1
—3
—7 〉> B=rank(A)B =〉> rb=rank(A)
rb =>> [X,Lamda]=eig(A)
??? Error using ==〉 eig Matrix must be square、〉〉 [X,Lamda]=eigs(A)??? Error using ==〉 eigs A must be a square matrix or a function which putes A*x、〉〉 C=[6 3 4
-2 5 7
—1-3] C =
4
—2
8
—1
—3 >> [X,Lamda]=eigs(C)
X =0、8013
-0、1094
-0、1606
0、3638
—0、6564
0、86690、4749
0、7464
-0、4719 Lamda =9、7326
0
0
0
-3、2928
0
0
0
1、5602 〉〉 [X,Lamda]=eig(C)
X =
0、8013
—0、1094
—0、16060、3638
—0、6564
0、86690、4749
0、7464
-0、4719 Lamda =9、7326
0
0
0
-3、2928
0
0
0
1、5602 〉> [X,Lamda]=eig(C)
X =
0、8013
—0、1094
-0、1606
0、3638
—0、6564
0、8669
0、4749
0、7464
—0、4719 Lamda =9、7326
0
0
0
—3、2928
0
0
0
1、5602 〉> D=A^2 ??? Error using ==> mpower Matrix must be square、〉> D=C^2 D =
33
34
〉〉 E=sqrtm(C)E =
2、2447 + 0、2706i0、6974 — 0、1400i0、9422-0、3494i
-0、5815 + 1、6244i
2、1005-0、8405i
1、7620-2、0970i
1、9719 - 1、8471i
-0、3017 + 0、9557i
0、0236 + 2、3845i >> F=expm(C)F =
1、0e+004 *
1、0653
0、5415
0、6323
0、4830
0、2465
0、2876
0、6316
0、3206
0、3745 〉〉 G=logm(C)Warning: Principal matrix logarithm is not defined for A with
nonpositive real eigenvalues、A non-principal matrix
logarithm is returned、〉 In funm at 153
In logm at 27 G =
1、7129 + 0、4686i0、5305-0、2425i0、5429-0、6049i
1、1938 + 2、8123i0、3658 — 1、4552i
—0、5514-3、6305i
-0、0748 - 3、1978i
0、7419 + 1、6546i1、8333 + 4、1282i >> H=fliplr(C)H =
5
-2
—1
>> I=triu(C)I =
0
0
0
-3 〉〉 J=tril(C)
J =
0
0
-2
0
-3 >> K=diag(C)K =
6-3 3.多维数组得创建及运算 1)多维数组得创建 >〉 A1=[1,2,3;4 5 6;7,8,9];A2=reshape([10:18],3,3)A2 =
10
13
16
14
17
12
15〉〉 T1(:,:,1)=ones(3);T1(:,:,2)=zeros(3)T1(:,:,1)
=
1
1
1
T1(:,:,2)=
0
0
0
0
0
0
0
0
0 〉> T2=ones(3,3,2)
T2(:,:,1)=
1
1
1 T2(:,:,2)=
1
1
1 >> T3=cat(3,A1,A2),T4=repmat(A1,[1,1,2])
T3(:,:,1)=
T3(:,:,2)=
10
13
16
17
15T4(:,:,1)
=
2
6
8
T4(:,:,2)=
7
8
2)多维数组得创建
数组运算用小圆点加在运算符得前面表示,以区分矩阵得运算。特点就是两个数组相对应得元素进行运算。
〉〉 A=[1:6];B=ones(1,6);>> C1=A+B,C2=A—B C1 =
2
C2 =
0
3
>> C3=A、*B,C4=B、/A,C5=A、B C3 =
6 C4 =
1、0000
0、5000
0、3333
0、2500
0、2000
0、1667 C5 = 1、0000
0、5000
0、3333
0、2500
0、2000
0、1667
关系运算或逻辑运算得结果都就是逻辑值.>〉 I=A〉3,C6=A(I)
I =
0
0
0
1
1 C6 =
4
6 〉〉 A1=A-3,I2=A1&A A1 =
—2
—1
0
2
I2 =
1
1
0
1
〉〉 I3=~I I3 =
1
0
0
0 4.字符串得操作 1)字符串得创建
>〉 S1=”Ilike MATLAB’ S1 = Ilike MATLAB >> S2=“I'’m a stuent、” S2 = I“m a stuent、〉> S3=[S2,”and’,S1] S3 = I“m a stuent、andIlike MATLAB 2)求字符串长度 〉〉 length(S1)ans =>> size(S1)ans =
13)字符串与一维数值数组得相互转换 >> CS1=abs(S1)CS1 =
101
32
65
84
66 〉> CS2=double(S1)CS2 =
108
105
101
32
77
65
76
>> char(CS2)
ans = Ilike MATLAB >> setstr(CS2)
ans = Ilike MATLAB 练习:用char()与向量生成得方法创建如下字符串AaBbCc、、、、、、XxYyZz、〉> S1=65:90;S2=97:122;〉〉 C=[S1;S2];>>
C=C(:)’;〉>
S3=double(C);char(S3)ans = AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz 实验三
MAL TAB B 数值运算 一、实验目得
掌握 MATLAB 得数值运算及其运算中所用到得函数,掌握结构数组与细胞数组得操作。
二、实验内容
1)
多项式运算。
2)
多项式插值与拟合。
3)
数值为积分。
4)
结构数组与细胞数组。
三、实验步骤
1、多项式运算
1)
多项式表示。在 MATLAB 中,多项式表示成向量得形式.如: 在 MATLAB 中表示为 >> s=[1 3-5 0 9] 2)
多项式得加减法相当于向量得加减法,但必须注意阶次要相同。如不同,低阶次得要补 0。如多项式与多项式相加。
〉> s1=[0 0 2 3 11] 〉〉 s2=[1 2 —5 4 7] 〉〉 s3=s1+s2 答;s1 =
0
0
3s2 =
—5
4
s3 =
—3
18 3)
多项式得乘、除法分别用函数 conv与得 deconv实现。
〉> s1=[2 3 11] >> s2=[1 3 —5 4 7] >〉 s3=conv(s1,s2)
>> s4=deconv(s3,s1)答;s1 =
11 s2 =
1
3
4
s3 =
—29
65
s4 =
1
7 4)
多项式求根用函数roots。
>〉 s1=[2 4 2] >> roots(s1)
答;s1 =
ans =
—1
5)
多项式求值用函数 polyval >> s1=[2 4 1-3] 〉〉 polyval(s1,3)
〉> x=1:10 〉〉 y=polyval(s1,x)答;s1 =
2
-3 ans =
90 x =
1
6
9
10 y =
Columns 1 through 8
193
352
579
886
1285
Columns 9 through 10 练习:求得“商”及余数.〉> s1=[1 0 1];s2=[1 3];s3=[1 1]; 〉> s4=[1 0 2 1]; >> [q,r]=deconv(conv(conv(s1,s2),s3),s4)答;q =
1
4 r =
0
0
-1 2、多项式插值与拟合 有一组实验数据如附表 1—1 所示。
附表 1-1 X 1 2 3 4 5 6 7 8 9 10 Y 16 32 7
1
分别用拟合(二阶至三阶)与插值(线性与三次样条)得方法来估算X=9、5 时 Y 得值。以下就是实现一阶拟合得语句。
〉> x=1:10 >〉 y=[16 32 70 142 260 436 682 1010 1342 1960] 〉> p1=polyfit(x,y,1)
%一阶拟合 >> y1=polyval(p1,9、5)
%计算多项式 P1 在x=9、5 得值 答;x =
2
9y =
Columns 1 through 8
32
70
142
260
436
682
1010
Columns 9 through 10
1342
1960 p1 =
200、9818 -510、4000 y1 =1、3989e+003 3、数值微积分
1)
差分使用 diff 函数实现。
>〉 x=1:2:9 〉〉 diff(x)答;x =
5
ans =
2 2)
可以用因变量与自变量差分得结果相处得到数值微分。
〉> x=linspace(0,2*pi,100);>〉 y=sin(x); >〉 plot(x,y)>〉 y1=diff(y)、/diff(x); 〉〉 plot(x(1:end-1),y1)答;
3)
cumsum 函数求累计积分,trapz 函数用梯形法求定积分,即曲线得面积。
〉〉 x=ones(1,10)
>> cumsum(x)>> x=linspace(0,pi,100); >> y=sin(x); 〉〉 trapz(x,y)〉> p=cumsum(y); >> p(100)*pi/(100—1)答;x =
1
1
ans =
9ans =
1、9998 ans =
1、9998 练习:图 A1就是瑞士地图,为了算出其国土面积,首先对地图作如下测量:以由西向东方向为 X 轴,由南向北方向为 Y 轴,选择方便得原点,并将从最西边界点到最东边界点在 X 轴上得区间适当划分为若干段,在每个分点得Y方向测出南边界点与北边界点得 Y 坐标Y1与 Y2,这样就得到表 1,根据地图比例尺回到18mm相当于 40Km,试由测量数据计算瑞士国土近似面积,与其精确值 41228 比较。地图得数据见附表 1—2(单位mm).附表 1—2 X 7 10、5 13 17、5 34 40、5 44、5 48 56 61 68、5 76、5 80、5 91 Y1 44 45 47 5
34 41 45 46 Y2 44 59 7
18 1 18 续表 X 96 101 104 106、5 111、5 118 123、5 1 36、5 142 146 150 157 158 Y1 43 37 33 28 32 65 55 54 52 50 66 66 68 Y2 121 124 1 21 1 21 121 116 1 22 83 81 82 86 85 68 提示:由高等数学得知识,一条曲线得定积分就是它与 x 轴所围成得面积,那么两条曲线所围成得面积可由两条曲线得定积分相减得到。、结构数组与细胞数组 1)
机构数组得创建. 〉> student、number=’20050731001’;〉〉 student、name=’Jack”;〉〉 student(2)、number=’20050731002’;〉〉 student(2)、name=’Lucy“; >> student 或者用 struct 函数创建。
>> student=struct(”number“,{’001”,“002’},”name',{'Jack’,“Lucy’});答;student =
1x2 struct array with fields:
number
name 2)
机构数组得操作。
〉> student(1)、subject=[]
%添加 subject 域并赋予空值 〉〉 student(1)、score=[] >〉(studeng)〉>fieldnames(studeng)
〉>fieldnames(student)
〉〉 getfield(student,{2},'name')〉〉 student=rmfield(student,”subject’)
%删除 subject 域 〉〉 student=setfield(student,{1},“score’,90);>> student(2)、score=88;
%比较与上一条语句就是否效果一样 答;student =
1x2 struct array with fields:
number
name
subject student =
1x2 struct array with fields:
number
name
subject
score ??? Undefined function or variable ’studeng’、练习:创建一结构数组stusorce,其域为:No,Name,English,Math,Chinese,Total,Average。结构数组得大小为 2×2。
3)
细胞数组得创建。
〉> A={’How are you!”,ones(3);[1 2;3 4],{“cell’}};
%直接创建
〉〉 B(1,1)={’Hello world”};
%由各个细胞元素创建
>> B(1,2)={magic(3)};
>〉 B(2,1)={[1 2 3 4]};答
或者用cell 函数先创建空得细胞数组,然后再给各个元素赋值 c=cell(1,2); >> c(1,1)={’Hello world’};>> c(1,2)={magic(3)}; 〉〉 c(1,3)={[1 2 3 4]}; 4)
细胞数组得操作。
〉> ans1=A(1,1)>> ans2=A(1,1)>〉 whos ans1 ans2 〉〉 celldisp(A)〉> a1=A{2,1}(1,2)>〉 [a2 a3]=deal(A{1:2})
答;ans1 =
’How are you!’ ans2 =
’How are you!’
Name
Size
Bytes
Class
Attributes
ans1
1x1
84
cell
ans2
1x1
84
cell
A{1,1} = How are you!
A{2,1} =
A{1,2} =
1
A{2,2}{1} = cell a1 =a2 = How are you!a3 =
1
2
实验四
MA LT AB B 符号运算
一、实验目得
掌握符号变量与符号表达式得创建,掌握MALTAB得symbol工具箱得一些基本运用。
二、实验内容
1)
符号变量、表达式、方程及函数得表示。
2)
符号微积分运算.
3)
符号表达式得操作与转换.4)
符号微分方程求解.三、实验步骤1、符号运算得引入
在数值运算中如果求,则可以不断让得让x趋近0,一球得表达式趋近什么数,但终究不能令 x=0,因为在数值运算中 0 不就是能作除数得。MATLAB得符号运算能解决这内问题。输入如下命令: 〉> f=sym(’sin(pi*x)/x')
>> limit(f,’x“,0)答;f = sin(pi*x)/x ans = pi 2 2、符号常量、符号变量、符号表达式得创建
1)
使用 sym()创建 输入以下命令,观察 Workspace 中 A、B、f就是什么内性得数据,占用多少字节得内存空间。
>〉 A=sym(”1’)
%符号常量 〉〉 B=sym(’x’)
%符号变量 >> f=sym(’2*x^2+3*x-1’)
%符号表达式 >> clear >> f1=sym(“1+2”)
%有单引号,表示字符串 >〉 f2=sym(1+2)
%无单引号 >〉 f2=sym(1+2)
〉> f4=sym(“2*x+3’)
%为什么出错 〉〉 x=1 〉〉 f4=sym(2*x+3)
答;A = 1 B = x f = 2*x^2+3*x-1 f1 = 1+2 f2 = 3 f2 = 3 f4 = 2*x+3 x =f4 = 5 通过瞧 MATLAB 得帮助可知,sym()得参数可以使字符串或就是数值类型,无论就是哪种类型都会生成符号类型数据。
2)
使用 syms创建 〉> clear >〉 syms x y z 〉> x,y,z 〉〉 f1=x^2+2*x+1 >〉 f2=exp(y)+exp(z)^2 >> f3=f1+f2 答;x = x y = y z = z f1 = x^2+2*x+1 f2 = exp(y)+exp(z)^2 f3 = x^2+2*x+1+exp(y)+exp(z)^2 3 3、符号矩阵创建
>〉 syms a1 a2 a3 a4 〉〉 A=[a1 a2;a3 a4] 〉> A(1),A(3)答;A = [ a1,a2] [ a3, a4] ans = a1 ans = a2 4 4、符号算术运算
1)
符号向量相乘、相除 符号量相成与数值量相乘一样,分成矩阵乘与数组乘。
〉> a=sym(5);b=sym(7); 〉> c1=a*b >〉 c2=a/b >> a=sym(5);B=sym([3 4 5]);>〉 C1=a*B,C2=aB >> syms a b >> A=[5 a;b 3];B=[2*a b;2*b a];〉> C1=A*B,C2=A、*B >〉 C3=AB,C4=A、/B 答;c1 =
35 c2 = 5/7 C1 = [ 15, 20, 25] C2 = [ 3/5, 4/5,1] C1 = [ 10*a+2*a*b,5*b+a^2] [
2*a*b+6*b,b^2+3*a] C2 = [
10*a,a*b] [ 2*b^2,3*a] C3 = [
2*a*(b—3)/(—15+a*b),(a^2-3*b)/(—15+a*b)] [
2*b*(a-5)/(-15+a*b), —(5*a-b^2)/(-15+a*b)] C4 = [ 5/2/a,a/b] [
1/2, 3/a] 2)
符号数值任意精度控制与运算 任意精度得 VPA 运算可以使用命令 digits(设定默认得精度)与vpa(对指定对象以新得精度进行计算)来实现。
>〉 a1=sym(’2*sqrt(5)+pi')
〉> a=sym(’2*sqrt(5)+pi’)〉〉 b=sym(2*sqrt(5)+pi)
>> digits >> vpa(a)>> digits(15)>〉 vpa(a)〉〉 c1=vpa(a,56)
〉〉 c2=vpa(b,56)
答 a1 = 2*sqrt(5)+pi a = 2*sqrt(5)+pi b = 8572296331135796*2^(-50)
Digits = 32 ans = 7、637263128 ans = 7、637 c1 = 7、6372631285535581572696
c2 = 7、6372726175781250000000 注意观察c1 与c2 得数值类型,c1 与 c2 就是否相等。
3)
符号类型与数值类型得转换 使用命令sym可以把数值型对象转换成有理数性符号对象,命令vpa可以讲数值型对象转换为任意精度得 VPA 型符号对象.使用 double,numeric 函数可以将有理数型与 VPA 型符号对象转换成数值对象、〉> clear >〉 a1=sym('2*sqrt(5)+pi’)
>〉 b1=double(a1)
%符号转数值 >> b2=isnumeric(b1)
%判断就是否转换成了数值 >> a2=vpa(a1,70)
%数值转符号 答;a1 = 2*sqrt(5)+pi b1 =7、6137 b2 =
1 a2 = 7、6372631285535589083128858 5 5、、符号表达式得操作与转换
1)独立变量得确定原则 独立变量得确定原则:在符号表达式中默认变量就是惟一得.MATLAB 会对单个英文小写字母(除 i、j外)进行搜索,且以 x 为首选独立变量。如果表达式中字母不唯一,且无 x,就选在字母表最接近x 得字母.如果有相连得字母,则选择在字母表中较后得那一个。例如:中,y 就是默认独立变量。,t 就是默认独立变量。
输入以下命令,观察并分析结果。
>> clear >〉 f=sym(”a+b+i+j+x+y+xz’)
>〉 findsym(f)
〉> findsym(f,1)>〉 findsym(f,2)>> findsym(f,3)
>〉 findsym(f,4)〉〉 findsym(f,5)>〉 findsym(f,6)答;f = a+b+i+j+x+y+xz ans = a, b, j,x,xz, y ans = x ans = x,xz ans =
x,xz,y ans = x,xz,y,j ans = x,xz,y,j,b ans = x,xz,y,j,b,a 2)符号表达式得化简 符号表达式化简主要包括表达式美化(pretty)、合并同类项(collcet)、多项式展开(expand)、因式分解(factor)、化简(simple或 simplify)等函数。
①合并同类项(collect)。分别按 x 得同幂项与e指数同幂项合并表达式: . 〉〉 syms x t; >〉 f=(x^2+x^exp(—t)+1)*(x+exp(-t));〉〉 f1=collect(f)〉〉 f2=collect(f,’exp(-t)“)答;f1 = x^3+exp(-t)*x^2+(x^exp(-t)+1)*x+(x^exp(-t)+1)*exp(-t)
f2 =(x^2+x^exp(-t)+1)*exp(-t)+(x^2+x^exp(—t)+1)*x ②对显示格式加以美化(pretty)。针对上例,用格式美化函数可以使显示得格式更符合数学书写习惯。
>〉 pretty(f1)>〉 pretty(f2)
答;f1 = x^3+exp(-t)*x^2+(x^exp(—t)+1)*x+(x^exp(—t)+1)*exp(-t)
f2 =(x^2+x^exp(-t)+1)*exp(-t)+(x^2+x^exp(—t)+1)*x >〉
pretty(f1)pretty(f2)
3
2
exp(-t)
exp(-t)
x
+ exp(—t)
x
+(x
+ 1)
x +(x
+ 1)exp(—t)
2
exp(—t)
exp(-t)
(x
+ x
+ 1)exp(-t)+(x
+ x
+ 1)x 注意与直接输出得 f1 与 f2 对比。
③多项式展开(expand)。展开成 x 不同次幂得多项式、〉> syms x 〉> f=(x—1)^12;〉> expand(f)〉〉 pretty(expand(f))
答;ans = 1+x^12-12*x^11+66*x^10—220*x^9+495*x^8—792*x^7+924*x^6-792*x^5+495*x^4-220*x^3+66*x^2—12*x
7
6
5
+ x
- 12 x
+ 66 x
— 220 x
+ 495 x
x
+ 924 x
- 792 x
+ 495 x
- 220 x
+ 66 x
- 12 x ④ 因式分解(factor)。将表达式做因式分解。
>> syms x;f=x^12—1; 〉> pretty(factor(f))
答;ans = 1+x^12—12*x^11+66*x^10—220*x^9+495*x^8-792*x^7+924*x^6—792*x^5+495*x^4—220*x^3+66*x^2-12*x
12
11
8
6
5
+ x
— 12 x
+ 66 x
— 220 x
+ 495 x
x
+ 924 x
— 792 x
3
+ 495 x
— 220 x
+ 66 x
- 12 x 〉〉 syms x;f=x^12—1;pretty(factor(f))
2
2
(x-1)(1 + x
+ x)(1 + x)
(1 — x + x)(1 + x)(x
— x
+ 1)⑤化简(simple或 simplify)。
将函数化简.〉〉 clear 〉〉 syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 〉> g1=simple(f)>〉 g2=simplify(f)
答;g1 =(2*x+1)/x g2 =((2*x+1)^3/x^3)^(1/3)6 6、符号表达式得变量替换
subs 函数可以对符号表达式中得符号变量进行替换 >> clear >> f=sym(’(x+y)^2+4*x+10’)〉〉 f1=subs(f,’x',’s')
%使用 s 替换x >〉 f2=subs(f,”x+y’,“z’)答;f =(x+y)^2+4*x+10 f1 =(s+y)^2+4*s+10 f2 = z^2+4*x+10 7、符号极限、符号积分与微分
1)
求极限函数得调用格式 limit(F,x,a)
%返回符号对象 F 当 x→a 时得极限 limit(F,a)
%返回符号对象 F 当独立变量*→a 时得极限
limit(F)
%返回符号对象 F 当独立变量→0(a=0)时得极限 limit(F,x,a,’right’)
%返回符号对象 F 当 x→a 时得右极限 limit(F,x,a,’left”)
%返回符号对象F当 x→a 时得左极限 例一:
〉〉 clear >> f=sym(“sin(x)/x+a*x”)
>〉 limit(f,“x’,0)
%以 x 为自变量求极限 >> limit(f,”a’,0)
%以 a 为自变量求极限 >> limit(f)
%在默认情况下以 x 为自变量求极限 >> findsym(f)
%得到变量并且按字母表顺序排列 答‘f = sin(x)/x+a*x ans = 1 ans = sin(x)/x ans = 1 ans = a,x 例二: >> clear >〉 f=sym('sqrt(1+1/n));
〉〉 limit(f,n,inf)
%求 n 趋于无穷大时得极限
2)
求积分函数得调用格式 int(F)
%求符号对象 F 关于默认变量得不定积分 int(F,v)
%求符号对象 F 关于指定变量 v 得不定积分 int(F,a,b)
%求符号对象 F 关于默认变量得从 a 到 b 得定积分 int(F,v,a,b)
%求符号对象 F 关于指定变量得从 a 到b得定积分 3)
求微分方程得调用格式 diff(F)
%求符号对象 F 关于默认变量得微分 diff(F,v)
%求符号对象 F 关于指定变量 v 得微分 diff(F,n)
%求符号对象 F 关于默认变量得 n 阶微分,n 为自然数 1、2、3…… diff(F,v,n)%求符号对象 F 关于指定变量 v 得 n 阶微分 8 8、符号方程求解
1)常规方程求解函数得调用格式 g=solve(eq)
%求方程(或表达式或字串)eq 关于默认变量得解
g=solve(eq,var)
%求方程(或表达式或字串)eq 关于指定变量 var 得解 g=solve(eq1,eq2,…、,eqn,var1,var2,…,varn)
%求方程(或表达式或字串)eq1,eq2,eq3,……eqn 关于指定变量组var1,var2,……,varn)得解 求一元二次方程得解.其求解方法有多种形式:
① seq=solve(“a*x^2+b*x+c')
② seq=solve(’a*x^2+b*x+c=0”)③ eq=’a*x^2+b*x+c“;④ eq=”a*x^2+b*x+c=0’; seq=solve(eq)
⑤sym x a b c
eq=a*x^2+b*x+c seq=solve(eq)
2)常微分方程求解 求解常微分方程得函数就是 dsolve。应用此函数可以求得常微分方程(组)得通解,以及给定边界条件(或初始条件)后得特解。
常微分方程求解函数得调用格式:
r=dsolve(“eq1,eq2,…’,’cond1,cond2,…’,’v’)r=dsolve(’eq1’,’eq2”,…,“cond1’,’cond2’,…,’v”)说明: ① 以上两式均可给出方程 eq1,、qeq2 对应初始条件 cond1、cond2 之下得一 v 作为解变量得各微分方程得解。
② 常微分方程解得默认变量为 t。
③ 第二式中最多可接受得输入式就是 12 个。
④ 微分方程得表达方法。
在用 MATLAB 求解常微分方程时,用大写字母 Dy表示,用D2y表示,依此类推。
边界条件以类似于 y(a)=b 给出。其中 y 为因变量,a、b 为常数、如果初始条件给得不够,求出得解为含有 C1、C2 等待定常数得通解。
例一 求微分方程得通解、练习:(1)求。
(2)求函数得积分;求函数得导数(3)计算定积分(4)求下列线性方程组得解
(5)求解但 y(0)=2,在 z(0)=7 时,微分方程组得解。
实验五
MATLA B 程序设计
一、实验目得
掌握 MATLAB 程序设计得主要方法,熟练编写 MATLAB函数、二、实验内容
(1)M 文件得编辑。
(2)程序流程控制结构。
(3)子函数调用与参数传递。
(4)局部变量与全局变量。
三、实验步骤1、M M 文件得编辑
选择MATLAB 得菜单,打开新得M文件进行编辑,然后输入以下内容,并保存文件名为 expl、m。
s=0;for n=1:100
s=s+n;end s 答;s =
5050 保存好文件后,在命令窗口输入expl 即可运行该脚本文件,主义观察变量空间。紧接着创建 M 函数文件,然后输入以下内容,并保存文件名为 expl2、m。
function s=expl2(x)
s=0;for n=1:x
s=s+n; end
保存好文件后,在命令窗口输入
>〉 clear 〉> s=expl2(100)以 open 命令可以打开 M 文件进行修改。
〉〉open conv
%打开 conv 函数 2 2、程序流程控制结构
1)
for 循环结构
>〉 for n=1:10 n end 答;n =n =n =n =n =n =
6 n =n =
n =n =
另一种形式得 for 循环: 〉> n=10:—1:5;>〉 for i=n
%循环得次数为向量 n 得列数 i end 答;i =
10 i =i =i =i =i =2)
while 循环结构 在命令窗口输入:
clear x=1;while 1 x=x*2 end 将会瞧到 MATLAB 进入死循环因为 while 判断得值恒为真,这时须按 Ctrl+C键来中断运行,并且可瞧到 x 得值为无穷大。
练习:
(1)请把 exp2、m函数文件用 while 循环改写。
(2)用公式求得近似值,直到最后一项得绝对值小于为止,试编写M脚本文件、3)
if-else—end 分支结构
if—else—end 分支结构有如下 3 种形式。
(a)
if
表达式 语句组 1 end(b)
if
表达式 语句组 1 else 语句组2 end(c)
if
表达式 A
语句组 1 else if 表达式 B 语句组 2 else if 语句组 3 …… else
语句组 n end 4)
switch—case结构 创建 M 脚本文件 exp3、m,输入以下内容并在命令窗口中运行。
%功能:判断键盘输入得数就是奇数还就是偶数 n=input(’n=');if isempty(n)
error(’please input n');
n=input(“n=’);end switch mod(n,2)
case 1
A=’奇数'
case 0
A=’偶数” End 答;n=input('n=’); if isempty(n)
error('please input n’);
n=input(“n=’); end switch mod(n,2)
case 1
A=”奇数“
case 0
A=”偶数' end n=1 A = 奇数 3、子函数与参数传递
有一个函数,试编写实现该函数得函数文件.function g=expl4(x)
%主函数 g=0;for n=1:x
g=g+fact(n);
%调用子函数 end
function y=fact(k)
%子函数 y=1; for n=1:k
y=y*n; end 输入参数可以有函数 nargin 计算,下面得例子 sinplot(),当知输入一个参数 w 时,sinplot()函数会给p赋予默认值 0。4、局部变量与全局变量
数学实验是计算机技术和数学、软件引入教学后出现的新事物。数学实验[1]的目的是提高学生学习数学的积极性, 提高学生对数学的应用意识, 并培养学生用所学的数学知识和计算机技术去认识问题和解决实际问题的能力。不同于传统的数学学习方式, 它强调以学生动手为主的数学学习方式。在数学实验中, 由于计算机的引入和数学软件包的应用, 为数学的思想与方法注入了更多、更广泛的内容, 使学生摆脱了繁重、乏味的数学演算和数值计算, 促进了数学同其他学科之间的结合, 从而使学生有时间去做更多的创造性工作。现在国外小学还开设数学实验室或实验角, 准备各种各样的教具、操作用具, 许多用发现法教学的课就在数学实验室中进行。在如今的大学里, 也加入了这一门课, 比较富有创意。
1 MATLAB的主要功能
MATLAB的数值计算[2]功能在数学类软件中可谓是首屈一指。它可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、链接其他编程语言的程序等, 主要用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等各个领域。
2 MATLAB在数学实验中的应用实例
下面是关于导弹追踪问题的一个实例, 其求解过程充分体现了MATLAB程序设计在数学实验中的重要作用。
设位于坐标原点的甲舰向位于x轴上点A (1, 0) 处的乙舰发射导弹, 导弹头始终对准乙舰。如果乙舰以最大的速度v0 (是常数) 沿平行于y轴的直线行驶, 导弹的速度是5v0, 求导弹运行的曲线方程。又乙舰行驶多远时, 导弹将它击中?
解:假设导弹在t时刻的位置为P (x (t) , y (t) ) , 乙舰位于Q (1, v0t) 。由于导弹头始终对准乙舰, 故此时直线PQ就是导弹的轨迹曲线弧OP在点P处的切线,
又根据题意, 弧OP的长度为│AQ│的5倍,
由式 (1) (2) 消去t整理得模型:
初值条件为:y (0) =0 y' (0) =0
下面给出此模型的MATLAB求解过程:
首先利用MATLAB命令y=dsolve ('5* (1-x) *D2y=sqrt (1+Dy^2) ', 'y (0) =0, Dy (0) =0', 'x')
得到导弹的运行轨迹方程:
其运动轨迹我们使用命令fplot ('-0.625* (1-x) ^0.8+0.4167* (1-x) ^1.2+0.2083', [0, 1])
(为了书写程序的方便, 把分数都用小数进行了替代。)
可以得到导弹的运动轨迹图形为:
易知, 当x=1时y=5/24, 即当乙舰航行到点 (1, 5/2 4) 处时被导弹击中。被击中的时间为:t=y/v0=5/24v0.若v0=1, 则在t=0.21处被击中。
上述问题属典型的二阶非线性微分方程[3]问题, 它的求解用笔算是相当复杂的, 可是这里我们借助MATLAB程序很轻松的就把问题解决了。由此可以看出, MATLAB程序设计在数学实验中作用是非常显著的。
3 结论
围绕数学实验的基本内容, 充分利用MATLAB的强大数值计算和图形功能, 通过简单的编程就可以迅速得出精确的结论, 绘制形象生动的图像。从实验中去学习、探索和发现数学规律, 激发学生学习数学的兴趣, 培养他们利用MATLAB软件及当代最新科技成果的意识, 能将数学、计算机技术有机地结合起来去解决所遇到的实际问题。
参考文献
[1]孙朝仁, 马敏.开展数学实验教学的可行性调查与分析[J].中国数学教育, 2013 (07) :8-12..
[2]张贤明.MATLAB语言及应用案例[M].南京:东南大学出版社, 2010.
【关键词】 Matlab Gui,阿贝-波特实验,滤波
【中图分类号】G64.23 【文献标识码】A 【文章编号】2095-3089(2015)15-000-01
一、引言
众所周知,光学专业实验对仪器的稳定性要求很高,对于复杂光路的搭建和调试都是非常耗费时间的,而计算机仿真能克服上述缺点,而且能够呈现出实验中很难实现的实验现象。所以光学专业实验的计算机仿真成为了当前实验教学研究的一个热门课题。阿贝-波特实验是光信专业的一个经典实验[1],目前也有不少人对该实验进行了仿真,但目前该实验的仿真要么缺乏直观的界面[2],要么界面不够友好,不够丰富[3],比如界面中没有给出实际的实验光路等。针对上述情况,本文对阿贝-波特实验进行料Matlab Gui仿真,仿真界面不但给出了该实验的实际光路,而且验证了阿贝波特实验的所有现象,实现了仿真界面友好、内容丰富,使学生更能深刻理解阿贝波特实验。
二、阿贝-波特实验的原理
如图1所示[1],在相干平行光照明下,物的成像过程可分成两步:①入射光经过物的衍射在物镜的后焦面上形成夫琅禾费衍射图样;②衍射图样作为新的子波源发出的球面波在像平面上相干叠加成像。概括地说,上述成像过程分两步:先是“衍射分频”,然后是“干涉合成”。所以如果在透镜的后焦面(即频谱面)上放上各种滤波器,就可以改变频谱的信息,从而引起输出像发生变化。
图1 阿贝成像原理图
三、阿贝波特实验的Matlab Gui仿真
图2是阿贝波特实验的MATLAB GUI仿真界面。界面的右上方为实验光路及实验注意事項。滤波对象是正交光栅,在界面的下面显示物及其频谱,点击滤波器下拉菜单,选中水平狭缝作为滤波器,则界面的下面第三个图显示该滤波器,再点击进行滤波按钮,则在界面的下面第四个图显示经滤波处理后的像,如图2(a)所以,由图可见,频谱面上的横向分布是物的纵向结构的信息,如果点击滤波器下拉菜单,选中纵向狭缝作为滤波器,则在界面的下面第四个图显示经滤波处理后的像,如图2(b)所以,由图可见,频谱面上的纵向分布是物的横向结构的信息。如果点击滤波器下拉菜单,选中方向滤波,则经滤波后的输出像如图2(c)所示,得到的是相对方向的信息,由图可以看出,采用方向滤波器,可完全改变像的性质。如果点击滤波器下拉菜单,选中低通滤波,则经滤波后的输出像如图2(d)所示,由图可见,零频分量是一个直流分量,它只代表像的本底,即只有0级衍射(空间频率为0)能通过时,则在像平面上虽有光照,但完全不能形成图像。如果点击滤波器下拉菜单,选中高通滤波,则经滤波后的输出像如图2(e)所示,由图可
(a)横向狭缝滤波
(b)纵向狭缝滤波
(c)方向滤波
(d)低通滤波
(e)高通滤波
图2 阿贝波特实验的Matlab Gui仿真界面。
见,阻挡零频分量,在一定条件下可使像发生衬度反转。由2(d,e)还可以看出:允许低频分量通过时,像的边缘锐度降低;允许高频分量通过时,像的边缘增强。
四、结论
为了更好理解阿贝波特实验,本文对阿贝波特实验进行了Matlab Gui仿真,仿真界面友好、操作方面,内容丰富,本仿真界面不但给出了实际的实验光路,而且实现了实验的所有功能,仿真结果验证了所有的阿贝波特实验现象。
参考文献
[1]苏显渝,李继陶.信息光学M.北京,科学出版社,1999
[2]刘全金叶璟.基于MATLAB环境的阿贝-波特空间滤波实验仿真,安庆师范学院学报,2009,4:108-112
数学实验周我们学习了Matlab软件,这是一个十分实用和重要的软件。初次结识MATLAB,感觉这是一个很好的软件,语言简便,实用性强。作为一个新手,想要学习好这门语言,可以说还是比较难的。在我接触这门语言的这些天,一直在上面弄,除了会画几个简单的三维图形,其他的还是有待提高。在这个软件中,虽然有help。大家不要以为有了这个就万事大吉了,反而,从另一个方面也对我们大学生提出了两个要求——充实的课外基础和良好的英语基础。在现代,几乎所有好的软件都是来自国外,假如你不会外语,想学好是非常难的。
Matlab 语言是当今国际上科学界(尤其是自动控制领域)最具影响力、也是最有活力的软件。它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。
作为一种计算机语言,Matlab体现了与它价值的相符的优点:
1.编程简单使用方便。在这方面我感觉C语言也是一种简单的编程语言。只要入门就很好掌握,但是要学习一门语言不是那么容易的,到目前为止,可以说我还没入门,所以学习起这门语言来很吃力。相对C语言而言,Matlab的矩阵和向量操作功能是其他语言无法比拟的。在Matlab环境下,数组的操作与数的操作一样简单,基本数据单元是不需要指定维数的,不需要说明数据类型的矩阵,而其数学表达式和运算规则与通常的习惯相同。
2.函数库可任意扩充。由于Matlab语言库函数与用户文件的形式相同,用户文件可以像库函数一样随意调用,所以用户可任意扩充库函数。
3.语言简单内涵丰富。在此语言中,最重要的成分是函数,一般形式为:Function[a,b,c„„]=fun(d,e,f„„)Fun是自定义的函数名,只要不与库函数想重,并且符合字符串书写规则即可。
4、简便的绘图功能。MATLAB具有二维和三维绘图功能,使用方法简单。三维曲线是由plot3(x,y,z)命令绘出的,看上去很简单的一个程序,相对C语言而言。极大的方便了绘图的工作和节省工作时间。
5.丰富的工具箱。由于MATLAB 的开放性,许多领域的专家都为MATLAB 编写了各种程序工具箱。这些工具箱提供了用户在特别应用领域所需的许多函数,这使得用户不必花大量的时间编写程序就可以直接调用这些函数,达到事半功倍的效果。
在理论方面,在学习MATLAB过程中,我感觉到它和c语言有许多相似之处,他有c语言的特征,但是比c语言编程计算更加简单,适合于复杂的数学运算。但是MATLAB跟其他语言也有着很大的不同。
众所周知MATLAB是一个基于矩阵运算的软件,但是,真正在运用的时候,特别是在编程的时候,许多人往往没有注意到这个问题。在使用MATLAB时,受到了其他编程习惯的影响,特别是经常使用的C语言。因此,在MATLAB编程时,for循环(包括while循环)到处都是。这不仅是没有发挥MATLAB所长,还浪费了宝贵的时间。我这里想说的一点是,往往在初始化矩阵的时候注意到这个问题,懂得了使用矩阵而不是循环来赋值,但是,在其他环节上,就很容易疏忽,或者说,仍然没有摆脱C++、C的思想。多用help,see also,lookfor,get, set 等常用命令,尽量摆脱c编程的习惯,总爱用循环,能不用的循环的尽量不用,掌握矢量化的精髓。(1)help: 最有效的命令。其实,可以这样说吧,一遇 到什么问题,通常可以从 help 中找到答案。就先说说对help的一些常用方法。
1)命令窗口直接敲“help”,你就可以得到本地机器上matlab的基本的帮助信息。
2)对于某些不是很明确的命令,只知道大体所属范围,譬如说某个工具箱,直接在命令窗口中敲入 help toolboxname,一帮可以得到本工具箱有关的信息:版本号,函数名等。
(2)lookfor:可以说是 matlab中的google。当我们很多什么头绪都没有的时候,我们可以求助于它,往往会收到意想不到的效果。譬如:曾经在gui编程的时候,遇到过这样一个问题:想拖动鼠标时,要出现一个方框,就像你在桌面上拖动鼠标,会出现虚线框一样。当初我也刚开始一定都不知道该查找什么东西,后来想起用它了。于是,>> lookfor Rectangle。这样一条信息:GETRECT Select rectangle with mouse.get,set: GUI object 属性的帮手在GUI编程中,我们可能有时候想改变某些object的属性,或者想让它安装自己的想法实现,但是我们又不记得这些object的属性,更别提怎么设置他们的值了。这时,可以用 get(handles得到此对象的所有的属性及其当前值。用set(handles)可以得到对象所有可以设置的属性及其可能的取值找到我们需要的属性名字和可能的取值之后,就意义用 get(handles,‘propertyname’)取得此属性的值,用set(handles,‘propertyname’,values)设置此对象此属性的值。Edit: 查看m源文件的助手在应用matlab过程中,可能我们想看看它的m源文件,当然用editor定位打开也行,但是我经常采用的式直接在command窗口中用edit funname.m,就省去了定位的麻烦。
实验人员:-------
-------学
号:--------
---------
实验日期:20150618 摘要
本文主要研究的是一级倒立摆的控制问题,并对其参数进行了优化。倒立摆是典型的快速、多变量、非线性、强耦合、自然不稳定系统。由于在实际中有很多这样的系统,因此对它的研究在理论上和方法论上均有深远的意义。本文首先简单的介绍了一下倒立摆以及倒立摆的控制方法,并对其参数优化算法做了分类介绍。然后,介绍了本文选用的优化参数的状态空间极点的配置和PID控制。接着建立了一级倒立摆的数学模型,并求出其状态空间描述。本文着重讲述的是利用状态空间中极点配置实现方法。最后,用Simulink对系统进行了仿真,得出在实际控制中是两种比较好的控制方法。
Abstract
This paper mainly studies the level of the inverted pendulum control problem, and its parameters are optimized.Inverted pendulum is a typical rapid, multi-variable, nonlinear, strong coupling, natural unstable system.In practice, however, because there are a lot of such a system, so the study of it in theory and methodology have profound significance.This article first introduced the inverted pendulum, and simple of the inverted pendulum control method, made a classification and the parameter optimization algorithm is introduced.And then, introduced in this paper, choose the optimization of the parameters of state space pole configuration and PID control.Then set up the level of the mathematical model of inverted pendulum, and find out the state space description.This paper focuses on the pole assignment method is the use of state space.Finally, the system are simulated using Simulink, it is concluded that in the actual control is two good control method.This paper mainly studies the level of the inverted pendulum control problem, and its parameters are optimized.Inverted pendulum is a typical rapid, multi-variable, nonlinear, strong coupling, natural unstable system.In practice, however, because there are a lot of such a system, so the study of it in theory and methodology have profound significance.This article first introduced the inverted pendulum, and simple of the inverted pendulum control method, made a classification and the parameter optimization algorithm is introduced.And then, introduced in this paper, choose the optimization of the parameters of state space pole configuration and PID control.Then set up the level of the mathematical model of inverted pendulum, and find out the state space description.This paper focuses on the pole assignment method is the use of state space.Finally, the system are simulated using Simulink, it is concluded that in the actual control is two good control method.目 录 引言..................................................4 1.1 倒立摆介绍以及应用.........................................4 1.2 倒立摆的控制方法...........................................5
2单级倒立摆数学模型的建立...............................6 2.1传递函数...................................................8 2.2状态空间方程...............................................9
3系统Matlab 仿真和开环响应.............................11 4 系统设计.............................................15 4.1极点配置与控制器的设计....................................15 4.2系统仿真:................................................16 4.3仿真结果..................................................17 4.4根据传递函数设计第二种控制方法-----PID串级控制............18
5结 论
...............................................19引言
1.1 倒立摆介绍以及应用
倒立摆控制系统是一个复杂的、不稳定的、非线性系统,是进行控制理论教学及开展各种控制实验的理想实验平台。对倒立摆系统的研究能有效的反映控制中的许多典型问题:如非线性问题、鲁棒性问题、镇定问题、随动问题以及跟踪问题等。通过对倒立摆的控制,用来检验新的控制方法是否有较强的处理非线性和不稳定性问题的能力。
通过对它的研究不仅可以解决控制中的理论和技术实现问题,还能将控制理论涉及的主要基础学科:力学,数学和计算机科学进行有机的综合应用。其控制方法和思路无论对理论或实际的过程控制都有很好的启迪,是检验各种控制理论和方法的有效的“试金石”。倒立摆的研究不仅有其深刻的理论意义,还有重要的工程背景。在多种控制理论与方法的研究与应用中,特别是在工程实践中,也存在一种可行性的实验问题,使其理论与方法得到有效检验,倒立摆就能为此提供一个从理论通往实践的桥梁,目前,对倒立摆的研究已经引起国内外学者的广泛关注,是控制领域研究的热门课题之一。
倒立摆不仅仅是一种优秀的教学实验仪器,同时也是进行控制理论研究的理想实验平台。由于倒立摆系统本身具有的高阶次、不稳定、多变量、非线性和强耦合特性,许多现代控制理论的研究人员一直将它视为典型的研究对象,不断从中发掘出新的控制策略和控制方法,相关的科研成果在航天科技和机器人学方面获得了广阔的应用。二十世纪九十年代以来,更加复杂多种形式的倒立摆系统成为控制理论研究领域的热点,每年在专业杂志上都有大量的优秀论文出现。因此,倒立摆系统在控制理论研究中是一种较为理想的实验装置。
倒立摆主要应用在以下几个方面:(1)机器人的站立与行走类似于双倒立摆系统,尽管第一台机器人在美国问世至今已有三 十年的历史,机器人的关键技术--机器人的行走控制至今仍未能很好解决。(2)在火箭等飞行器的飞行过程中,为了保持其正确的姿态,要不断进行实时控制。
(3)通信卫星在预先计算好的轨道和确定的位置上运行的同时,要保持其稳定的姿态,使卫星天线一直指向地球,使它的太阳能电池板一直指向太阳。(4)侦察卫星中摄像机的轻微抖动会对摄像的图像质量产生很大的影响,为了提高摄像的质量,必须能自动地保持伺服云台的稳定,消除震动。
(5)为防止单级火箭在拐弯时断裂而诞生的柔性火箭(多级火箭),其飞行姿态的控制也可
以用多级倒立摆系统进行研究。
由于倒立摆系统与双足机器人、火箭飞行控制和各类伺服云台稳定有很大相似性,因此对倒立摆控制机理的研究具有重要的理论和实践意义。
1.2 倒立摆的控制方法
倒立摆有多种控制方法。对倒立摆这样的一个典型被控对象进行研究,无论在理论上和方法上都具有重要意义。不仅由于其级数增加而产生的控制难度是对人类控制能力的有力挑战,更重要的是实现其控制稳定的过程中不断发现新的控制方法,探索新的控制理论,并进而将新的控制方法应用到更广泛的受控对象中。当前,倒立摆的控制方法可分为以下几类 :
(1)线性理论控制方法
将倒立摆系统的非线性模型进行近似线性化处理,获得系统在平衡点附近的线性化模型,然后再利用各种线性系统控制器设计方法,得到期望的控制器。PID控制、状态反馈控制、能量控制]、LQR控制算法是其典型代表。
(2)预测控制和变结构控制方法
预测控制:是一种优化控制方法,强调的是模型的功能而不是结构。变结构控制:是一种非连续控制,可将控制对象从任意位置控制到滑动曲面上仍然保持系统的稳定性和鲁棒性,但是系统存在颤抖。预测控制、变结构控制和自适应控制在理论上有较好的控制效果,但由于控制方法复杂,成本也高,不易在快速变化的系统上实时实现
2单级倒立摆数学模型的建立
在忽略了空气流动,各种摩擦之后,可将倒立摆系统抽象成小车和匀质杆组成的系统,如下图1所示
图1 单级倒立摆模型示意图
那我们在本实验中定义如下变量:
M
小车质量
(本实验系统
1.096 Kg)m
摆杆质量
(本实验系统
0.109 Kg)b
小车摩擦系数(本实验系统
0.1 N/m/sec)l
摆杆转动轴心到杆质心的长度(0.25 m)I
摆杆惯量
(0.0034 kg*m*m)F
加在小车上的力
x
小车位置
φ
摆杆与垂直向上方向的夹角 θ
摆杆与垂直向下方向的夹角(考虑到摆杆初始位置为竖直向下)下面我们对这个系统作一下受力分析。下图2是系统中小车和摆杆的受力分析图。其中,N和P为小车与摆杆相互作用力的水平和垂直方向的分量。
注意:在实际倒立摆系统中检测和执行装置的正负方向已经完全确定,因而矢量方向定义如图,图示方向为矢量正方向。
图2 倒立摆模型受力分析
分析小车水平方向所受的合力,可以得到等式:
应用Newton方法来建立系统的动力学方程过程如下:
分析小车水平方向所受的合力,可以得到以下方程:
FbxN Mx由摆杆水平方向的受力进行分析可以得到下面等式:
Nmd2dt2
(xlsin)
2sinmlcosmlx即 Nm
把这个等式代入上式中,就得到系统的第一个运动方程:
cosml2sinFbxml(Mm)x(1)
为了推出系统的第二个运动方程,我们对摆杆垂直方向上的合力进行分析,可以得到下面方程:
d2Pmgm2(lcos)dtsinml2cos即:Pmgml
力矩平衡方程如下:
PlsinNlcosI
注意:此方程中力矩的方向,由于,coscos,sinsin,故等式前面有负号。
21ImlN3P合并这两个方程,约去和,由得到第二个运动方程:
43mglsinmlcosml2x(2)
设(是摆杆与垂直向上方向之间的夹角),假设与1(单位是
d()20sin,dtcos1,弧度)相比很小,即《1,则可以进行近似处理:。用u来代表被控对象的输入力F,线性化后两个运动方程如下:
4gx3lubxmlx(Mm)(3)
2.1传递函数
对方程组(3)进行拉普拉斯变换,得到
422l(s)sg(s)X(s)s3(Mm)X(s)s2bX(s)sml(s)s2U(s)(4)
注意:推导传递函数时假设初始条件为0。
由于输出为角度,求解方程组(4)的第一个方程,可以得到
4gX(s)[l2](s)3s
把上式代入方程组(4)的第二个方程,得到
(Iml2)g(Iml2)g2(Mm)(s)sb2(s)sml(s)s2U(s)ssmlml
整理后得到传递函数:
ml2sqs443(s)U(s)bml2qs3(Mm)mgl2bmglssqq
22q[(Mm)(Iml)(ml)] 其中
2.2状态空间方程
系统状态空间方程为
AXBuXyCXDu
,x方程组(3)对解代数方程,得到解如下: xx4b3mg4xxu(4Mm)(4Mm)(4Mm)3b3g(Mm)3xu(4Mm)l(4Mm)l(4Mm)l
整理后得到系统状态空间方程:
10x4b0(4Mm)x003b0(4Mm)l03mg(4Mm)03g(Mm)(4Mm)l00x40x(4Mm)u1030(4Mm)l
xx1000x0y0u0010
带入参数可得系统的状态空间方程:
0x100-0.08831670.629317x0000-0.23565527.82850x0x0.883160u1002.35655 xx1000x0y0u0010 3系统Matlab 仿真和开环响应
系统开环稳定性分析
num=[2.35655 0 0];den=[1 0.088167-27.9169-2.30942];sys=tf(num,den)[z,p,k]=tf2zp(num,den);step(sys)%阶跃响应曲线: grid on
阶跃响应曲线
rlocus(sys)%根轨迹
根轨迹
bode(sys)%波特图
[A,B,C,D]=tf2ss(num,den);Q=ctrb(A,B)rank(Q)%系统能控性分析
Q =
1.0000-0.0882 27.9247 0 1.0000-0.0882 0 0 1.0000
ans = 3
由得到的rank(Q)的值可知,原系统的能控性矩阵为3,所以我们可知原系统是不能控的。m=obsv(A,C)rank(m)m = 2.3565 0 0-0.2078 65.7876 5.4423 65.8059-0.3580-0.4798
ans = 3 由得到的rank(m)的值可知,原系统的能观性矩阵为3,所以我们可知原系统是能观的。eig(A)ans =
5.2810-5.2864-0.0827
由eig(A)的值可知系统是不稳定的。4 系统设计
4.1极点配置与控制器的设计
采用极点配置法设计多输出的倒立摆系统的控制方案。可以用完全状态反馈来解决,控制摆杆和小车的位置。
设计状态反馈阵时,要使系统的极点设计成两个主导极点和两个非主导极点,用二阶系统的分析方法确定参数。
根据系统性能要求: 最大超调量10%,调节时间为 1s
-运用超调量计算公式:% 得到0.707wn5.66
1-2 t3
sn P2=-4-4.33j 得到两个主导极点为:P1=-4+4.33j P4=-20 选取两个非主导极点:P3=-20 根据MATLAB求取状态增益矩阵,程序如下: a=[0 1 0 0 0-0.0883167 0.629317 0 0 0 0 1 0-0.23655 27.8285 0];b=[0 0.883167 0 2.35655];p=[-4+4.33j-6-4.33j-20-20];k=acker(a,b,p)k =
-740.4267-247.3685 646.9576 113.8866
4.2系统仿真:
根据状态空间表达式建立一阶倒立摆SimuLink仿真图,如下:
4.3仿真结果
系统仿真图(位置,速度,角度,角速度)
根轨迹
4.4根据传递函数设计第二种控制方法-----PID串级控制
PID控制器系统框图:
经过几次参数调试得出Kp=300,Ki=200,Kd=20满足性能要求,其仿真图形如下:
5结 论
本次设计主要通过PID串级控制和状态空间极点配置的方法对直线一级倒立摆进行校正,通过此次课程,掌握MATLAB的基本使用方法。在课程设计过程中,培养了团队协作能力,刻苦钻研以及编程能力,为今后的学习工作打下了良好的基础。经过这次课程,是我受益匪浅。
第一、学会了如何运用自己所学的知识结合实践
第二、硬件最然需要不断尝试,但不是盲目的调试,而是需要有理论作为指导,指明调整的方向,这样设计系统就会事半功倍。第三、Matlab等工具软件的使用也大大提高了设计系统的速度。这些都是试验中珍贵的收获。
题目: 图像分割程序设计
院 系 电气与电子工程学院
专 业 xxxx 班 级 研电16xx 学 号 116xxxxxx 姓 名 xx
2016年 11月3日
摘 要:图像分割是图像处理与计算机视觉的基本问题之一,是图像处理图像分析的关键步骤。其中图像二值化又是图像分割的重点。本文对全局和局部阈值二值化法的几种常用的算法和基本自适应阈值二值化进行了综述。每基于一定理论和算法的图像二值化方法都有各自不同的优势和缺点,在实际应用当中应根据不同使用目的和使用标准采取不同的方法以达到最佳效果。本文在MATLAB 编程技术及其GUI 图形用户界面设计的基础上,开发了具有交互式特点的数字图像处理GUI软件,界面操作简单方便,实现了图像二值化的功能。
关键词:二值化;全局阈值法;局部阈值法;基本自适应阈值法;图像分割; MATLAB GUI 0 引言
图像分割技术作为图像处理领域中极为重要的内容之一,是实现图像分析和理解的基础,而图像二值化又是图像分割的重点。只有在其基础上才能对目标进行特征提取和参数测量,使得更高层的图像分析和理解成为可能。二值化是图像处理和分析的关键技术,也是个经典难题。随着实际应用的需要,对图像二值化进行深入的研究,不断改进原有方法,提出新方法具有重要的意义。图像二值化
二值化是图像处理中的一个重要的问题,广泛应用于图像分割,图像增强,图像识别等领域。根据其运算的范围不同,图像的二值化方法可分为全局阈值方法和局部阈值方法。它利用了图像中要提取的目标物与其背景在灰度特性上的差异,把原图像变为仅用两个灰度值表示的图像目标和背景的二值图像。其处理思想是,假设一副灰度图像中的灰度级范围是(0,255),则图像中每一点像素的灰度值为f(x,y),f(x,y)∈{0,1,„,255),设阈值为T(0≤T≤255)则:
0g(x,y)1f(x,y)Tf(x,y)T其中:g(x,y)表示二值化后图像中各个像素点的值,若g(x,y)=1表示改点为目标;若g(x,y)=0,表示改点为背景。GUI设计
图形用于界面(GUI)是提供人机交互的工具和方法。MATLAB的GUI为开发者提供了一个不脱离MATLAB的开发环境,有助于MATLAB 程序的GUI集成。
本文设计的程序有以下功能:
1)实现图像的读取及显示其灰度直方图功能,保存功能及退出时“是否保存处理后图像”的提醒功能。
2)设计图形用户界面,让用户能够对图像进行全局阈值分割,可选方法
为迭代法、Otsu法及改进的Otsu法,同时显示该方法选取的阈值。
3)设计图形用户界面,让用户能够对图像进行局部阈值分割,可选方法为Bernsen法、Niblack法及改进的Bernsen法,同时关闭选取阈值的显示(因为此时每个像素点均有对应的阈值)。
4)编写程序对图像进行基本自适应阈值分割,即将用户所选取的图像进行分块后对每块图像用Otsu法进行二值化,并实现调整分块大小时实时显示处理后的图像功能。
具体GUI设计的程序代码及模块、菜单配置过程不在此赘述。MATLAB中运行相应的m文件,会出现如下图所示的初始界面:
图2.1 初始界面
可以看到,在图像没有打开之前图像分割功能是不可选的,这是在GUI编程中考虑到为避免对空白图像进行二值化可能会产生全黑图像的错误而设计的。
点击如下选项,可以打开指定图像,并显示其对应的灰度直方图:
图2.2 “打开”图像
现在“图像分割”菜单变为可选,选择相应算法可以得到不同效果的阈值分割结果图,相应可选方法如图:
图2.3 “图像分割”菜单
阈值分割完毕后,点击图标,可以对处理后的图像进行保存。若不保存直接选择“退出”菜单,程序会弹出如下图所示选框,提醒用户是否保存已更改的图片,可以根据用户需求进行选择,同时避免了错误的发生。
图2.4 “保存”与“退出” 阈值分割算法与实验分析
3.1 全局阈值分割
全局阈值法根据文本图像的直方图或灰度空间分布确定一个阈值,以此实现灰度文本图像到二值图像的转化。此方法的优点在于算法简单,对目标和背景明显分离、直方图分布呈双峰的图像效果良好,但是由于对整幅图使用一个阈值处理,因此其对输入图像有噪声或不均匀光照等情况抵抗能力差,应用受到极大限制,不能广泛地应用于实际。典型的全局阈值分割方法有迭代法、Otsu方法等。在此引入光照均匀的图3.1和光照不均匀的图3.2,本节将用下述全局阈值方法对其进行处理。
图3.1 原始图像1 图3.2 原始图像2
3.1.1 迭代法
迭代法的主要思想是利用循环迭代的方法,逐步逼近最佳阈值,其计算步骤主要是:
1)对图像进行灰度化,找出图像灰度的最大值和最小值,分别记为Rmax和
Rmin,令初始阈值为:
TRmaxRmin/2
2)根据当前的阈值T以及图像的各像素的灰度值,将图像像素分成前景与背景两组。
3)分别求出当前前景与背景两组像素的平均灰度值,记为u1和u2。4)求出新阈值:
Tu1u2/2
循环2)-4)步,直到两组的平均灰度值不再发生新的变化,此时即获得了所需要的阈值。这种方法运算很简单,因此处理图片的速度是很快的。处理光照均匀的图3.1后,得到阈值为0.5312的图3.3,可以看到效果还是比较好的;但是在处理光照不均匀的原图3.2后,得到阈值为0.49393的图3.4,可见只使用一个阈值,已经没有办法兼顾到所有细节情况了。
图3.3 迭代法处理图1 图3.4 迭代法处理图2 3.1.2 Otsu方法
二值化的算法之一Otsu法,也称大津法,是全局二值化算法的经典算法之一。它是1979年由Otsu提出的,其基本思想是求取最佳门限阈值,此阈值将图像灰度直方图分割成黑白(前景与背景)两部分,使两部分类间方差取得最大值,并使类内方差值最小,即类间分离性最大,而类内的相似性最大,因此,Otsu法也称最大类间方差法。对于某图像的灰度直方图,设T为区分前景灰度与背景灰度的二值化阈值,设w0为前景像素所占图像总像素的比例,令u0为所有前景像素的平均灰度,设w1为背景点数所占图像总像素的比例,令u1为所有背景像素的平均灰度,则图像的所有像素的平均灰度为uw0u0w1u1。在进行程序运
算时,T的取值可从图像的最小灰度值到图像的最大灰度值依次遍历,当T取某值时,类间方差公式bw0u0uw1u1u能取得最大,此时T即为二值化
22的最佳阈值。使类间方差最大的二值化意味着错分概率最小。
同样,我们采用Otsu算法对图3.1和图3.2进行处理,分别得到图3.5和图3.6。图3.5所选阈值为0.49804,可以看到效果依旧很好;图3.4所选阈值为0.49412,效果很不理想。
图3.5 Otsu法处理图1 图3.6 Otsu法处理图2 3.1.3 改进的Otsu方法
图像二值化是建立在物体和背景可以区分的基础上的,如亮度色调等不同,从而根据这些已知信息分出前背景。而一般的全局二值化如用Otsu方法获取最优阈值的方法,都是建立在图像前背景亮度有一定差距的基础上的,即图像直方图有双峰结构。如果对于一幅亮度不均匀的图像这种方法就不适用,解决的方法可以把图像根据整体亮度变化来分成若干小区域,而各区域的直方图中有两个峰,这样就能自适应得时整幅图都比较好的二值化。但是,这样对于一些复杂的图像就难处理,而且可能存在分块邻接缺陷,因此,本程序中先将整幅图的亮度调均匀,然后再用整体二值化就能得到很好的结果。这里使用Retinex算法把图像的整体亮度调均匀后(此法能很好得将各种照度不均的图调整成直方图中明显有双峰的均匀图),再用Otsu方法取阈值二值化。对光照不均匀图3.2进行处理,得到图3.7,可见此时的图像轮廓得到了还原,取得了较好效果。
图3.7 改进的Otsu法处理图1
3.1.4 全局阈值法小结
下面,我们对全局阈值法做一些总结。一般说来,全局阈值法想法都比较简单,实现起来也很高效简单,但这种也是有代价的。它的适用范围相对有限,擅长处理简单图像,比如目标与背景明显分离的,直方图分布呈双峰的图像。但是对于光照不均,模糊的文档及多边缘的图像,就会丢失很多的信息。在此引入文本图像图3.8。可以看到下半部分是清晰的文字,但是上半部分的表格,则具有淡淡的底,使得字迹看起来变淡了,也就是说模糊了。由于Otsu算法在全局阈值二值化方法中具有很好的评价,在这里仅使用法对其进行处理,来看一看效果。
图3.8 原始图像3 使用Otsu方法处理图3.8,所得阈值为0.7451,处理结果为图3.9。可以看到,图中下半部分还是比较清楚的,但是上半部分表中的文字显示很不理想。对于这种光照均匀地图像,改进的Otsu方法处理结果如图3.10,其细节丢失更为严重。这正是全局阈值二值化的简单性所付出的代价。由于该类方法只关心整幅图像的灰度值分布特征,然后就迅速进行处理它是高度宏观化的,因而对于局部的变化反映不够灵敏。因此,使用该方法会丢失图像的许多细节信息。
图3.9 Otsu法处理图2
图3.10 改进的Otsu法处理图2 由于全局阈值法的这一缺点,引出了关注细节的局部阈值二化算法。3.2 局部阈值分割
局部阈值法通过定义考察点的邻域,比较考察点与其邻域的灰度值来确定当前考察点的阈值。非均匀光照条件等情况虽然影响整体图像的灰度分布却不影响局部的图像性质,使得局部阈值法较全局阈值法有更广泛的应用。局部阈值法虽然能够根据局部灰度特性来自适应地选取阈值,有较大的灵活性,但局部阈值存在速度慢,对文本图像进行二值化处理时,可能导致出现笔画断裂现象以及伪影等问题,直接影响后面的识别工作。常用的局部阈值法有Bernsen算法、Niblack算法。
3.2.1 Bernsen算法
Bernsen算法是一种典型的局部阈值算法,其将窗口中各个像素灰度级最大值和最小值的平均值作为一个窗口的中心像素的阈值,因此此方法不存在预定阈值,适应性较全局阈值法广,不受非均匀光照条件等情况的影响。
设图像在像素点(i,j)处的灰度值f(i,j),考虑以像素点(i,j)为中心的2121窗口,则Bernsen算法可以描述为:
1Ti,jmaxf(im,jm)minf(im,jm)
2mmnn 图像中各个像素点(i,j)的阈值T对图像中各个像素点(i,j)用b(i,j)值逐点进行二值化:
0b(i,j)1
f(i,j)T(i,j)
f(i,j)T(i,j)
在实现算法的过程中会遇到一个不可避免的问题。当一个像素点处于整幅图像的边界处,或是其他距图像边界不足一个像素点单位的位置时,若以它为中心取的小块,那么所取得的小块就会有一部分是缺失的。这里,本文选取的处理方式是对原图像加边,新的边灰度值全赋值为0。
在使用Bernsen算法进行图像二值化的时候,是需要选择窗口的大小的,现在结合算法来具体讨论该因素的影响。从Bernsen算法求局部阈值公式来看,对于一个固定的像素点(x,y),当窗口尺度很小的时候,该像素点周围有细微的明暗变化即有少量像素点的灰度变化就会影响到阈值的选取;当窗口尺度变大的时候,更多的像素点会进入到窗口中,原窗口内的像素点只是现在的一部分,对于阈值所产生的影响就相对弱化了,原有的细节就有可能丢失。现引入一幅光照不均但像素点相对较少的图3.11,这样改变窗口大小进行测试时可以节约程序运行时间。
图3.11 原始图像4 现取窗口为3*3,效果如图3.12所示。图中出现了大量斑点噪声,文字被淹没了。这是因为窗口选得太小,二值化时像素点附近出现的细微明暗变化都被
图3.12 Bernsen法处理图1 图3.13 Bernsen法处理图2
识别出来了。将窗口放大为9*9,效果见图3.13。可以看到,效果好多了,许多斑点状噪声消失了,文字变得清楚了,但是字间噪声没有完全消除且粗笔状况也比较明显的。查阅相关文献表明,应该选取15*15的窗口,原因是这样所带来的噪声会显著的减少。同时,处理图片的时间则相应增加。鉴于此,在此后的处理中,大多取窗口为15*15。对于Bernsen法取窗口为15*15,所得的结果如图3.14。
图3.14 Bernsen法处理图3 下面对图3.8用Bernsen法进行二值化,看看效果如何。如图3.15,与Otsu法处理图2相比,列表中的文字变得相对清晰了,但是列表下方的文字出现了断笔现象,而且背景噪声问题同样不能忽视。
图3.15 Bernsen法处理图5 3.2.2 Niblack算法
Niblack方法也是一种应用很广泛的二值化算法。它根据局部均值和局部标
准差,确定图像中不同的阈值。在像素点(x,y)的阈值的计算是:
T(x,y)m(x,y)ks(x,y)
其中T(x,y)为阈值,m(x,y)为样本均值,s(x,y)为标准差,k为参数。对于邻域的选择需要满足能保存局部细节同时抑制噪声的产生。和Bernsen方法相似,使用Niblack方法进行图像二值化处理时,窗口大小的选择也是很重要的。理由相同,如果窗口选得很小,处理速度比较快,但是给二值图带来的噪声也是很严重的,导致前景淹没在噪声中,无法很容易的辨识;如果窗口选得大,会大幅地降低二值图中的噪声,但是处理的时间也变得更长了。窗口一般也取15*15,下面对图3.8进行分割,结果见图3.16。
图3.16 Niblack法处理图1 使用Niblack方法进行图像二值化处理,由于需要计算标准差,需要进行平方开方运算,所以速度是比较慢的,我们看一下Bernsen方法,它比方法的速度要快些。但是从处理效果来看,它比Otsu法和Bernsen法效果优秀。不仅列表中文字细节得到了很好地还原,列表下方的文字也没出现断笔现象,很清晰,唯一需要改善的就是图像背景噪声问题。3.2.3 对局部阈值法的一点思考
由于局部阈值法充分考虑到了每一个像素点及其附近像素点的灰度分布情况,能兼顾图像的细节变化,因此使用局部阈值二值化方法对图像进行分割处理,一般说来,会得到更好的效果。很容易这么想,如果对一幅质量很好的图片进行二值化分割,那么局部阈值法对其进行分割所得的效果应该比全局阈值法的效果好,即使不能更好,至少一样好。现在看一个例子,引入图3.17,它足够简单,背景与前景相比分离得很明显。图3.18是使用Otsu方法进行阈值分割的结果,图3.17 原始图像5 图3.18 Otsu算法处理图3 图3.19 Niblack算法处理图2 而图3.19是使用Niblack法进行阈值分割的结果。局部阈值法处理效果在这里反而的质量却降低了,它把没有文字的空白背景,错误地识别成文字像素点。能对付复杂问题的工具,却不能处理简单的。回头看Bernsen法和Niblack法阈值分割处理的结果图3.15~3.16,也存在相同问题。表格右侧空白背景,以及没有足够文字填充的一小段空白行,都被错误地识别成了前景。这说明,这个问题应该不是偶然出现的,可能是一个共性的问题。为了避免出现这种情况,在进行图像二值化处理时,当每选取一个小窗口,就应该先进行判定。如果这个小窗口内同时混有前景和背景,那么就进行该中心点的二值化;否则,小窗口内就只含有前景或是只有背景,就不应该进行阈值分割了,而应该采取一种方法去判断它是属于背景还是前景。至于具体实现方案,这也是未来对局部阈值分割进行进一步研究的方向。
3.3 基本自适应阈值分割
全局阈值存在的问题是不均匀亮度无法有效分割,解决办法除了像局部阈值法对图像每一个像素进行处理外,还可以将整幅图像化整为零,划分为许多个小块,分别进行处理,得到它的阈值。小块特点是彼此分离没有重叠,这也是与局部阈值法的区别。那么这个阈值相对于整体的全局阈值来说,就是与相应小块中的像素更加关联的,对于局部应该也是更好的。其中每一个小块,可以简单的将
它看作一幅图像,这样,要得到与这个小块相关的局部阈值,可以简单地使用全局阈值值法来对每个小块做出处理,进行二值化。
我们将图像划分成许多小块,如果称小块的长和宽为尺度的话,那么选取时,若尺度太大,对图像的局部还不够好;但是若尺度太小,小块内可能就只有前景或只有背景了,此时的二值化是不合理的。所以,给小块选择一个合适的尺度是很讲究的,本文目前只能通过不断尝试来确定。现引入图3.20,对其进行基本自适应阈值分割。
图3.20 原始图像6 图3.21 基本自适应阈值处理图1 经过尝试,现选用处理效果较好的115*115的分块对图3.20进行处理,所得结果如图3.21所示。我们发现,对于这种水平方向上光照不均的图像的处理,原图的细节得到了很好的保留,其处理效果还是很不错的。
事实上,一幅图划分成的子块是图像的一部分,它们的阈值应该是有所关联的。如果就这样一个个孤立开的话,就会发生阈值灰度跃变的问题,即由于每一个小块内的各自阈值都相差很大,可能导致块与块交界处的图像像素灰度值不连续,出现明显间断或不一致。解决办法有两个:要么对这些边界处的像素点做出处理,要么对这些阈值做出处理。具体实现办法还没有一个清晰的框架,只能等课程结束以后对其进行进一步的研究和学习。结束语
Matlab在图形虚拟和数据处理方面有着独特的优势,能有效帮助学生理解和学习物理规律[1]。Matlab在大学物理中应用广泛,近些年,在中学物理教学中也进行了探索和实践。朱云、孟宪松[2]利用Matlab处理实验数据,在用伏安法测定电源电动势和内阻的关系中,记录电压表和电流的示数,通过使用Matlab绘图得出电压和电流的图线,动态演示物体平抛与斜抛运动的图线等。周小奋[3]用实例介绍了Matlab在电场作图和求解极值问题中的应用,利用Matlab画出共线点电荷系统的电场线分布以及两个正点电荷周围的电场线分布。魏义永[4]在课堂上举例阐述应用Matlab编程模拟光的双缝干涉、单缝衍射和光栅衍射的实验现象,提高学生学习光学的兴趣,教学效果明显。朱国强[5]在课堂教学中使用Matlab动态演示异号电荷等势面和电场线的形状。Matlab帮助学生理解物理现象作用是明显的。但是使用Matlab制作物理课例需要耗费很多时间,由于很多一线教师的时间和精力有限,他们并不能系统地学习和使用Matlab。因此,制作出基于Matlab的中学物理实验室系统很有必要。
1 系统总体设计
1.1 系统功能结构
中学物理实验室系统主要由产品介绍、初中物理实验室、高中物理实验室、练习题库和趣味模块5个部分组成。其中,初中物理实验室和高中物理实验室结合中学物理教学实际需求,实验内容涵盖教材各章节和知识点,是教材的同步实验室,并且结果表现形式丰富。同时,初中物理实验室和高中物理实验室提供基于Matlab设计的学生用计算器。练习题库由高中数学题库和初中数学题库两部分组成,均按教材分类,包括章节的检测题、综合检测题、升学考试题、中期模拟卷、期末模拟卷等。趣味模块提供有益智开发大脑的小游戏,让学生在学习过程中劳逸结合,减少枯燥感。系统功能结构如图1所示。
图1 物理实验室系统功能结构
1.2 系统技术路线
(1)开发平台为Matlab R2008a、Flash、Authorware、Microsoft Windows 7;(2)开发语言为Matlab;(3)使用Authorware作为第三方软件平台统筹Matlab和Flash,使之形成一个系统。采用流行的B/S体系架构;(4)使用Photoshop以及Flash进行页面优化;(5)考虑系统的针对性、易用性。系统技术路线如图2所示。
图2 系统技术路线
1.3 系统运行环境
系统操作环境:Microsoft Windows XP、Microsoft Windows 7、Microsoft Windows 8。Matlab软件版本包括Matlab R2008a、Matlab R2008b、Matlab R2009a、MatlabR2009b等,后续升级软件可直接运行中学物理实验室系统的exe程序;如果操作系统为Windows32位系统,则版本为MCR_R2012a_win32;如果操作系统为Windows64位系统,则版本为MCR_R2012a_win64;如果电脑中未安装Flash软件和Authorware软件,则需要进行安装。
2 系统设计与实现
2.1 系统设计思路
由于本系统是通过Matlab软件、Flash软件开发,再通过Authorware兼容平台统筹Matlab和Flash,使之形成一个系统的应用软件。因此,首先使用Matlab语言及其携带的GUI工具,建立良好的人机交互界面,完成部分物理实验室设计,包括初中物理和高中物理模块实现;其次将经过调试的物理实验室利用Matlab自带的Compiler工具,转换为可独立运行的.exe文件,并对转化的.exe文件进行调试;然后使用Flash软件完成部分物理实验的设计、开发和实现;最后使用Authorware平台统筹整体界面设计、开发和实现,具体包括产品介绍、初中物理、高中物理、练习题库和趣味模块。设计路线框架如图3所示。
图3 设计路线框架
2.2 系统仿真实现
2.2.1 Matlab制作实验
中学物理实验室的核心模块采用Matlab可视化图形用户界面设计方法。Matlab设计GUI程序的前台界面有全命令行的M文件编程和GUIDE辅助的图形界面设计两种方式[6]。GUIDE即Maltab提供的GUI程序的集成化设计和开发环境,是一种可视化的图形用户界面设计方法[7]。由于中学物理实验室是教材的同步实验室,其设计与实现根据教材逐一进行。
为了实现Matlab部分功能,需要为系统界面中各控件编写相应的回调函数,以完成系统的功能和目标。回调函数的编写包括各个实验的功能界面、游戏界面等。
采用Matlab Compiler工具实现Matlab/GUI转化成.exe文件,屏蔽Matlab生成.exe文件时出现黑屏问题的方法是通过对compopts.bat添加程序代码。
2.2.2 Flash制作实验
Flash是一款交互式矢量多媒体技术动画软件。它不仅可以通过文字、图片、视频、声音等手段综合展现动画内容,还可以通过强大的脚本语言(Action Script)制件交互动画,其以操作简单、功能强大、易学易用、浏览速度快等特点受到广大动画设计人员的喜爱,在网页动画制作和多媒体课件制作方面有较强优势[8]。Flash软件可以实现多种动画特效,是表现动态过程、阐明抽象原理的一种重要媒体。使用动画设计,有助于学科知识的表达和传播,加深对知识的理解,提高学习兴趣和教学效率,对以抽象教学内容为主的课程应用效果很好[9]。
2.2.3 系统平台制作
Authorware软件采用面向对象的设计思想,采用图标、流线等多媒体开发工具,主要承担多媒体素材的组织任务,能够同多种开发工具兼容,共同实现多媒体功能[10]。Authorware对编程要求较低,不具有编程能力的人员也能创作出一些高水平的多媒体课件。
将Matlab转换成的.exe文件和Flash生成的.exe文件置于第三方平台Authorware软件中,利用Authoeware编辑,统一界面风格,整体打包形成新的.exe文件,即设计出中学物理实验室系统。
3 系统展示
3.1 系统整体界面展示
双击桌面上的“中学物理实验室”图标后,进入系统主界面。整个系统由系统名称和菜单栏组成。菜单栏由“产品介绍”、“初中物理”、“高中物理”、“练习题库”、“趣味模块”等要素构成,整个版面清新明亮、简单美观。
在系统主界面中单击“产品介绍”图标,会弹出系统介绍页面,该页面用简洁的语言介绍了软件主要特点。在系统菜单栏点击“初中物理”图标,会弹出初中物理页面。初中物理涵盖了人教版八年级、九年级的所有实验。在系统的菜单栏点击“高中物理”图标,会弹出高中物理页面。高中物理模块收纳了必修一、必修二、选修3-1、3-2、3-3、3-4的大部分实验。
在系统的菜单栏点击“练习题库”图标,系统就进入练习题库页面。练习题库分为初中物理练习题库和高中物理练习题库;在系统的菜单栏点击“趣味模块”图标时,系统即进入休闲娱乐时刻;当学习完毕点击菜单栏的“退出学习”图标,系统即自动关闭。
3.2 系统实验室展示
中学物理实验室系统由初中物理和高中物理2个模块组成,各模块均包括相应教材的同步实验室模块,实验内容涵盖教材各章节和知识点。下面以高中物理实验室为例,进行实验室功能演示。
在高中物理实验室界面中有带电粒子在电场中的运动、带电粒子在磁场中的运动、欧姆定律、点电荷形成的电场等实验。
(1)带电粒子在电场中的运动。在高中物理实验室的主界面中,用鼠标点击“选修3-1”进入选修3-1实验室的主界面。在该界面用鼠标点击“带电粒子在电场中的运动”,在弹出的界面中点击“演示”按钮,得到的结果如图4(a)和图4(b)所示。
图4 带电粒子在电场中的运动
(2)带电粒子在磁场中的运动。在选修3-1主界面中,用鼠标点击“带电粒子在磁场中的运动”,在弹出的界面中点击“演示”按钮,在弹出的界面中分别输入“带电粒子射入磁场的角度”,点击“Start”按钮,绘制出如图5(a)所示的运动轨迹,点击菜单栏的旋转按钮,实现如图5(b)所示的旋转效果。
4 结语
本文采用Matlab开发了一个通用性强、简单易用的中学物理实验室系统,该系统充分利用Matlab的数值计算能力和数据可视化能力以及强大的绘图功能,实现了物理现象和物理过程的形象化和可视化,有利于开拓学生视野,激发学习兴趣,改善了传统教学方式单一性缺陷,促进了多媒体技术在教学中的应用。
图5 带电粒子在磁场中的运动
摘要:以Matlab为主要开发技术,在Authorware平台下统筹Flash和Matlab软件,根据新课程标准要求设计了中学物理实验室系统。该系统能帮助学生理解和掌握抽象的物理概念,激发学习兴趣,提高教学效率与教学质量。
关键词:Matlab,Flash,Authorware,物理实验教学
参考文献
[1]王付军.Matlab在中学物理教学和实验中的应用[J].中学物理,2010(9):29-31.
[2]朱云,孟宪松.MATLAB软件在中学物理中的实际应用[J].中小学电教,2011(1):101-102.
[3]周小奋.Matlab在中学物理教学中的应用初探[J].物理通报,2011(10):68-71.
[4]魏义永.例析Matlab软件融入光学教学课堂[J].合肥师范学院学报,2011(3):39-41.
[5]朱国强.MATLAB软件在物理教学中的应用[J].物理通报,2014(4):8-12.
[6]史崇升,汤全武,吴佳,等.基于Matlab和B/S的中学数学实验室系统[J].微型机与应用,2014(14):14-16.
[7]陈垚光,毛涛涛,王正林.精通MATLAB GUI设计[M].北京:电子工业出版社,2011.
[8]韩文虹.物理虚拟实验室的设计与实现[D].郑州:郑州大学,2010.
[9]缪亮,贾朝蓉.Flash MX 2004课件制作百例[M].北京:清华大学出版社,2004.
关键词:信号处理;MATLAB;图形用户界面;实验软件
引言
信号处理类课程是高等院校电气信息学科学生的必修课程,它不仅是电类专业和信息类专业的一门专业基础课程,而且也是工科学生受益较多的一门课程。但是这类课程的许多理论都基于繁琐的数学理论和数学推导,因此容易使学生感到乏味。为了提高学生学习的效率,需要借助实验手段来帮助学生理解课堂所学理论。
MATLAB是有美国MathWorks公司推出的一个为工程计算和数据分析而专门设计的高级交互式软件包,利用它能容易地解决在系统仿真领域教学与研究中遇到的问题;不仅如此,它还提供了用户可编程设计的图形用户界面(Graphical UserInterface,简写为GUI)设计工具,为课堂实验教学和实验仿真提供了十分有效的手段。基于此,本文利用MATLAB的可视化图形用户界面(GuI)工具,设计实验系统的图形用户界面的总体结构。本系统能够用于完成相关的信号处理实验。
1设计的基本内容
本设计有以下特点:
(1)具有序列的基本计算、基本信号的产生、数据采集、卷积、傅里叶变换、z变换以及FIR和IIR滤波器等功能。
(2)界面可视性强,操作简单方便。
(3)具有数据输入输出、图形输出、数据修改和文件保存、打印等功能,系统内容丰富,实验效率高,结果直观易懂、便于分析。
(4)系统易于扩展新的实验项目。
2系统总体设计步骤
在本系统的设计中,界面布局设计采用自顶向下的设计方法,即先设计引导界面和主界面,再设计各个实验子界面。界面设计完成后,只是一些静态的画面而已,没有什么内涵,还不能用于实验操作,要想达到实验目的,必须借助于函数调用。在设计中,各个回调函数的编写顺序则是采用自底向上的设计方法,即先编制各个实验子界面的回调函数,再编写主界面和引导界面的回调函数。
其设计的具体步骤如下:
(1)运用MATLAB的图形用户界面(GuI)设计方法,设计整个实验系统的开始引导界面、实验主界面及其实现信号处理课程中具体实验的各个子界面;
(2)运用MATLAB的图形用户界面(GUD设计方法,设计系统的说明界面及其各个实验的说明界面;
(3)分别编写各个子界面的各个控件对象的回调函数,来实现控件相应控制功能,达到直接通过界面上各个控件就可以控制数据的输入输出,并可以方便地对实验结果的数据及其图形进行读取和分析的目的;
(4)编写主界面的回调函数,将各个实验子界面整合在信号处理系统实验主界面中,即通过主界面就可以进入任何一个实验子界面进行实验;
(5)编写开始引导界面的回调函数,实现从引导界面直接进入主界面。
3实验系统的设计及实现
3.1实验系统的设计
本实验系统整体结构设计由两部分组成:界面模块设计和菜单模块设计。其中,界面模块总共包括十个模块:开始引导模块、主模块、说明模块、序列基本计算模块、基本信号的产生模块、数据采集模块、卷积模块、傅里叶变换模块、z变换模块、滤波器设计模块。一些实验界面模块下面又有下一级实验界面模块,如滤波器设计模块下面还有FIR滤波器设计模块和IIR滤波器设计模块,其中FIR滤波器模块又包含FIR滤波器线性的判断实验界面、窗函数的频率响应实验界面和FIR滤波器的设计实验界面;IIR滤波器模块又包含完全IIR滤波器的设计实验界面和典型ILR滤波器实验界面;主界面中还包含了说明模块。在菜单设计时,在实验子界面中除使用系统约定的菜单条外,还增加了几个控制背景和退出实验的菜单;引导界面中不使用菜单;主界面中将所有实验项目做成菜单的形式,只要通过选择相应的菜单选项,就可以进入实验。
系统的整体结构如图1所示。
3.2实验系统的实现
没计出的主界面是用于进入信号处理各个实验子界面的。它使用菜单及其一些按钮控件来实现,将各个实验子界面有机地联系到一起,使界面美观,易于操作。实验系统主界面如图2所示。
在图2界面中,用户可以通过选择菜单中相应的项,进入相应的实验界面来进行实验。可以进行的实验包括以下几种:序列的基本计算、基本信号的产生、数据采集、卷积、傅里叶变换、z变换、FIR及IIR滤波器的设计等。此外,界面上还设计有各个实验的简要说明控件,用户在进行实验之前,可以先单击相应的说明控件,来阅读相关实验的简要信息。
4结束语
【实验报告matlab】推荐阅读:
电机matlab实验报告09-09
matlab实验预习报告09-24
信号系统matlab实验07-27
matlab实验指导书10-28
微机实验实验报告11-04
实验44实验报告图文06-16
大物实验实验报告06-26
自控实验二实验报告07-16
管道拆装实验实验报告11-11
模电综合实验实验报告05-25