v1.0 可编辑可修改 《数值计算方法》实验报告
专业: 姓名: 学号: 班级: 成绩:
1. 实验名称
实验5 最小二乘拟合法
2. 实验题目
在某化学反应里,测得某物质的浓度y(单位:%)随时间t(单位:min)的变化数据如表5—7所列。 t 1 2 3 4 y t 5 6 7 8 y t 9 10 11 12 y t 13 14 15 16 y 理论上已知y与t间的关系为
y?aeb/t,
其中a>0和b<0为待定系数。上式两端取对数可得ln y=ln a+b/t.做变量替换
z=ln y,x=1/t,并记A=ln a,B=b,则有
z=A+Bx.
根据所测数据,利用最小二乘直线拟合法先确定系数A和B,进而给出y与t间的关系。
3. 实验目的
11
v1.0 可编辑可修改 熟练使用最小二乘拟合法
4. 基础理论
最小二乘拟合法
5. 实验环境
Microsoft Visual C++
6. 实验过程
开始 建立数组,输入令z=ln y, x=1/t, z=A+Bx 用最小二乘拟合法建立方程组,求出系数A,B并输再输出y与t的关系。 结束
7. 结果分析
22
v1.0 可编辑可修改
本次试验令我更加熟悉最小二乘拟法;
8. 附录:程序清单
#include<> #include<> void main(){
int i=0;
double z[16],x[16],D,a,b;
double t[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; double y[16]={,,,,,,,,,,,,,,,};
double sum_x=0,sum_x2=0,sum_y=0,sum_xy=0; for(i=0;i<16;i++){
for(i=0;i<16;i++){
sum_x=sum_x+x[i]; sum_x2=sum_x2+x[i]*x[i]; sum_y=sum_y+z[i];
33
x[i]=1/t[i]; z[i]=log(y[i]); }
v1.0 可编辑可修改 }
sum_xy=sum_xy+x[i]*z[i];
D=sum_x2*16-sum_x*sum_x; a=(16*sum_xy-sum_x*sum_y)/D; b=(sum_x2*sum_y-sum_x*sum_xy)/D; printf(\,a,b); printf(\,a,b); }
44