科学计算 实习题三 曲线拟合的最小二乘法
实验3__曲线拟合的最小二乘法

《计算方法》实验报告学院:计算机学院专业:计算机科学与技术指导教师:JW-++1 爨莹班级学号:201207010229 姓名:图尔荪托合提实验三曲线拟合的最小二乘法1、实验目的:在科学研究与工程技术中,常常需要从一组测量数据出发,寻找变量的函数关系的近似表达式,使得逼近函数从总体上与已知函数的偏差按某种方法度量能达到最小而又不一定过全部的点。
这是工程中引入最小二曲线拟合法的出发点。
充分掌握:1.最小二乘法的基本原理;2.用多项式作最小二乘曲线拟合原理的基础上,通过编程实现一组实验数据的最小二乘拟合曲线。
2、实验要求:1) 认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;2) 编写上机实验程序,作好上机前的准备工作;3) 上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);4) 分析和解释计算结果;5) 按照要求书写实验报告;3、实验内容:1) 给定数据如下:x :0.15,0.4,0.6 ,1.01 ,1.5 ,2.2 ,2.4,2.7,2.9,3.5 ,3.8 ,4.4,4.6 ,5.1 ,6.6,7.6;y :4.4964,5.1284,5.6931 ,6.2884 ,7.0989 ,7.5507 ,7.5106,8.0756,7.8708,8.2403 ,8.5303 ,8.7394,8.9981 ,9.1450 ,9.5070,9.9115;试作出幂函数拟合数据。
2) 已知一组数据:x :0,0.1,0.2 ,0.3 ,0.4 ,0.5 ,0.6,0.7,0.8,0.9 ,1y :-0.447,1.978,3.28 ,6.16 ,7.08 ,7.34 ,7.66,9.56,9.48,9.30 ,11.2;试用最小二乘法求多项式函数,使与此组数据相拟合。
4、题目:曲线拟合的最小二乘法5、原理:从整体上考虑近似函数同所给数据点(i=o,1,…,m误差(i=o,1,…,m)的大小,常用的方法有以下三种:一是误差(i=0,1,…口绝对值的最大值,即误差向量的%—范数;二是误差绝对值的和,即误差向量r的1 —范数;三是误差平方和的算术平方根,即误差向量r的2—范数;前两种方法简单、自然,但不便于微分运算,后一种方法相当于考虑2—范数的平方,因此在曲线拟常采用误差平方和来度量误差(i=0,1,…,m)的整体大小.。
吉林大学数值计算方法 曲线拟合的最小二乘法

m
( j, k 0,1,
, m)
(k , f ) xik yi xij k (k 0,1,
i 1 i 1
, m)
于是正则(法)方程组为:
N N xi i 1 N x m i i 1
x
i 1 N
N
i
ห้องสมุดไป่ตู้
x
i 1
2 i
x
i 1
N
m 1 i
m xi i 1 N m 1 xi i 1 N 2m xi i 1 N
N yi i 1 a0 N a xi yi 1 i 1 an N x m y i i i 1
和最大误差):
法方程组
6 6 x i i 1
xi y i a i 1 i 1 6 6 2 b x x y i i i i 1 i 1
6 6
对应的代数方程组:
•2、利用最小二乘法原则上解决了最小二乘法意义下的 曲线拟合问题,但在实际问题的解决时,n往往很大, 法方程组往往是病态的,因而给求解带来了一定的困难, 为了解决这一问题,近年来,产生了一些新方法来克服 这一困难,利用正交函数(正交多项式)作多项式的拟 合。
•曲线拟合的最小二乘法的基本原理、具体的操作技巧; •利用最小二乘法作代数曲线(多项式函数:线性和抛物 型)的基本方法; •均方误差和最大偏差的计算; •了解加权最小二乘法和正交最小二乘法。
(0 , m ) a0 (0 , f ) (1 , m ) a1 (1 , f ) (**) (m , m ) an (m , f )
曲线拟合的最小二乘法讲解

实验三 函数逼近与曲线拟合一、问题的提出:函数逼近是指“对函数类A 中给定的函数)(x f ,记作A x f ∈)(,要求在另一类简的便于计算的函数类B 中求函数A x p ∈)(,使 )(x p 与)(x f 的误差在某中度量意义下最小”。
函数类A 通常是区间],[b a 上的连续函数,记作],[b a C ,称为连续函数空间,而函数类B 通常为n 次多项式,有理函数或分段低次多项式等,函数逼近是数值分析的基础。
主要内容有:(1)最佳一致逼近多项式(2)最佳平方逼近多项式(3)曲线拟合的最小二乘法二、实验要求:1、构造正交多项式;2、构造最佳一致逼近;3、构造最佳平方逼近多项式;4、构造最小二乘法进行曲线拟合;5、求出近似解析表达式,打印出逼近曲线与拟合曲线,且打印出其在数据点上的偏差;6、探讨新的方法比较结果。
三、实验目的和意义:1、学习并掌握正交多项式的MATLAB 编程;2、学习并掌握最佳一致逼近的MATLAB 实验及精度比较;3、学习并掌握最佳平方逼近多项式的MATLAB 实验及精度比较;4、掌握曲线拟合的最小二乘法;5、最小二乘法也可用于求解超定线形代数方程组;6、 探索拟合函数的选择与拟合精度之间的关系;四、 算法步骤:1、正交多项式序列的生成{n ϕ(x )}∞0:设n ϕ(x )是],[b a 上首项系数a ≠n 0的n 次多项式,)(x ρ为],[b a 上权函数,如果多项式序列{n ϕ(x )}∞0满足关系式⎩⎨⎧=>≠==⎰.,0,,0)()()()(),(k j A k j x d x x x kk j bak j ϕϕρϕϕ则称多项式序列{n ϕ(x )}∞0为在],[b a 上带权)(x ρ正交,称n ϕ(x )为],[b a 上带权)(x ρ 的n 次正交多项式。
1)输入函数)(x ρ和数据b a ,;2)分别求))(),(()),(,(x x x x j j j nϕϕϕ的内积; 3)按公式①)())(),(())(,()(,1)(10x x x x x x x x j n j j jj n nn ϕϕϕϕϕϕ∑-=-==计算)(x n ϕ,生成正交多项式;流程图:开始否是结束2、 最佳一致逼近多项式],[)(b a C x f ∈,若存在n n H x P ∈)(*使得n n E P f =∆),(*,则称)(*x P n 是)(x f 在],[b a 上的最佳一致逼近多项式或最小偏差逼近多项式,简称最佳逼近多项式。
实验三(最小二乘法)

实验三 最小二乘法
一.实验目的
了解最小二乘法的基本原理。
二.实验类型 设计型
三.实验学时 2学时
四.实验环境
1.硬件设备要求:
PC 及其联网环境; 2.软件设备要求:
MATLAB 。
五.实验原理及实验内容
最小二乘法原理:
已知数据对(,)(1,2,
,)j j x y j n =,求多项式0
()()m
i i i P x a x m n ==<∑,使得
2
0110(,,
,)n m
i m i j j j i a a a a x y ==⎛⎫
Φ=- ⎪⎝⎭
∑∑
为最小。
注意到此时()k k x x ϕ=,多项式系数01,,
,m a a a 满足下面的线性方程组:
100121111
2m m m
m m m m S S S a T S S S a T S S S a T ++⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪ ⎪⎪ ⎪
= ⎪⎪ ⎪ ⎪⎪ ⎪⎝⎭⎝⎭⎝⎭
其中
11
(0,1,2,
,2)
(0,1,2,
,)
n
k k j j n
k k j j j S x k m T y x k m ======∑∑
然后只要调用解线性方程组的函数程序即可。
实验内容:
例如:试用线形函数和二次多项式拟合如下数据:
并做出数据点和相应的拟合曲线图。
实验程序:
实验结果:
练习:已知实验数据如下:
x y和拟对表中数据作三次多项式拟合,给出拟合函数多项式的系数,并作出离散数据{,}
i i
合多项式的图形。
六.实验小结。
曲线拟合的最小二乘法实验

Lab04.曲线拟合的最小二乘法实验【实验目的和要求】1.让学生体验曲线拟合的最小二乘法,加深对曲线拟合的最小二乘法的理解;2.掌握函数ployfit和函数lsqcurvefit功能和使用方法,分别用这两个函数进行多项式拟合和非多项式拟合。
【实验内容】1.在Matlab命令窗口,用help命令查询函数polyfit和函数lsqcurvefit 功能和使用方法。
2.用多项式y=x3-6x2+5x-3,产生一组数据(xi,yi)(i=1,2,…,n),再在yi上添加随机干扰(可用rand产生(0,1)均匀分布随机数,或用randn产生N(0,1)均匀分布随机数),然后对xi和添加了随机干扰的yi用Matlab提供的函数ployfit用3次多项式拟合,将结果与原系数比较。
再作2或4次多项式拟合,分析所得结果。
3.用电压V=10伏的电池给电容器充电,电容器上t时刻的电压为,其中V0是电容器的初始电压,τ是充电常数。
对于下面的一组t,v数据,用Matlab提供的函数lsqcurvefit确定V0和τ。
t(秒) 0.5 1 2 3 4 5 7 9v(伏) 6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63 【实验仪器与软件】1.CPU主频在1GHz以上,内存在128Mb以上的PC;2.Matlab 6.0及以上版本。
实验讲评:实验成绩:评阅教师:200 年月日问题及算法分析:1、利用help命令,在MATLAB中查找polyfit和lsqcurvefit函数的用法。
2、在一组数据(xi,yi)(i=1,2,…,n)上,对yi上添加随机干扰,运用多项式拟合函数,对数据进行拟合(分别用2次,3次,4次拟合),分析拟合的效果。
3、根据t和V的关系画散点图,再根据给定的函数运用最小二乘拟合函数,确定其相应参数。
第一题:(1)>> help polyfitPOLYFIT Fit polynomial to data.P = POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) ofdegree N that fits the data Y best in a least-squares sense. P is arow vector of length N+1 containing the polynomial coefficients indescending powers, P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1).[P,S] = POLYFIT(X,Y,N) returns the polynomial coefficients P and astructure S for use with POLYVAL to obtain error estimates forpredictions. S contains fields for the triangular factor (R) from a QRdecomposition of the Vandermonde matrix of X, the degrees of freedom(df), and the norm of the residuals (normr). If the data Y are random,an estimate of the covariance matrix of P is(Rinv*Rinv')*normr^2/df,where Rinv is the inverse of R.[P,S,MU] = POLYFIT(X,Y,N) finds the coefficients of a polynomial inXHAT = (X-MU(1))/MU(2) where MU(1) = MEAN(X) and MU(2) = STD(X). Thiscentering and scaling transformation improves the numerical propertiesof both the polynomial and the fitting algorithm.Warning messages result if N is >= length(X), if X has repeated, ornearly repeated, points, or if X might need centering and scaling.Class support for inputs X,Y:float: double, singleSee also poly, polyval, roots.Reference page in Help browserdoc polyfit>>(2)>> help lsqcurvefitLSQCURVEFIT solves non-linear least squares problems.LSQCURVEFIT attempts to solve problems of the form:min sum {(FUN(X,XDATA)-YDATA).^2} where X, XDATA, YDATA and the valuesX returned by FUN can be vectors ormatrices.X=LSQCURVEFIT(FUN,X0,XDATA,YDATA) starts at X0 and finds coefficients Xto best fit the nonlinear functions in FUN to the data YDATA (in theleast-squares sense). FUN accepts inputs X and XDATA and returns avector (or matrix) of function values F, where F is the same size asYDATA, evaluated at X and XDATA. NOTE: FUN should returnFUN(X,XDATA)and not the sum-of-squares sum((FUN(X,XDATA)-YDATA).^2).((FUN(X,XDATA)-YDATA) is squared and summed implicitly in thealgorithm.)X=LSQCURVEFIT(FUN,X0,XDATA,YDATA,LB,UB) defines a set of lower andupper bounds on the design variables, X, so that the solution is in therange LB <= X <= UB. Use empty matrices for LB and UB if no boundsexist. Set LB(i) = -Inf if X(i) is unbounded below; set UB(i) = Inf ifX(i) is unbounded above.X=LSQCURVEFIT(FUN,X0,XDATA,YDATA,LB,UB,OPTIONS) minimizes with thedefault parameters replaced by values in the structure OPTIONS, anargument created with the OPTIMSET function. See OPTIMSET for details.Used options are Display, TolX, TolFun, DerivativeCheck, Diagnostics,FunValCheck, Jacobian, JacobMult, JacobPattern, LineSearchType,LevenbergMarquardt, MaxFunEvals, MaxIter, DiffMinChange andDiffMaxChange, LargeScale, MaxPCGIter, PrecondBandWidth, TolPCG,OutputFcn, and TypicalX. Use the Jacobian option to specify that FUNalso returns a second output argument J that is the Jacobian matrix atthe point X. If FUN returns a vector F of m components when X has length n, then J is an m-by-n matrix where J(i,j) is the partialderivative of F(i) with respect to x(j). (Note that the Jacobian J isthe transpose of the gradient of F.)[X,RESNORM]=LSQCURVEFIT(FUN,X0,XDATA,YDATA,...) returns the valueof thesquared 2-norm of the residual at X: sum {(FUN(X,XDATA)-YDATA).^2}.[X,RESNORM,RESIDUAL]=LSQCURVEFIT(FUN,X0,...) returns the value of residual,FUN(X,XDATA)-YDATA, at the solution X.[X,RESNORM,RESIDUAL,EXITFLAG]=LSQCURVEFIT(FUN,X0,XDATA,YDATA,...) returnsan EXITFLAG that describes the exit condition of LSQCURVEFIT. Possiblevalues of EXITFLAG and the corresponding exit conditions are1 LSQCURVEFIT converged to a solution X.2 Change in X smaller than the specified tolerance.3 Change in the residual smaller than the specified tolerance.4 Magnitude of search direction smaller than the specified tolerance.0 Maximum number of function evaluations or of iterations reached.-1 Algorithm terminated by the output function.-2 Bounds are inconsistent.-4 Line search cannot sufficiently decrease the residual alongthecurrent search direction.[X,RESNORM,RESIDUAL,EXITFLAG,OUTPUT]=LSQCURVEFIT(FUN,X0,XDATA,YDATA ,...)returns a structure OUTPUT with the number of iterations taken inOUTPUT.iterations, the number of function evaluations inOUTPUT.funcCount,the algorithm used in OUTPUT.algorithm, the number of CG iterations (ifused) in OUTPUT.cgiterations, the first-order optimality (if used)inOUTPUT.firstorderopt, and the exit message in OUTPUT.message.[X,RESNORM,RESIDUAL,EXITFLAG,OUTPUT,LAMBDA]=LSQCURVEFIT(FUN,X0,XDAT A,YDATA,...)returns the set of Lagrangian multipliers, LAMBDA, at the solution:LAMBDA.lower for LB and LAMBDA.upper for UB.[X,RESNORM,RESIDUAL,EXITFLAG,OUTPUT,LAMBDA,JACOBIAN]=LSQCURVEFIT(FU N,X0,XDATA,YDATA,...)returns the Jacobian of FUN at X.ExamplesFUN can be specified using @:xdata = [5;4;6]; % example xdataydata = 3*sin([5;4;6])+6; % example ydatax = lsqcurvefit(@myfun, [2 7], xdata, ydata)where myfun is a MATLAB function such as:function F = myfun(x,xdata)F = x(1)*sin(xdata)+x(2);FUN can also be an anonymous function:x = lsqcurvefit(@(x,xdata) x(1)*sin(xdata)+x(2),[2 7],xdata,ydata)If FUN is parameterized, you can use anonymous functions to capture theproblem-dependent parameters. Suppose you want to solve the curve-fittingproblem given in the function myfun, which is parameterized by its secondargument c. Here myfun is an M-file function such asfunction F = myfun(x,xdata,c)F = x(1)*exp(c*xdata)+x(2);To solve the curve-fitting problem for a specific value of c, first assignthe value to c. Then create a two-argument anonymous function that capturesthat value of c and calls myfun with three arguments. Finally, pass thisanonymous function to LSQCURVEFIT:xdata = [3; 1; 4]; % example xdataydata = 6*exp(-1.5*xdata)+3; % example ydatac = -1.5; % define parameterx = lsqcurvefit(@(x,xdata) myfun(x,xdata,c),[5;1],xdata,ydata) See also optimset, lsqnonlin, fsolve, @, inline.Reference page in Help browserdoc lsqcurvefit>>第二题:1 三次线性拟合clear allx=0:0.5:5;y=x.^3-6*x.^2+5*x-3;y1=y;for i=1:length(y)y1(i)=y1(i)+rand;enda=polyfit(x,y1,3);b=polyval(a,x);plot(x,y,'*',x,b),aa =1.0121 -6.1033 5.1933 -2.4782② 二次线性拟合clear allx=0:0.5:20;y=x.^3-6*x.^2+5*x-3;y1=y;for i=1:length(y)y1(i)=y1(i)+rand;enda=polyfit(x,y1,2);b=polyval(a,x);plot(x,y,'*',x,b),aa =23.9982 -232.0179 367.9756③ 四次线性拟合clear allx=0:0.5:20;y=x.^3-6*x.^2+5*x-3;y1=y;for j=1:length(y)y1(j)=y1(j)+rand;enda=polyfit(x,y1,4);b=polyval(a,x);plot(x,y,'*',x,b),aa =-0.0001 1.0038 -6.0561 5.2890 -2.8249 >>第三题:1 拟合曲线为:f(x)=定义函数:function f=fun(a,x)f=a(1)-(a(1)-a(2))*exp(-a(3)*x);主程序:clear allclcx=[0.5 1 2 3 4 5 7 9];y=[6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63];a0=[1 1 1];a=lsqcurvefit('fun',a0,x,y);y1=a(1)-(a(1)-a(2))*exp(-a(3)*x);plot(x,y,'r*',x,y1,'b')V1=a(2)tei=1/a(3)Optimization terminated: relative function value changing by less than OPTIONS.TolFun.。
曲线拟合的最小二乘法问题

s(x)= a0+ a1 x +… + an xn
为一个多项式。
m
m
此时 (k , j ) (xi )xk x j (xi )xk j
法方程为
m
i
i1
m
i x
i 1
m
i 1
i
x
n
i 1
m
i x
i 1
m
2
i x
i 1
2
2.5
例
电容器充电后电压达到100V,然后考试放电, 经检测得到时间t与电压 u的一组数据如下:
t 0 1 2 3 4 5 6 7 8 9 10 u 100 75 55 40 30 20 15 10 10 5 5
试建立电压u与时间t之间的函数关系,并测算 t=3.2时的电压u为多少?
散点图
100
80
60
40
20
2
4
6
8
10
可作形如:u=Beat 的经验公式。
数据
t u
U=lnu t^2 t*U
0 100
4.605 0 0
1 75
4.317 1
4.317
2 55
4.007 4
8.014
3 40
3.688 9
11.06
4 30
3.401 16
13.6
5 20
2.995 25
14.97
6 15
用曲线拟合的最小二乘法求形如y=beax的经验公式,并 用该公式估计x=1.4时的y= f (1.4)的近似值.
解:将y=beax变形,lny=lnb+ax 令Y = lny , a0= lnb,则 有线性关系: Y = a0 +ax ,准备数据:
数值分析曲线拟合的最小二乘法实验报告
数值分析曲线拟合的最小二乘法实验报告数值分析曲线拟合的最小二乘法实验报告篇一:数值分析设计曲线拟合的最小二乘法曲线拟合的最小二乘法一、目的和意义在科学实验的统计方法研究中,往往要从一组实验数据?xi,yi??i?0,1,2,?,m?中,寻找自变量x与因变量y之间的函数关系y?F?x?。
由于观测数据往往不准确,因此不要求y?F?x?经过所有点?xi,yi?,而只要求在给定点xi上误差而只要求所在所有给定点xi上的误差?i?F(xi)?yi ?i?0,1,2,?,m?按某种标准最小。
若记????0,?1,?2,?,?m?,就是要求向量?的范数如果用最大范数,计算上困难较大,通常采用欧式范数?最小。
2T 作为误差度量的标准。
F?x?的函数类型往往与实验的物理背景以及数据的实际分布有关,它一般含有某些待定参数。
如果F?x?是所有待定参数的线性函数,那么相应的问题称为线性最小二乘问题,否则称为非线性最小二乘问题。
最小二乘法还是实验数据参数估计的重要工具。
这是因为这种方法比其他方法更容易理解,即使在其他方法失效的情况下,用最小二乘法还能提供解答,而且从统计学的观点分析,用该方法求得各项估计具有最优统计特征,因此这一方法也是系统识别的重要基础。
线性最小二乘问题可以借助多元微分学知识通过求解法方程组得到解答。
用最小二乘法求拟合曲线时,首先要确定S?x?的形式。
这不单纯是数学问题,还与所研究问题的运动规律以及所得观测数据?xi,yi?有关;通常要从问题的运动规律以及给定数据描图,确定S?x?的形式,并通过实际计算选出较好的结果。
为了使问题的提法更有一般性,通常把最小二乘法中的? 22 都考虑为加权平方和22 ? ????xi???S?xi??f?xi??? i?0 m 2 这里??xi??0是?a,b?上的加权函数,它表示不同点?xi,f?xi?处的数据比重不同。
?二、计算方法在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量y与时间t的拟合曲线。
【免费下载】实验3 曲线拟合的最小二乘法
试作出幂函数拟合数据。
2) 已知一组数据:
x : 0,0.1,0.2 ,0.3 ,0.4 ,0.5 ,0.6,0.7,0.8,0.9 ,1
y
:
,7.66,9.56,9.48,9.30 ,11.2;
-0.447,1.978,3.28
试用最小二乘法求多项式函数,使与此组数据相拟合。 4、题目:
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
曲线拟合的最小二乘法
由 ln y ln a bx ,可以先做 y* a* bx
可以先做出 ln y 的一次线性拟合
例2 设一发射源强度公式为
观测数据如下
I
I
eat
0
ti 0.2 0.3 0.4 0.5 0.6 0.7 0.8 Ii 3.16 2.38 1.75 1.34 1.00 0.74 0.56
2.9611
a b
2.31254 0.0870912
(1)、y ax2 b
解:函数空间的基
x2 ,1 ,然后列出法方程
x2, x2 D 1, x2 D
1, x2 D
1,1D
a b
f
, f
x2 D
,1D
370
34
34
5
a b
3.5a1 1.9891 2.03a1 0.1858
aa1012.7.839
ea0 =5.64 a=-2.89
则 I=5.64e-2.89t
3.2.3 最小二乘法一般形式
span{0,1,n} 0 ,1,n 为线性无关的基函数
(x) a00 (x) ann (x)
i 1
n
( y, j ) ik xi j xi j=0,1,2,…,m i 1
则法方程组可写成以下形式
0 1
,0 ,0
m ,0
0 ,1 1,1
m ,1
第三章曲线拟合的最小二乘法
2
2
∂s =0 ∂a k
偏导数: 即:
m ∂s =∑ ∂a k i =1 n
k = (0,1,", n ) 即一阶导数为 0 的点。
∑ [a ϕ
k =0 k
k
′ ( xi ) − y i ](∑ a k ϕ k ( xi ) − y i ) = 0
(3.3.2)
( x ), ϕ 1 ( x )" ϕ n ( x ) 线性无关时,可以证明它存在唯一解
* * a0 = a0 , a 1 = a 1* , " , a n = a n
即
ϕ * ( x ) 就是所求的最小二乘解。
(x i ,
0
定理 1:对于给定的一组实验数据 在 函
0
y i ) , ( x i 互异;i=1,2,…,m),
y= y= ae
b t
③
(a>0,b<0)
④
为了在求取参数 a 和 b 时,避免求解一个非线性方程组,对上式两边取对数
ln y = ln a +
b t
6
此时若引入变量
y (2) = ln y, t (2) =
1 t
表 3-5
i
ti
yi
( 2)
1
1 ti
2 0.50000 1.85630
3 0.33333 2.07944
∑
解:过程如下: (1)先描绘坐标点. (2)确定拟合曲线形式:由(1)可知,六个点于一条直线附近.故可选用线性函数(直
4
线)
φ
来拟合这组实验数据.
可令
ϕ ( x ) = a + bx , a , b
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ln(y)=ln(a)+bx
令 y1=ln(y),a1=ln(a),得 y1=a1+bx 这一过程程序代码为
for(i=0;i<19;i++){ scanf("%lf",&y0[i]);
} for(j=0;j<19;j++){
e=(aeb-y1)2+(ae2b-y2)2+( ae3b-y3)2+…+( ae19b-y19)2
∂������
∂������
求出相应的方程组 f(a,b)=∂������ ,g(a,b)= ∂������,分别记为 f 与 g,再计算出法方
∂������ ∂������ ∂������ ∂������ 程组的各项偏导数∂������、∂������、∂������、∂������。分别记为 f1,f2,g1,g2。
程序代码为 a1=(s*p-t*m)/(p*p-m*q); a0=(s-p*a1)/m; b=a1; a=pow(e,a0);
4、 最后,按照题目要求求得这一组参数公式所对应的均方误差与最大偏差,这一过 程程序代码为 f=z=0; for(l=0;l<19;l++){ f=f+(y0[l]-a*pow(e,b*(x[l])))*(y0[l]-a*pow(e,b*(x[l]))); if(fabs((y0[l]-a*pow(e,b*(x[l]))))>z)z=fabs((y0[l]-a*pow(e,b*(x[l])))); } f0=sqrt(f);
printf("a=%lf,b=%lf\n 均方误差为%lf,最大偏差为%lf\n", a, b, f0, z); } 方法二、
#include<stdio.h> #include<math.h> int main(void) {
double a,b,e,m,f,f1,f2,g,g1,g2,c,d; double x[19],y[19]; int i,j;
f=f+2*(a*exp((i+1)*b)-y[i])*exp((i+1)*b); f1=f1+2*exp(2*(i+1)*b); f2=f2+4*(i+1)*a*exp(2*(i+1)*b)-2*(i+1)*y[i]*exp((i+1)*b); g=g+2*(a*exp((i+1)*b)-y[i])*(i+1)*a*exp((i+1)*b); g1=g1+4*(i+1)*a*exp(2*(i+1)*b)-2*(i+1)*y[i]*exp((i+1)*b); g2=g2+4*pow((i+1)*a,2)*exp(2*(i+1)*b)-2*pow((i+1),2)*a*y[i]*exp((i+1)*b); } c=f1*a+f2*b-f; d=g1*a+g2*b-g; b=(d-c*(g1/f1))/(g2-f2*(g1/f1)); a=(c-f2*b)/f1; 其中,j 为所需要的迭代次数。 6、 最后,根据得到的 a,b 的满意解,求出均方误差与最大偏差,这一过程程序代码 可参照方法一中的代码源程序。 三、 计算结果 1、
a1=(s*p-t*m)/(p*p-m*q); a0=(s-p*a1)/m; b=a1; a=pow(e,a0);
f=z=0; for(l=0;l<19;l++){
f=f+(y0[l]-a*pow(e,b*(x[l])))*(y0[l]-a*pow(e,b*(x[l]))); if(fabs((y0[l]-a*pow(e,b*(x[l]))))>z)z=fabs((y0[l]-a*pow(e,b*(x[l])))); } f0=sqrt(f);
科学计算上机实习题目三
------曲线拟合的最小二乘法
3120104128 杨超
一、 题目 某疾病发生率 y‰和年龄段 x(每五年为一段,例如 0~5 岁为第一段,6~10 岁为第二
段……)之间有形如 y=aebx 的关系。是根据观测得到的如下数据表,用最小二乘法
确定式中的参数 a 和 b,并计算相应的均方误差与最大偏差(注:本题应在方法应用 上需要经过一定努力,才能得到较理想结果)。
计算出 a,b 的值 (3)、以新得到的 a、b 的值为 a0,b0 带入(2)中公式进行迭代计算,直到得到 满意的解。计算过程的源程序为
scanf("%lf",&a); scanf("%lf",&b); f=f1=f2=g=g1=g2=0;
for(j=0;j<10;j++){ for(i=0;i<19;i++){
} c=f1*a+f2*b-f; d=g1*a+g2*b-g; b=(d-c*(g1/f1))/(g2-f2*(g1/f1)); a=(c-f2*b)/f1;
e=0; m=0; for(i=0;i<19;i++)
e=e+pow((a*exp((i+1)*b)-y[i]),2); for(i=0;i<18;i++){
y1[j]=log(y0[j]); x[j]=j+1; } y0 储存函数值,y1 储存变换后的值。 2、 此时可利用教材所给矩阵(4.61)进行计算,按照对应项构造系数矩阵,这一过程 程序代码为 m=19; p=q=s=t=0; for(k=0;k<19;k++){ p=p+x[k]; q=q+x[k]*x[k]; s=s+y1[k]; t=t+x[k]*y1[k]; } 3、 运用该矩阵解出我们所需要的 a1 与 b 的值,并变换 a 与 b 为原来的值,这一过程
(因偏导数方程过于繁琐,此处省略具体方程)。
接下来运用牛顿迭代法(弦割法)计算 a,b 的值。 (1)、先设定初始值 a0,b0; (2)、带入公式
f(a,b)=f(a0,b0)+f1(a0,b0)(a-a0)+f2(a0,b0)(b-b0)
g(a,b)=g(a0,b0)+g1(a0,b0)(a-a0)+g2(a0,b0)(b-b0)
可以看到,在选取合适的 a 与 b 的 值后,运用牛顿迭代法计算出的 a、b 估计值的精 确程度明显提高,可取数据 a=0.241187,b=0.308055(e=3.946625,m=5.234590)。 四、 结果说明 方法一中因存在计算机的舍入误差,对结果造成的影响较大;方法二的结果稍有改善, 不过因采取的牛顿迭代法,需要恰当的多次选取初值才有可能达到理想的目标。在我 看来,可以用第一种方法的值带入第二种方法进行适当的修正,如果达不到精度的要 求,再去寻找合适的初值。 五、 源程序 方法一、x1来自234
5
6
7
8
9
y 0.898 2.38 3.07 1.84 2.02 1.94 2.22 2.77 4,02
x 10 11 12 13 14 15 16 17 18 19
y 4.76 5.46 6.53 10.9 16.5 22.5 35.7 50.6 61.6 81.8
二、 方法简要(方法一为自主编制,方法二对网上的方法进行了参考)
printf("输入函数值"); for(i=0;i<19;i++){
scanf("%lf",&y0[i]); } for(j=0;j<19;j++){
y1[j]=log(y0[j]); x[j]=j+1; }
m=19; p=q=s=t=0; for(k=0;k<19;k++){
p=p+x[k]; q=q+x[k]*x[k]; s=s+y1[k]; t=t+x[k]*y1[k]; }
#include<stdio.h>
#include<math.h> double log(double x); main(void)
{ double x[19], y0[19], y1[19]; double p, q, m, s, t; double a0, a1, a, b, e=2.718282; double f, z, f0; int i, j, k, l;
if(pow((a*exp((i+1)*b)-y[i]),2)>m) m=pow((a*exp((i+1)*b)-y[i]),2);
} printf("a=%f b=%f 均方误差 e=%f 最大偏差 m=%f\n",a,b,e/19,sqrt(m)); } return 0;
}
printf("a=%lf,b=%lf\n 均方误差为%lf,最大偏差为%lf\n", a, b, f0, z); 注意,求均方误差与最大偏差要使用 y0 数组储存的函数值。 总体来说上述方法简便直观,但在计算数值时由于计算机存在舍入误差,可能会 对结果造成很大的影响。 5、 其次,我们可以不对方程进行变换,直接运用最小二乘法的定义,通过求解均方 误差方程的法方程组来确定式中 a、b 两个参数。这样会遇到一个很大的难题便是 非线性方程组的求解。参照网上给出的计算方法,我们采用弦割法(牛顿迭代法) 求解。 首先,设各结点的方差和为 e,有
for(i=0;i<19;i++) x[i]=i+1;