现代检测与matlab.docx
《现代检测与matlab.docx》由会员分享,可在线阅读,更多相关《现代检测与matlab.docx(20页珍藏版)》请在冰豆网上搜索。
![现代检测与matlab.docx](https://file1.bdocx.com/fileroot1/2023-1/27/1a4194f7-9ba7-4359-8ebe-1b5a53f2d2b2/1a4194f7-9ba7-4359-8ebe-1b5a53f2d2b21.gif)
现代检测与matlab
现代测试技术报告
一、一元线性回归
1、任务要求
用标准压力计对某固体压力传感器进行检定,检定所得数据如上表所示。
表中x为标准压力,y为传感器输出电压,y(平均)为四次读数的算术平均值。
试对仪器定标,并分析仪器的误差。
2、程序清单
用MATLAB计算:
仪器的定标:
由公式Y=Bo+BX计算出Bo与B的值如下:
>>X=[012345678910];%标准压力测量值
>>Y=[2.819.75516.692523.597530.532537.4344.327551.217558.164.95571.74];%输出电压平均值
>>Lxy=11*sum(X.*Y)-sum(X)*sum(Y)
Lxy=
8.3458e+003
>>Lxx=11*sum(X.*X)-sum(X)*sum(X)
Lxx=
1210
>>B=Lxy/Lxx%由B=Lxy/Lxx求得拟合曲线斜率
B=
6.8973
>>Bo=(sum(X.*X)*sum(Y)-sum(X)*sum(X.*Y))/(11*sum(X.*X)-sum(X)*sum(X))
Bo=%由Bo=Y平均-B*X平均,求得拟合曲线在Y轴上的截距
2.8912
plot(X,Y)%绘制一元线性回归拟合曲线
3、程序输出结果及分析
仪器的定标:
由运行得出结果:
B=6.8973
Bo=2.8912
则Y=2.8912+6.8973X
仪器的定标:
Y=2.8912+6.8973X
求得拟合曲线如右图所示:
拟合分析:
求取一元线性回归拟合曲线问题相当于求解方程个数大于未知数个数的方程组以获取自变量x与因变量y之间的关系。
求解此类问题可以借助于最小二乘法。
误差分析:
输入原始测量数据,并将其与回归所得数据相比较即得到最大残差:
max(F1)=0.1347max(F2)=0.1347
max(F3)=0.1147max(F4)=0.1147
则最大引用误差为H=0.1347/71.8647约为0.19
误差是由自变量x取值的不同以及实验的测量等多方面的因素造成的
4、几点思考
求解一元线性回归关键在于几点:
公式为Y=Bo+BX,只需求出参数B、Bo即可。
B的求解由公式B=Lxy/Lxx求得
Bo的求解由公式Bo=Y平均-B*X平均求得
以上运算都可以用MATLAB的基础运算实现
二、多元线性回归
1、任务要求
1、根据经验知道某变量y受变量x1、x2影响,通过实验获得表中的一批数据,
试建立y对x1、x2的线性回归方程。
2、程序清单
用matlab计算:
由多元线性回归方程:
Y=B0+B1*X1+B2*X2;
先对方程两侧进行求导,再由矩阵运算求出B1、B2。
最后求出B0。
程序如下:
>>X1=[15.5810.6815.6215.7813.2216.4411.416.1714.0315.6712.7411.7314.8413.7315.1217.8813.3814.2116.816.3810.8117.2614.9218.1418.1510.3111.412.5717.61];
>>X2=[1.951.372.391.141.851.322.051.111.471.381.351.331.091.271.782.521.432.271.411.781.321.311.422.131.20.981.270.871.21];
>>Y=[1.341.271.561.481.41.820.851.41.151.890.871.531.252.471.832.411.691.591.192.441.351.571.641.642.340.651.192.061.57];%把X1,X2,Y值放入数组
>>L11=sum(X1.*X1)-((sum(X1))^2)/29
L11=
159.8905
>>L12=sum(X1.*X2)-sum(X1)*sum(X2)/29
L12=
7.2838
>>L22=sum(X2.*X2)-(sum(X2)^2)/29
L22=
5.1999
>>L1y=sum(X1.*Y)-sum(X1)*sum(Y)/29
L1y=
16.1565
>>L2y=sum(X2.*Y)-sum(X2)*sum(Y)/29
L2y=
0.8551
>>L21=L12;
>>L=[L11L12;L21L22]
L=
159.89057.2838
7.28385.1999
>>YY=sum(Y)/29%数组Y中数据平均值
YY=
1.5669
>>XX1=sum(X1)/29%数组X1中数据平均值
XX1=
14.5714
>>XX2=sum(X2)/29%数组X2中数据平均值
XX2=
1.5162
>>YL=[L1y;L2y]%将L1y、L2y组成列向量
YL=
16.1565
0.8551
>>B=inv(L)*YL%由公式L=B*YL求得B即得B1,B2
B=
0.0999
0.0245
>>B0=YY-0.0999*XX1-0.0245*XX2%由公式B0=Y平均-B1*X1平均-B2*X2平均求B0
B0=
0.0741
>>Y=0.0741+0.0999*X1+0.0245*X2%拟合曲线公式即为Y=B0+B1*X1+B2*X2
>>plot3(X1,X2,Y)%绘制二元线性回归三维立体图
3、
程序输出结果及分析
输出结果:
B0=0.0741。
B1=0.0999。
B2=0.0245。
Y=B0+B1*X1+B2*X2;
则Y=0.0741+0.0999*X1+0.0245*X2
生成结果如右图:
结果分析:
多元线性回归问题与一元线性回归问题原理相同,求取一元线性回归拟合曲线问题相当于求解方程个数大于未知数个数的方程组以获取自变量x与因变量y之间的关系。
求解此类问题可以借助于最小二乘法。
不同的是多元线性回归影响因变量的因素不是一个而是多个。
为求得最佳拟合曲线,需对残差平方公式求导的出最小极值,得最佳拟合参数再根据公式求得最后结果。
4、几点思考
求解多元线性回归关键在于几点:
由公式Y=B0+B1*X1+B2*X2
为求得最佳拟合曲线,需对残差平方公式
求导的出最小极值,即得出矩阵方程
L*B=Ly。
由此公式可得最佳拟合参数B1、B2
再由公式B0=Y平均-B1*X1平均-B2*X2平均求出B0
即求解出方程。
三、相关法
1、任务要求
a、编写自(互)相关函数计算程序,输出序列(或函数)
(1)随机信号
(2)
(3)
与
(4)
与
的自(互)相关函数随时间间隔变化的曲线,并回答如下问题:
(1)自相关函数是的偶函数
(2)当=0时,自相关函数具有最大值
(3)周期信号的自相关函数是同频率周期信号,不保留原信号的相位信息。
(4)随机信号的自相关函数将随的增大很快趋于0。
(5)两个同频率周期信号的互相关函数是同频率周期信号。
(6)两个非同频率的周期信号互不相关。
b、
t2
t1
要求:
(1)应用一个周期的正弦函数仿真该速度求取过程,其中渡越时间
应用相关法求取;
(2)在该正弦函数中加入一随机噪声,重新求取速度,并思考影响速度测量精度的因素有哪些?
如何提高速度测量的精度?
2、程序清单
a、
(1)随机信号
程序代码:
y=rand(100);
Rxx=[];
fort=1:
1:
100
sum=0
forx=t:
1:
100
sum=sum+y(x-t+1)/y(x);
end
Rxx=[Rxx,sum];
end
plot(Rxx);
生成图形如右:
(2)
由公式
程序代码:
x=1:
100;
y=sin(x);%构造函数;
Rxx=[];%定义一个空矩阵;
fort=1:
200;%定义
的范围进行循环;
sum1=0;%公式中分子上函数的卷积;
sum2=0;%公式中分子上x(t)*x(t)的不定积分;
sum3=0;%公式中分子上y(t)*y(t)的不定积分;
fori=1:
0.1:
100;%积分变量,循环积分;
sum1=sum1+sin(i)*sin(i-t);
sum2=sum2+sin(i)*sin(i);
sum3=sum2;
end;
sum=sum1/sqrt(sum2*sum3);%求出每次的相关系数;
Rxx=[Rxx,sum];%将求出相关系数存入数组;
end
plot(Rxx);
生成图形如右:
(3)
与
程序代码:
x=1:
100;
Y1=sin(2*x);
Y2=cos(2*x);%构造函数;
Rxy=[];%定义一个空矩阵;
fort=1:
200;%定义
的范围进行循环;
sum1=0;%公式中分子上函数的卷积;
sum2=0;%公式中分子上x(t)*x(t)的不定积分;
sum3=0;%公式中分子上y(t)*y(t)的不定积分;
fori=1:
0.1:
100;%积分变量,循环积分;
sum1=sum1+sin(2*i)*cos(2*(i-t));
sum2=sum2+sin(2*i)*sin(2*i);
sum3=sum3+cos(2*i)*cos(2*i);
end;
sum=sum1/sqrt(sum2*sum3);%求出每次的相关系数;
Rxy=[Rxy,sum];%将求出相关系数存入数组;
end
plot(Rxy);
生成图形如右:
(4)
与
程序代码:
x=1:
100;
Y1=sin(10*x);
Y2=cos(25*x);%构造函数;
Rxy=[];%定义一个空矩阵;
fort=1:
200;%定义
的范围进行循环;
sum1=0;%公式中分子上函数的卷积;
sum2=0;%公式中分子上x(t)*x(t)的不定积分;
sum3=0;%公式中分子上y(t)*y(t)的不定积分;
fori=1:
0.1:
100;%积分变量,循环积分;
sum1=sum1+sin(10*i)*cos(25*(i-t));
sum2=sum2+sin(10*i)*sin(10*i);
sum3=sum3+cos(25*i)*cos(25*i);
end;
sum=sum1/sqrt(sum2*sum3);%求出每次的相关系数;
Rxy=[Rxy,sum];%将求出相关系数存入数组;
end
plot(Rxy);
生成图形如右:
b、
传感器接收到的信号分别为y=sinx,y=sin(x+1)
m=1;
fort1=0:
0.01:
5
a1=0;a2=0;a3=0;
forx=0:
0.01:
2*pi
a1=a1+sin(x)*sin(x+1-t1);
a2=a2+sin(x)^2;
a3=a3+cos(x+1)^2;
end
r(m)=a1/sqrt(a2*a3);
m=m+1;
end
t1=0:
0.01:
5;
plot(t1,r);
[mm,t]=max(r)
t=t/100
mm=
0.9997
t=
101
t=
1.0100
生成图形如右:
传感器接收到的信号分别为y=sinx,y=sin(x+1)
m=1;
fort1=0:
0.01:
5
a1=0;a2=0;a3=0;
forx=0:
0.01:
2*pi
a1=a1+(sin(x)+rand
(1))*(sin(x+1-t1)+rand
(1));
a2=a2+(sin(x)+rand
(1))^2;
a3=a3+(cos(x+1)+rand
(1))^2;
end
r(m)=a1/sqrt(a2*a3);
m=m+1;
end
t1=0:
0.01:
5;
plot(t1,r);
[mm,t]=max(r)
t=t/100
mm=
0.9581
t=
98
t=
0.9800
生成图形如右:
3、程序输出结果及分析
a、
(1)随机信号:
程序输出图形显示两个随机信号的相关性逐渐减小。
说明相关是用来表示两个信号之间的线性关系或相关程度,两个随机产生的信号之间存在的相似性很小,所以两个随机信号间相关程度低。
(2)
(3)
与
(4)
与
对于以上确定的函数间的相关性求解,一般在确定函数间会存在某种物理的关系,通过大量数据的采集,以及对输出结果的统计可得出相关性曲线如右侧图所示。
可知正弦函数与正弦函数本身之间,同频率的正弦函数与余弦函数之间,不同频率的正弦函数与余弦函数之间。
存在着不同的频率不同相位的正弦相关性。
并且相关性曲线的频率随着两相关函数的频率的增加而增加。
若两正弦或余弦具有相同的频率,则相关性曲线为没有重叠波纹的具有一定相位的正弦波。
若两正弦或余弦具有不同的频率,则相关性曲线会是两个不相重叠的不同频率与幅值的具有一定相位的正弦函数。
4、
几点思考
求解相关函数的相关性问题,对已知的两个确定函数可由公式
求出。
应用matlab软件对两个函数的自变量进行采样,引入
与时间tao有关的函数对其中一个函数进行平移与另一个函数
相乘,并将所有平移后的结果相加,即得出的函数反映了两个函数在时移中的相关性。
四、神经网络
1、程序清单
%bp网络的第一阶段学习期(训练加权系数wjk,vij)
%初始化
clear
clc
lr=0.5;err_goal=0.001;%lr为学习速率;err_goal为期望误差最小值
max_epoch=10000;%max_epoch为训练的最大次数
Yj=0;Ok=0;%置隐含层和输出层各神经元输出初值为0
X=[-1-1-1-1%提供训练集和目标值
1001
1010];
D=[0011];
%初始化wjk,vij(N为输入节点i的数量(含阈值);M为隐含层节点j的数量;L为输出节点k的数量)
[N,S]=size(X);M=4;[L,S]=size(D);%S为训练集对数,即为样本数
vij=rand(M,N);wjk=rand(L,M+1);%wjk中包含阈值
vij0=zeros(size(vij));wjk0=zeros(size(wjk));
Y=rand(5,4);
K=rand(4,1);
forepoch=1:
max_epoch
%计算隐含层各神经元输出
netj=vij*X;
Yj=1./(1+exp(-netj));
%计算输出层各神经元输出
e=[-1-1-1-1];
Y=[e;Yj];
netk=wjk*Y;
Ok=1./(1+exp(-netk));
%计算误差函数
E=sum((Ok-D).^2)/2;
if(E<=(err_goal))
break;
end
%调整输出层加权系数
fort=2:
5
K(t-1)=sum(Yj(t));
end
dwjk=lr*((1-Ok)*K)*((D-Ok).*(Ok));
wjk(1,2:
5)=wjk(1,2:
5)+dwjk;
%调整隐含层加权系数
h=(D-Ok).*(Ok).*(1-Ok);
k=lr*(K'*(1-K))*(wjk(1,2:
5)*h')*X;
dvij=k';
vij=vij+dvij;
end
epoch%显示计算次数
%BP网络的第二阶段工作期(根据训练好的wjk,vij和给定的输入计算输出)
X1=X;
%计算隐含层各神经元输出
netj=vij*X1;
Yj=1./(1+exp(-netj));
%计算输出层各神经元输出
e=[-1-1-1-1];
Y=[e;Yj];
netk=wjk*Y;
Ok=1./(1+exp(-netk));
vij
wjk
Ok
2、程序输出结果及分析
运行结果:
epoch=
10000
vij=
-15.254016.339816.5611
-15.16790.44180.6992
-15.19280.353316.6130
-15.801416.03910.4784
wjk=
1.0e+003*
0.0006-2.4998-2.49992.50002.5002
Ok=
0.50000.50000.50000.4999
结果分析:
神经网络模型包括三个层次:
输入层,输出层,隐层。
学习规则的训练步骤如下:
(1)对各权值w0j(0),w1j(0),┄,wnj(0),j=1,2,┄,m(m为计算层的节点数)赋予较小的非零随机数;
(2)输入样本对{Xp,dp},其中Xp=(-1,x1p,x2p,┄,xnp)T,dp为期望的输出向量,上标p代表样本对的序号,设样本集中的样本总数为P,则p=1,2,┄,P;
(3)计算各节点实际输出ojp(t)=f[WjT(t)Xp],j=1,2,...,m;
(4)调整各节点对应的权值,Wj(t+1)=Wj(t)+η[djp-ojp(t)]Xp,j=1,2,┄,m,其中η为学习率,用于控制调整速度,太大会影响训练的稳定性,太小则使训练的收敛速度变慢,一般取0<η≤1;
(5)返回到步骤
(2)输入下一对样本,周而复始直到对所有样本,感知器的实际输出与期望输出相等。
则上述程序中,epoch为输入次数,vij为输入层到隐层之间的权值矩阵,wjk为隐层到输出层之间的权值矩阵。
3、几点思考
神经网络能够通过对样本的学习训练,不断改变网络的连接权值以及拓扑结构,以使网络的输出不断地接近期望的输出。
这一过程称为神经网络的学习或训练,其本质是可变权值的动态调整。
BP网络是一种前向网络。
相邻两层的每一个神经元之间均有权值联系,权值的大小反映了这两个神经元之间的连接强度,整个网络的计算过程是由输入层到隐层再到输出层单向进行,所以称为前向网络。
五、遗传算法
1、任务要求
利用遗传算法求Rosenbrock函数的极大值:
该函数有两个局部极大值点,分别是
和
,其中后者为全局最大点。
利用二进制编码遗传算法求函数极大值,并分析各算法控制参数对算法的影响。
2、程序清单
clc;clearall;
formatlong;%设定数据显示格式
%初始化参数
T=100;%仿真代数
N=80;%群体规模
pm=0.05;pc=0.8;%变异、交叉概率
umax=2.048;umin=-2.048;%参数取值范围
L=10;%单个参数字串长度,总编码长度2L
bval=round(rand(N,2*L));%初始种群
bestv=-inf;%最优适应度初值
%迭代开始
forii=1:
T
%解码,计算适应度
fori=1:
N
y1=0;y2=0;
forj=1:
1:
L
y1=y1+bval(i,L-j+1)*2^(j-1);
end
x1=(umax-umin)*y1/(2^L-1)+umin;
forj=1:
1:
L
y2=y2+bval(i,2*L-j+1)*2^(j-1);
end
x2=(umax-umin)*y2/(2^L-1)+umin;
obj(i)=100*(x1*x1-x2).^2+(1-x1).^2;%目标函数
xx(i,:
)=[x1,x2];
end
func=obj;%目标函数转换为适应度函数
p=func./sum(func);
q=cumsum(p);%累加
[fmax,indmax]=max(func);%求当代最佳个体
iffmax>=bestv
bestv=fmax;%到目前为止最优适应度值
bvalxx=bval(indmax,:
);%到目前为止最佳位串
optxx=xx(indmax,:
);%到目前为止最优参数
end
Bfit1(ii)=bestv;%存储每代的最优适应度
%遗传操作开始
%轮盘赌选择
fori=1:
(N-1)
r=rand;
tmp=find(r<=q);
newbval(i,:
)=bval(tmp
(1),:
);
end
newbval(N,:
)=bvalxx;%最优保留
bval=newbval;
%单点交叉
fori=1:
2:
(N-1)
cc=rand;
ifccpoint=ceil(rand*(2*L-1));%取得一个1到2L-1的整数
ch=bval(i,:
);
bval(i,point+1:
2*L)=bval(i+1,point+1:
2*L);
bval(i+1,point+1:
2*L)=ch(1,point+1:
2*L);
end
end
bval(N,:
)=bvalxx;%最优保留
%位点变异
mm=rand(N-1,2*L)bval(mm)=1-bval(mm);
end
%输出
plot(Bfit1);%绘制最优适应度进化曲线
bestv%输出最优适应度值
optxx%输出最优参数
3、程序输出结果及分析
程序输出曲线如右图:
由得出来的曲线可以看出通过对产生数据的对具有最有适应度的个体的筛选,并进行遗传处理:
复制、交叉、变异。
使得种群中在遗传的过程中具有高适应度的个体占群体的比例逐渐增多,最终比例趋于平稳。
遗传算法的步骤:
1)定义适应度函数f(x),给出N,Pc,Pm,T;
2)随机产生N个个体s1,s2,…,sN,组成初始种群S={s1,s2,…,sN},置代数计数器t=1;
3)计算S中每个个体适应度f();
4)若终止条件满足,取S中适应度最大的个体作为结果,结束。
5)按选择概率P(xi)决定选中机会,每次从S中随机选定1个个体并将其染色体复制,共做N次,然后将复制所得的N个染色体组成群体S1;
6)按Pc决定的参加交叉的染色体数c,从S1中随机确定c个染色体,配对进行交叉操作,用新染色体代替原染色体,得S2;
7)按Pm决定的变异次数m,从S2中随机确定m个染色体,分别进行变异操作,用新染色体代替原染色体,得S3;
8)将群体S3作为新一代种群,即用S3代替S,t=t+1,转步3),即计算S中每个个体适应度f()。