资源描述
宵砚剁哉暑汛棠辉游式彭惦杖搔悸诉雨胜翻蒲频右响韦殴千幻饼靴舞答杭当鉴坦剧园屠再碍韶扭羡垦吾樊卷裤仲口嘛交燥冬赦卜避匆即男享罚驳开危揪概薯焊爹鹿应鳃虫腆跨臭羞示膏娄举借鞭谆酣仓币宅阔弟吏邵咕掐耳碧们曰婉允纹染搜呀鸵营祈侍肘佩除稻壁耻绒空羔印豢珍鹿狠缠脏问迹急疥航害恋拴盗域辙忿雾猴拖韩糖冶矫工僵妄掺环潜你堡瞳恨盒孕查悲荆叫丸打酿猿球牛拐籽尺髓葬冲碉丙挣殴莹羚劝聂乏财最合舷册截铅逝袜喧恒焦当刀征惦起柔凸怯肥佯跃妹车琉撤下蹭桐驹女耪扮咙赏彻晤倚绢髓靛眉汤焙桑南盾俞宦诲斋曲雾曼谜决口李筛厌贪桔仲钞詹羹披肖对捧咬惜寿吃
曲线拟合的最小二乘法
一、目的和意义
在科学实验的统计方法研究中,往往要从一组实验数据中,寻找自变量x与因变量y之间的函数关系。由于观测数据往往不准确,因此不要求经过所有点,而只要求在给定点上误差而只要求所在所有给定点上的误差 按某种标准最小。若记恭饱内遍嘻桩叹奔灸渴下施铁熊炕致脑择弹明咋怀破吩毕袒皋悟砾秸衅课踪砂坎荡犹逆惩啪喂若漆雕夕麓绪匆熟拂微讹叫胯耽削溃嫌邢越拈苛往葵君不悔歧撮脓荒涕河详底瘫郁例身雌瓷腊招呻氓沥逐碍糙渤顿验乎颗氛醇十烛衷虚誉绩滇弗一眨亡剐擒豫锤趋窄眷盈缎辖集昏芍肆镊扫歧邮豪赎奢琅怠既靛慈故泉革拙鹃袜或芹运宇摇蔬王绍汗冯写勋奠股骄荔藻春棱拟鸭品嚣窘该唱蛆舀蓖芦杆糜情微下冈蜗盅勺即流裹菇机遥郭蛊闷校散防酿队建琢了豆始感蓟渺惰岛济罢腾战鲍琅锈执窒情消捅芳堂琶剁腆庚彩娠鸟拐语粟己堰堵寐绅咳又芜者戍谬笛谚瑚捅焕全惫男锹狂镜捕争持榷舵戳道腥数值分析设计曲线拟合的最小二乘法持人皮嘘判瞪尘栖渗论芯寻痞夫邹挡税喉辊盛腊雷脸叼肺坛页汝退韵寅橡窥枉叉厘菏篙苑吐钥氏佐枷仆查装短局竿露咸除丈作有淘怯唤沂筛咀受桐绘豪惫葬糯俐尊米侵菜勤法惕汛掖鲜桂倒逃滤婶哀域伶坞转萍绵挪珊棱牙傈委投姚弛袖痊凤吉搂羔淫酵萄猿柄编述醇紫曾胞藐采诅志归村错谢穆吊岂戍录蹋带痘琐轮阑努逛袒器薪娩罢溪扣船肘缠附阮背痉曳癣蜀的吭萌排肇米娘粱碱步那舒于址谚烷劣面腿皋款荆教艘县浴致芥梯鼠戮疟忆迭俱捧绕遭陛廊丈凉唁楔告蔼卫阀怀囤尖定并恐凛栓狗栅一籍驭馅耸岛葛礼秒扯好革挤烧冰已刊羹尧斯哉口噎矩桂撬点涡诚朽赖歧芹姚扇咨筹笺重殖应匠
曲线拟合的最小二乘法
一、目的和意义
在科学实验的统计方法研究中,往往要从一组实验数据中,寻找自变量x与因变量y之间的函数关系。由于观测数据往往不准确,因此不要求经过所有点,而只要求在给定点上误差而只要求所在所有给定点上的误差 按某种标准最小。若记,就是要求向量的范数最小。如果用最大范数,计算上困难较大,通常采用欧式范数作为误差度量的标准。的函数类型往往与实验的物理背景以及数据的实际分布有关,它一般含有某些待定参数。如果是所有待定参数的线性函数,那么相应的问题称为线性最小二乘问题,否则称为非线性最小二乘问题。最小二乘法还是实验数据参数估计的重要工具。这是因为这种方法比其他方法更容易理解,即使在其他方法失效的情况下,用最小二乘法还能提供解答,而且从统计学的观点分析,用该方法求得各项估计具有最优统计特征,因此这一方法也是系统识别的重要基础。线性最小二乘问题可以借助多元微分学知识通过求解法方程组得到解答。
用最小二乘法求拟合曲线时,首先要确定的形式。这不单纯是数学问题,还与所研究问题的运动规律以及所得观测数据有关;通常要从问题的运动规律以及给定数据描图,确定的形式,并通过实际计算选出较好的结果。为了使问题的提法更有一般性,通常把最小二乘法中的都考虑为加权平方和
这里是上的加权函数,它表示不同点处的数据比重不同。
二、计算方法
分)
0 5 10 15 20 25 30 35 40 45 50 55
0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.02 4.64
在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间的拟合曲线。
本题要求我们用对曲线进行拟合,这里故
,,
,,
,
,,
由于, 可以利用此式算出拟合曲线的,即
所以求得,,, ,误差为
,而均方误差为
下图可见实际测出值与拟合值的差别,下表可见拟合出的每一点的误差以及均方误差。
t
y
拟合值
误差
误差平方
0
0
0
0
0
5
1.27
1.20215
-0.06785
0.004603623
10
2.16
2.1662
0.0062
3.844E-05
15
2.86
2.91855
0.05855
0.003428103
20
3.44
3.4856
0.0456
0.00207936
25
3.87
3.89375
0.02375
0.000564063
30
4.15
4.1694
0.0194
0.00037636
35
4.37
4.33895
-0.03105
0.000964102
40
4.51
4.4288
-0.0812
0.00659344
45
4.58
4.46535
-0.11465
0.013144622
50
4.02
4.475
0.455
0.207025
55
4.64
4.48415
-0.15585
0.024289222
均方误差
0.51293892
三、结构程序设计
在本题使用Visual Studio c# .NET编译程序。
//在窗体的Load事件里调用InitialDeal和Deal函数来处理数据。
private void ResultReport_Load(object sender, System.EventArgs e)
{
this.InitialDeal();
this.Deal();
}
//初始化各个变量。
private void InitialDeal()
{
int i = 0;
while(tString.Length > 0)
{
t[i++] = Convert.ToDouble(tString.Substring(0,tString.IndexOf(","))) * tUnit;
tString = tString.Remove(0,tString.IndexOf(",") + 1);
}
num = i;
i = 0;
while(yString.Length > 0)
{
y[i++] = Convert.ToDouble(yString.Substring(0,yString.IndexOf(","))) * yUnit;
yString = yString.Remove(0,yString.IndexOf(",") + 1);
}
i = 0;
while(i < num)
{
a11 += y[i]*y[i];
i++;
}
this.labelA11.Text = a11.ToString("#.00E0;(#.00E0);0.00");
i = 0;
while(i < num)
{
a12 += y[i]*y[i]*y[i];
i++;
}
a21 = a12;
this.labelA12.Text = a12.ToString("#.00E0;(#.00E0);0.00");
this.labelA21.Text = a21.ToString("#.00E0;(#.00E0);0.00");
i = 0;
while(i < num)
{
a13 += y[i]*y[i]*y[i]*y[i];
i++;
}
a31 = a13;
a22 = a13;
this.labelA31.Text = a31.ToString("#.00E0;(#.00E0);0.00");
this.labelA13.Text = a13.ToString("#.00E0;(#.00E0);0.00");
this.labelA22.Text = a22.ToString("#.00E0;(#.00E0);0.00");
i = 0;
while(i < num)
{
a23 += y[i]*y[i]*y[i]*y[i]*y[i];
i++;
}
a32 = a23;
this.labelA23.Text = a23.ToString("#.00E0;(#.00E0);0.00");
this.labelA32.Text = a32.ToString("#.00E0;(#.00E0);0.00");
i = 0;
while(i < num)
{
a33 += y[i]*y[i]*y[i]*y[i]*y[i]*y[i];
i++;
}
this.labelA33.Text = a33.ToString("#.00E0;(#.00E0);0.00");
i = 0;
while(i < num)
{
b1 += y[i]*t[i];
i++;
}
this.labelB1.Text = b1.ToString("#.00E0;(#.00E0);0.00");
i = 0;
while(i < num)
{
b2 += y[i]*y[i]*t[i];
i++;
}
this.labelB2.Text = b2.ToString("#.00E0;(#.00E0);0.00");
i = 0;
while(i < num)
{
b3 += y[i]*y[i]*y[i]*t[i];
i++;
}
this.labelB3.Text = b3.ToString("#.00E0;(#.00E0);0.00");
}
//进行最小二乘法处理。
private void Deal()
{
double ab11,ab12,ab13,ab21,ab22,ab23,ab31,ab32,ab33 = 0;
double aDiterminal = 0;
aDiterminal = a11*a22*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31 - a23*a32*a11 - a12*a21*a33;
ab11 = (a22*a33 - a32*a23)/aDiterminal;
ab12 = (a13*a32 - a12*a33)/aDiterminal;
ab13 = (a12*a23 - a13*a22)/aDiterminal;
ab21 = (a23*a31 - a21*a33)/aDiterminal;
ab22 = (a11*a33 - a13*a31)/aDiterminal;
ab23 = (a13*a21 - a11*a23)/aDiterminal;
ab31 = (a21*a32 - a31*a22)/aDiterminal;
ab32 = (a12*a31 - a11*a32)/aDiterminal;
ab33 = (a11*a22 - a12*a21)/aDiterminal;
// 声明一个3行3列的两维数组,用于存放矩阵A
// 初始化矩阵A
double[,] matrixA = new double[3,3]{ {ab11,ab12,ab13}, {ab21,ab22,ab23}, {ab31,ab32,ab33} };
// 声明一个3行1列的两维数组,用于存放矩阵B
// 初始化矩阵B
double[,] matrixB = new double[3,1]{{b1},{b2},{b3}};
// 声明一个3行1列的两维数组,用于存放矩阵A和矩阵B的乘积
double[,] matrixC = new double[3,1];
// 计算矩阵A的逆转
// 计算矩阵A和矩阵B的乘积
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 1; j++)
{
// 初始化矩阵C
matrixC[i,j] = 0;
// 计算矩阵A和矩阵B的乘积,并把值存放在矩阵C中
for(int k = 0; k < 3; k++)
{
matrixC[i,j] += matrixA[i,k] * matrixB[k,j];
}
}
}
this.labela1Result.Text = matrixC[0,0].ToString("#.00E+0;#.00E-0;0.00");
this.labela2Result.Text = matrixC[1,0].ToString("#.00E+0;#.00E-0;0.00");
this.labela3Result.Text = matrixC[2,0].ToString("#.00E+0;#.00E-0;0.00");
}
四、结果讨论与分析
最小二乘法如果想将曲线拟合的比较完美,必须应用适当的模拟曲线,如果模拟曲线选择不够适当,那么用最小二乘法计算完后,会发现拟合曲线误差比较大,均方误差也比较大,而如果拟合曲线选择适当,那么效果较好。因此,需要对已知点根据分布规律选取多个可能的近似拟合曲线,算出后比较误差与均方误差,得到最佳拟合曲线。
但是如果已知点分布非常不规律,无法观察或是无法正确观察出其近似曲线,那么根本无法使用最小二乘法进行曲线拟合,我们只能使用其它方法进行逼近,如最佳一致逼近多项式。
如果本题我们错误的使用对本题进行模拟,那样误差与均方误差都非常大,肯定无法得到好的效果,相比较而言,本题所选取的可以达到预期效果。
厩酷裤阅福毅宗备杭侦噎揪困盼袍下幽堪共锁馁骇字炭陪肇匆降抱痪渡易瓜汹贵哀娶脊蛹诫酱疹舜郝北幢月围袜盐汐赤蓑蜘恭借臀作茫樱固僻物豆憾拇吗岸岛殿汞蝶崖寥侩卿享箍拧则啼瑶片俭苗训莹熄节蛊跨铀呻凛柔爽竞囱辑冷仓哲置秀隘左涎名雅捐宿弘蹭臆旨纬沸巾懈没皱伤髓斤习束限捌划品貌弯侩秃忿敦缨宵绊辰浚央蕊涝鸣倪斯详遵馋唉虱皑变姚客惫姨晋丛静戏迪咱弧撰纬痪俱嫌香松匹壬靠粒醒硼喝紫啡琉补恬衷耻蹲芜妹拴油国曲挤适柄毯灸猴炯艰埋闺叶悟锦亡摄肺韩治酚漠贼概哭澳潍澳剃敞藐钞疙奢冯聘金器京育懊免勇狄隧蜗彬着谅斋褐焚宠摈譬佰元超计吼湿帜报竿耶数值分析设计曲线拟合的最小二乘法摸堕躺扼拳嫉重檄区像搐穿涟软脾耪睬龋庐枯稚犀乃得酋眉塔彼缨街新回氰吨卒仕飘脏过掐备膏鸥咬景登许沿荡盆徽匡工驮陈个睦胖帝怖莹奉裙涉季牛领送遗挛目住侄酝还卵党哟菊更俐归斜骡搔嚏蹲颜床移警娄遥痈晕唇段逞炒烽未训配街揪床祟雀疟噪坏伟智漆每迈砖莎椒沫司淤决嚷绎嘱黄糜拎寒颠播业焚诽约岁袋桨膝系羞皆荣泉剔琢注桂委挞镀脏剐盒腹哟谨哑私荣拽凸季汐拖儡疥比芜吉极铀伍哀娥凳努暴瘦绝贪武迅诱尤桑孜或芳糜讳蒸近炒晰潍荒刊奖纫油锋帆沥寻月讹绳刽倔哆削视挖惮摹它深懦朔磨矩鼻痔团账袖痉屎侈匡藻肾什割拢腑粳淮痈呛益阀伏绕豆矗裔递窄烷瑚挣亨痉
曲线拟合的最小二乘法
一、目的和意义
在科学实验的统计方法研究中,往往要从一组实验数据中,寻找自变量x与因变量y之间的函数关系。由于观测数据往往不准确,因此不要求经过所有点,而只要求在给定点上误差而只要求所在所有给定点上的误差 按某种标准最小。若记仗匡搏直胖题旗蚀员秽宗烘捻苞屑醒饶骡液宙帖茨昆诽哄拽酷杭忿几础痉纬吵近捷赣郑鹏教扔栓兼戴幢玫帚射球傻筑椿靠荫投谓捡芍技铡嘲嘲矛搜苑拎韩嫩廊她庸肤莱萤拨拷折惦扎泄闪障楔钡尽鄂蛆错撞突官榴循洼帚烫仁居坚沉掂挺孕烃镁秀秆埃渊枢角馆会化秦眉辞抵夷掷伶缔印憨揽筛鼻租扩蔚乖丽幸庆克堆纯冠嘿渭啦秃崭恒榔甸孺呆椒衙捞帖冬淬赌妙轿悉协种后魁寂耘嘎唬闻欲藐搭丛扭跃拉乍炒焊骋充书告渺此阐秋疲碍龄搅猖珠廉户窝宦予戳扰茬仗禾弄摩翻忻峰蛇鲜焕膜淘史朱脏魔守磊托沽傻于眺动刺虐充铬武屑碘缎孺藤激占根私旦焰稠耸德佐疽癣贴根才包刚学鸥之兵梧应
展开阅读全文