用matlab实现误差理论与数据处理的部分习题Word格式.docx
《用matlab实现误差理论与数据处理的部分习题Word格式.docx》由会员分享,可在线阅读,更多相关《用matlab实现误差理论与数据处理的部分习题Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
![用matlab实现误差理论与数据处理的部分习题Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/12/9f990d3a-199a-4ca2-a4c3-80bf2f89c924/9f990d3a-199a-4ca2-a4c3-80bf2f89c9241.gif)
end
运行结果:
absoluteError5=-5.5556e-04
oppositeError5=-3.0864e-04
absouluteError7=-0.3000
oppositeError7=-0.2985
精度最高的是第三种,相对误差为0.000080
第二章
这章自己写了几个函数:
functionvalue=standardDeviation(n,v)
%value是返回的标准差,n是测量的值的矩阵,v是算术平均值
%standardDeviation函数是求测量的标准差
k=1;
fori=n
residualError(k,:
)=i-v;
%存放残差的向量
k=k+1;
value=((sum(residualError.^2))/(numel(n)-1))^0.5;
functionvalue=T_fenbubiao(a,v)
%该函数实现T分布表的查询
%v表示次数,a表示可信度
m_005=[12.714.303.182.782.572.452.362.312.262.23;
2.202.182.162.142.132.122.112.102.092.09;
2.082.072.072.062.062.062.052.052.052.04;
0002.022.012.001.991.991.991.98];
m_001=[63.669.925.844.604.033.713.503.363.253.17;
3.113.053.012.982.952.922.902.882.862.85;
2.832.822.812.802.792.782.772.762.762.75;
0002.702.682.662.652.642.632.63];
m_00027=[235.8019.219.216.625.514.904.534.284.093.96;
3.853.763.693.643.593.543.513.483.453.42;
3.403.383.363.343.333.323.303.293.283.27;
0003.203.163.133.113.103.093.08];
p=a;
switchp
casedouble(0.05)
index=lookup_index(v);
row=index
(1);
column=index
(2);
if(row>
0&
&
column>
0)
value=m_005(row,column);
value=1.96;
case0.0100;
value=m_001(row,column);
value=2.58;
case0.0027;
value=m_00027(row,column);
value=3.00;
otherwise
functionvalue=lookup_index(v)
ifv<
=10
value=[1,v];
elseif(v>
10&
v<
=20)
v1=rem(v,10);
ifv1==0;
v1=10;
value=[2,v1];
20&
=30)
v2=rem(v,10);
if(v2==0)
v2=10;
value=[3,v2];
elseif(v>
30&
=100)
v3=fix(v/10);
value=[4,v3];
value=[0,0];
functionresidualError=calculationResiduals(testValue)
%求残差的函数
%testValue是传入的测量值,residualError返回的残差值
averageValue=sum(testValue)/numel(testValue);
fori=testValue
temp=i-averageValue;
residualError(:
k)=temp;
functionvalue=judge(v,d3)
%判断有没有粗大误差函数
%d3是3倍的标准差
temp=abs(v);
vMax=max(temp);
ifvMax>
d3
value=findIndex(temp,vMax);
value=false;
functionvalue=findIndex(v,data)
fori=v
ifi==data;
value=k;
return;
value=false;
实现题目的主要代码:
%题目2-4求平均误差和算数平均值
test=[236.45,236.37,236.51,236.34,236.39,236.48,236.47,236.40];
%8次测试值
arithmeticAverageValue=sum(test)/numel(test);
%算术平均值
%根据贝塞公式求单次测量的标准差,d为标准差,dd为算术平均标准差
d=standardDeviation(test,arithmeticAverageValue);
dd=d/(numel(test))^0.5;
fprintf('
题目2-4'
);
算术平均值为%f,单次测量的标准差为%f,算术平均标准差为%f\n'
arithmeticAverageValue,d,dd);
%题目2-6求算术平均值,标准差,或然误差,平均误差
testValue2_6=[168.41,168.54,168.59,168.40,168.50];
arithmeticAverageValue2_6=sum(testValue2_6)/numel(testValue2_6);
d2_6=standardDeviation(testValue2_6,arithmeticAverageValue2_6);
%标准差
dd2_6=d2_6/(numel(testValue2_6))^0.5;
p2_6=0.6745*dd2_6;
%或然误差
averageError2_6=0.7979*dd2_6;
%平均误差
题目2-6'
算术平均值为%f,单次测量的标准差为%f,算术平均标准差为%f\n'
arithmeticAverageValue2_6,d2_6,dd2_6);
或然误差%f,平均误差%f\n'
p2_6,averageError2_6);
%题目2-8求置信限
averageDeviation=0.005/(5^0.5);
n=5;
P=0.95;
%置信限95%
%
(1)按t分布计算
a=0.05;
v=4;
t=T_fenbubiao(a,v);
%根据t分布表查对应的t值
x=t*averageDeviation;
题目2-12'
t分布下置信限为-%f到%f\n'
x,x);
%
(2)按正太分布做;
t=1.96;
%根据表知t=1.96
正太分布下置信限为-%f到%f\n'
%题目2-12求加权算术平均值及其标准差
xp=[102523.85102391.30102257.97102124.65101991.33101858.01101724.69101591.36];
%测试的次数
p=[13578642];
averageXp=sum(xp)/numel(xp);
fori=xp
temp=i-averageXp;
residualErrorV2=residualError.^2;
sum2_12=sum(xp.*p);
weightedAverage=sum2_12/sum(p);
%加权算术平均值
value=(sum(p.*residualErrorV2)/((numel(xp)-1)*sum(p))).^0.5;
%加权算术标准差
加权算术平均值%f,加权算术标准差%f\n'
weightedAverage,value);
%题目2-17判断是否有系统误差
testValue2_17=[14.71515.214.815.514.614.914.815.115];
averageValue=sum(testValue2_17)/numel(testValue2_17);
%判断测量次数的奇偶
cnt=numel(testValue2_17);
ifmod(cnt,2)==0
K=cnt/2;
K=(cnt+1)/2;
v=calculationResiduals(testValue2_17);
d2_17=sum(v(1:
K))-sum(v((K+1):
cnt));
题目2-17'
ifabs(d2_17)>
abs(max(v))
%f显著不为零,故测量中含有线性误差'
d2_17);
%f不显著为零,故测量中不含有线性误差'
%2-22莱以特准则判断粗大误差
testValue2_22=[28.5328.5228.5028.5228.5328.5328.5028.4928.4928.5128.5328.5228.4928.4028.50];
n=numel(testValue2_22);
averageValue2_22=sum(testValue2_22)/n;
d2_22=standardDeviation(testValue2_22,averageValue2_22);
%计算标准差
v2_22=calculationResiduals(testValue2_22);
%残差
d3_2_22=d2_22*3;
while1
index=judge(v2_22,d3_2_22);
ifindex%如果有粗大误差剔除
\n值%f是粗大误差应该提除\n'
testValue2_22(index));
testValue2_22(index)=[];
%删除对应的值
%重复第一次的步骤
n=numel(testValue2_22);
averageValue2_22=sum(testValue2_22)/n;
d2_22=standardDeviation(testValue2_22,averageValue2_22);
v2_22=calculationResiduals(testValue2_22);
d3_2_22=d2_22*3;
break;
代码的运行结果:
题目2-4算术平均值为236.426250,单次测量的标准差为0.059746,算术平均标准差为0.021124
题目2-6算术平均值为168.488000,单次测量的标准差为0.082280,算术平均标准差为0.036797或然误差0.024819,平均误差0.029360
题目2-8t分布下置信限为-0.006216到0.006216正太分布下置信限为-0.004383到0.004383
题目2-12加权算术平均值102028.342500,加权算术标准差87.661818
题目2-170.800000显著不为零,故测量中含有线性误差
题目2-22值28.400000是粗大误差应该踢除
第三章
MATLAB代码:
%题目3-1求测量误差
test=[40121.251.005];
testOffset=[-0.70.5-0.30.1];
limL=[0.350.250.200.20];
testSum=sum(test);
systemOffset=sum(testOffset);
offsetValue=testSum-systemOffset*1e-3;
limLOffset=sum(limL.^2)^0.5;
题目3-1'
系统误差%f修正值为%f测量误差%f\n'
systemOffset,offsetValue,limLOffset);
%题目3-2求立方体体积及其极限误差
a=161.6;
b=44.5;
c=11.2;
da=1.2;
db=-0.8;
dc=0.5;
%都是正负多少
lima=0.8;
limb=0.5;
limc=0.5;
V=a*b*c;
Vd=(da*b*c)+(a*db*c)+(a*b*dc);
Vr=V-Vd;
limV=((b*c)^2*lima^2+(a*c)^2*limb^2+(a*b)^2*limc^2).^0.5;
题目3-2测量体积最后结果表示为%d+-%d\n'
Vr,limV);
%题目3-4求功耗
globalU;
globalI;
%globalf;
symsUI
P=U*I;
fu=diff(P,U);
%求偏导
fi=diff(P,I);
I=22.5;
U=12.6;
di=0.5;
du=0.1;
ss=vpa(subs(fu));
zz=vpa(subs(fi));
Dp=(ss^2*du^2+zz^2*di^2+2*ss*zz*di*du)^0.5;
ui=vpa(subs(P));
题目3-4功率P为%sym标准差为%sym\n'
ui,Dp);
%题目3-12求误差
globalr;
globalh;
symsrh
%相对误差为1%,测量项目为2项n=2
V3_12=pi*h*r^2;
Vr=diff(V3_12,r);
Vh=diff(V3_12,h);
n=2^0.5;
e=0.01;
r=2.0;
h=20.0;
V0=vpa(subs(V3_12));
dv=V0*e;
rr=vpa(subs(Vr));
hh=vpa(subs(Vh));
dr=(dv/(n))*(1/rr);
dh=(dv/(n))*(1/hh);
ddr=vpa(dr);
ddh=vpa(dh);
题目3-12测定r的误差应为%0.6sym测定h的误差应为%0.6sym\n'
vpa(ddr,4),vpa(ddh,5));
代码的运行结果如下:
题目3-1系统误差-0.400000修正值为54.255400测量误差0.514782
题目3-2测量体积最后结果表示为7.779570e+04+-3.729111e+03
题目3-4功率P为283.5ym标准差为8.55ym
题目3-12测定r的误差应为0.0070测定h的误差应为0.1414
第四章
clc;
%题目4-1求圆球的最大截面的圆周和面积及圆球的体积的测量不确定度
%
(1)求圆球的最大截面的圆周的测量不确定度
symsr;
%求导
D=2*pi*r;
f=diff(D,r);
S=pi*r^2;
f1=diff(S,r);
V=(4/3)*pi*r^3;
f2=diff(V,r);
题目4-1\n'
)
dr=0.005;
%标准差
r=3.132;
fv=vpa(subs(f));
Uc=(fv^2*dr^2)^0.5;
%标准不确定度
n=9;
%测量次数减一
t=0.01;
%置信度
K=T_fenbubiao(t,n);
U=K*Uc;
%最大截面的圆周的测量不确定度
最大截面的圆周的测量不确定度为%0.5scm\n'
U);
%
(2)求圆球的最大截面的面积的测量不确定度
f1v=vpa(subs(f1));
Uc1=(f1v^2*dr^2)^0.5;
U1=K*Uc1;
最大截面的圆面积的测量不确定度为%0.6scm\n'
U1);
%(3)圆球的体积的测量不确定度
f2v=vpa(subs(f2));
Uc2=(f2v^2*dr^2)^0.5;
U2=K*Uc2;
圆球的体积的测量不确定度为%0.6scm\n'
U2);
%题目4-2求不确定度分量和放大率D的标准不确定度
globaly1;
globaly2;
symsy1y2
D=y1/y2;
Uy1=0.10;
Uy2=0.005;
Udy1=diff(D,y1);
Udy2=diff(D,y2);
y1=19.80;
y2=0.80;
Udy1v=vpa(subs(Udy1))^2;
Udy2v=vpa(subs(Udy2))^2;
Ud=(Udy1v*Uy1^2+Udy2v*Uy2^2)^0.5;
题目4-2\n'
value=vpa(subs(D));
望远镜放大率D的合成标准不确定度为%0.6s\n'
Ud);
望远镜放大率D为%0.6s+-%0.6s(cm)\n'
value,Ud);
%题目4-5求量块组引起的测量不确定度
testValue4_5=[40102.5];
dt=[0.450.300.25];
P=99.73;
ta=3;
%根据P的值查表得
Ul=dt./3;
U=(sum(Ul.^2)).^0.5;
data=roundn(U,-3);
%保留3位小数
题目4-5\n'
L的测量不确定度为%fum\n'
data);
代码运行结果:
题目4-1
最大截面的圆周的测量不确定度为0.102cm
最大截面的圆面积的测量不确定度为0.3197cm
圆球的体积的测量不确定度为2.0031cm
题目4-2
望远镜放大率D的合成标准不确定度为0.1988
望远镜放大率D为24.75+-0.1988(cm)
题目4-5
L的测量不确定度为