内容发布更新时间 : 2024/11/9 14:25:24星期一 下面是文章的全部内容请认真阅读。
课程设计名称: 设计二:数据拟合 指导教师: 张莉 课程设计时数: 6 课程设计设备:安装了Matlab、C++软件的计算机 课程设计日期: 实验地点: 第五教学楼北902 课程设计目的:
1. 了解最小二乘拟合的原理,掌握用MATLAB作最小二乘拟合的方法; 2. 学会利用曲线拟合的方法建立数学模型。
课程设计准备:
1. 在开始本实验之前,请回顾相关内容;
2. 需要一台准备安装Windows XP Professional操作系统和装有数学软件的计算机。
课程设计内容及要求
要求:设计过程必须包括问题的简要叙述、问题分析、实验程序及注释、实验数据及结果分析和实验结
论几个主要部分。
1. 用切削机床进行金属品加工时,为了适当地调整机床,需要测定刀具的磨损速度,在一定的时间测量刀具的厚度,得数据如表所示,请选用合适的函数来描述切削时间与刀具厚度的关系。 切削时间t/h 0 1 29.1 9 26.8 2 29.8 10 26.5 3 28.1 11 26.3 4 28.0 12 26.1 5 27.7 13 25.7 6 27.5 14 25.3 7 27.2 15 24.8 刀具厚度y/cm 30.0 切削时间t/h 8 刀具厚度y/cm 27.0
首先编辑一个M文件,程序如下:
t=0:15;
y=[30.0 29.1 29.8 28.1 28.0 27.7 27.5 27.2 27.0 26.8 26.5 26.3 26.1 25.7 25.3 24.8]; A=polyfit(t,y,3); %A表示我所拟合出的方程的系数
h=polyval(A,t); %h表示拟合出的方程所要求解出的未知数,本题中即是y的值
plot(t,y,'*r',t,h,'k')%前面是用已知数据描的点,后面的是用数据拟合做出的线,做在一起可以对比看效果 s=abs(y-h);%求误差的绝对值 s=sum(s); %求误差的绝对值之和 A=sum(abs(h));%求拟合的绝对值之和 F=s/A*100 %求相对误差
3次曲线拟合出的相对误差相对较小,所以我选择了三次拟合:拟合曲线图像如下
3130292827262524051015
2. Malthus人口指数增长模型 年 人口(亿) 年 人口(亿) 年 人口(亿) 1790 3.9 1870 38.6 1950 150.7 1800 5.3 1880 50.2 1960 179.3 1810 7.2 1890 62.9 1970 204.0 1820 9.6 1900 76.0 1980 226.5 1830 12.9 1910 92.0 1990 251.4 1840 17.1 1920 106.5 2000 281.4 1850 23.2 1930 123.2 1860 31.4 1940 131.7 用以上数据检验马尔萨斯人口指数增长模型,根据检验结果进一步讨论马尔萨斯人口模型的改进。 因为已知该区人口呈指数增长,所以用指数拟合,程序编写如下:
t= 1790:10:2000;
y=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4 281.4];
p=polyfit(t,log(y),1); %用一次多项式拟合y的对数 m=p(1) %计算指数参数值 y0=exp(p(2)) %计算函数系数
y1=y0.*exp(m.*t); %人口增长函数表达式 plot(t,y,'k+',t,y1,'b') 程序运行结果为:
m =
0.0202 y0 =
1.1565e-015
图形为:
450400350300250200150100500175018001850190019502000
3.价格预测
美国旧车价格的调查数据
xi 1 2615 2 1943 3 1494 4 1087 5 765 6 538 7 484 8 290 9 226 10 204 yi 分析用什么形式的曲线来拟合数据,并预测使用4、5年后的旧车平均价格大致为多少。 旧车价格呈非线性下降趋势,由于数据较少,可以做线性拟合: 首先编辑一个M文件,程序如下:
t=1:10;
y=[2615 1943 1494 1087 765 538 484 290 226 204]; A=polyfit(t,y,3) %A表示我所拟合出的方程的系数
y1=polyval(A,t); %表示拟合出的方程所要求解出的未知数,本题中即是y的值,这个算式表示拟合方程 plot(t,y,'*r',t,y1,'k')%前面是用已知数据描的点,后面的是用数据拟合做出的线,做在一起可以对比看效果
s=sum(abs(y-y1));%求误差的绝对值之和 k=sum(abs(y1));%求拟合的绝对值之和 F=s/k*100 %求相对误差
程序运行结果为:
A = %这个是拟合函数的系数 1.0e+003 *
-0.0027 0.0800 -0.8528 3.3801
F = %这是三次拟合函数的误差为百分之2.5365 2.5365
30002500200015001000500012345678910
根据拟合系数可以写出拟合函数为:y??2.7x?80x?852.8x?3380.1 再编辑一个C++程序即可求出4,5年后的旧车价格,程序如下: #include
int x1=4,x2=5;
32
double y1,y2;
y1=-2.7*x1*x1*x1+80*x1*x1-852.8*x1+3380.1;
y2=-2.7*x2*x2*x2+80*x2*x2-852.8*x2+3380.1; }
cout<<\cout<<\return 0;
4.用最小二乘法求一个形如y?a?bx的经验公式,数据如下:
2x y 19 19.0 25 32.3 31 49.0 38 73.3 44 98.8 首先编辑一个M文件,程序如下:
x=[19 25 31 38 44];
y=[19.0 32.3 49.0 73.3 98.8];
fun1=inline('c(1)+c(2)*x.^2','c','x'); %用inline函数确定曲线形式为y=a+b*x*x,c为参数,x为系数, c=lsqcurvefit(fun1,[0,0],x,y) %用lsqcurvefit函数求出待定参数 y1=c(1)+c(2)*x.^2; %拟合函数表达式值 plot(x,y,'k*',x,y1,'g')
程序运行结果为: c =
0.5937 0.0506
根据拟合系数可以写出拟合函数为:y=0.5937+0.0506*x*x
拟合曲线为:
10090807060504030201015202530354045