曲线拟合的数值计算方法实验
- 格式:docx
- 大小:102.94 KB
- 文档页数:31
曲线拟合问题的数值试验一、算法要求已知数据:x=5,y=1.OO29;x=1O,y=1.OO23;x=15,y=1.OOOO;x=2O,y=O.999O; x=25,y=O.9983; x=3O,y=O.9979; x=35,y=O.9978;x=4O,y=O.9981 x=45,y=O.9987 x=5O,y=O.9996;拟合多项式:P(X)=aO+a1x+a2x^2+•…+an x A n分别对n=2,3,4,5,6 进行数值计算,且根据各自偏差平方和分析拟合效果。
二、源代码及注释#include <stdio.h>#include <conio.h>#include <math.h>#include <process.h>#define N 1O//N 个点#define T 2 //T 次拟合#define W 1//权函数#define PRECISION O.OOOO1float pow_n(float a,int n){int i;if(n==O) return(1);float res=a;for(i=1;i<n;i++){ res*=a;// 自己相乘} return(res);// 返回 a 的平方}void mutiple(float a[][N],float b[][T+1],float c[][T+1]) {float res=O;int i,j,k;for(i=O;i<T+1;i++)for(j=O;j<T+1;j++){res=O;for(k=O;k<N;k++){res+=a[i][k]*b[k][j]; c[i][j]=res;// 返回ab 的内积} } } void matrix_trans(float a[][T+1],float b[][N]) { int i,j;for(i=0;i<N;i++){ for(j=0;j<T+1;j++){ b[j][i]=a[i][j];// 交换}}}void init(float x_y[][2],int n){int i;printf("请输入%d个已知点:\n",N);for(i=0;i<n;i++) { printf("(x%d y%d):",i,i);scanf("%f %f",&x_y[i][0],&x_y[i][1]);}}void get_A(float matrix_A[][T+1],float x_y[][2],int n) { int i,j; for(i=0;i<N;i++){ for(j=0;j<T+1;j++){matrix_A[i][j]=W*pow_n(x_y[i][0],j);// 获取输入矩阵}}}void print_array(float array[][T+1],int n){int i,j;for(i=0;i<n;i++) {for(j=0;j<T+1;j++){printf("%-g",array[i][j]);}printf("\n");}}void convert(float argu[][T+2],int n){int i,j,k,p,t;float rate,temp;for(i=1;i<n;i++){for(j=i;j<n;j++){ if(argu[i-1][i-1]==0){ for(p=i;p<n;p++){if(argu[p][i-1]!=0)break;}if(p==n){printf(" 方程组无解!\n");} for(t=0;t<n+1;t++){ temp=argu[i-1][t];argu[i-1][t]=argu[p][t]; argu[p][t]=temp;}} rate=argu[j][i-1]/argu[i-1][i-1]; for(k=i-1;k<n+1;k++){ argu[j][k]-=argu[i-1][k]*rate; if(fabs(argu[j][k])==PRECISION) argu[j][k]=0;}}}}void compute(float argu[][T+2],int n,float root[]) {float temp;for(i=n-1;i>=0;i--){ temp=argu[i][n];for(j=n-1;j>i;j--){temp-=argu[i][j]*root[j];}root[i]=temp/argu[i][i];}}void get_y(float trans_A[][N],float x_y[][2],float y[],int n){int i,j;float temp;for(i=0;i<n;i++){temp=0;for(j=0;j<N;j++){temp+=trans_A[i][j]*x_y[j][1];}y[i]=temp;}}void cons_formula(float coef_A[][T+1],float y[],float coef_form[][T+2]) {int i,j;for(i=0;i<T+1;i++){for(j=0;j<T+2;j++){if(j==T+1) coef_form[i][j]=y[i];elsecoef_form[i][j]=coef_A[i][j];}}}void print_root(float a[],int n){int i,j;printf("%d个点的%d次拟合的多项式系数为:\n",N,T);for(i=0;i<n;i++){printf("a[%d]=%g,",i+1,a[i]);}printf("\n");printf(" 拟合曲线方程为:\ny(x)=%g",a[0]);for(i=1;i<n;i++){printf(" + %g",a[i]);for(j=0;j<i;j++){printf("*X");}}printf("\n");}void process(){floatx_y[N][2],matrix_A[N][T+1],trans_A[T+1][N],coef_A[T+1][T+1],coef_formu[T+1][T+2 ], y[T+1],a[T+1];init(x_y,N);get_A(matrix_A,x_y,N);printf(" 矩阵 A 为:\n");print_array(matrix_A,N);matrix_trans(matrix_A,trans_A);mutiple(trans_A,matrix_A,coef_A);printf(" 法矩阵为:\n");print_array(coef_A,T+1);get_y(trans_A,x_y,y,T+1);cons_formula(coef_A,y,coef_formu);convert(coef_formu,T+1);compute(coef_formu,T+1,a);print_root(a,T+1);}void main(){ process();}三、调试:本程序在调试时,因为代码中的T声明是通过宏定义#define T 2,所以欲达到能对n=2,3,4,5,6切换的目的,还需程序员在代码中修改T的值四、计算结果如图:1.004d1.0021.001口099S0.93®0.957五、说明:本题用C++语言编程,用matlab作图,以此来使报告更加形象,直观。
一、课程设计题目: 对于函数 xex x f --=)(从00=x 开始,取步长1.0=h 的20个数据点,求五次最小二乘拟合多项式5522105)()()()(x x a x x a x x a a x P -++-+-+= 其中 ∑===1995.020i ix x 二、原理分析 (1)最小二乘法的提法当数据量大且由实验提供时,不宜要求近似曲线)(x y φ=严格地经过所有数据点),(i i y x ,亦即不应要求拟合函数)(x ϕ在i x 处的偏差(又称残差)i i i y x -=)(φδ(i=1,2,…,m)都严格的等于零,但是,为了使近似曲线能尽量反应所给数据点的变化趋势,要求偏差i δ适当的小还是必要的,达到这一目标的途径很多,例如,可以通过使最大偏差i δmax 最小来实现,也可以通过使偏差绝对值之和∑ii δ最小来实现……,考虑到计算方便等因素,通常用使得偏差平方和∑ii 2δ最小(成为最小二乘原则)来实现。
按最小二乘原则选择近似函数的方法称为最小二乘法。
用最小二乘法求近似函数的问题可以归结为:对于给定数据),(i i y x(i=1,2,…,m),要求在某个函数类Φ中寻求一个函数)(x *ϕ,使[][]21)(21*)()(min ∑∑=Φ∈=-=-mi iix mi iiy x y x ϕϕϕ(1-1) 其中)(x ϕ为函数类Φ中任意函数。
(1)确定函数类Φ,即确定)(x ϕ的形式。
这不是一个单纯的数学问题,还与其他领域的一些专业知识有关。
在数学上,通常的做法是将数据点),(i i y x 描绘在坐标纸上,然后根据这些点的分布情况来选择的)(x ϕ形式。
(2)球最小二乘法的解,即求满足条件(1-1)的近似函数)(x *ϕ。
(3)最小二乘法的实验原理 设)(x ϕ具有如下形式)(x ϕ=F),,,,10x a a a n ⋅⋅⋅( (1-2) 其中n<m, k a (k=0,1,…,n)是待定参数,求具有这种形式的最小二乘解的实质,就是要适当选择k a =*k a (k=0,1,…,n),使相应的函数 ),,,,()(**1*0*x a a a x n ⋅⋅⋅=ϕ (1-3) 满足条件(1-1),也就是说,点),,,(**1*0n a a a ⋅⋅⋅是多元函数 []211010),,,,),,,∑=-⋅⋅⋅=⋅⋅⋅mi i i n n y x a a a F a a a s ((的极小点,从而使**1*0,,,n a a a ⋅⋅⋅满足方程组0S=∂∂ka ,(k=0,1,…,n) (1-4) 因此,可以通过解上述方程组(称为法方程组)来求取*k a (k=0,1,…,n),以便获得最小二乘解。
基础实验五 数据拟合与曲线拟合一、实验目的对于某个变化过程中的相互依赖的变量,可建立适当的数学模型,用于分析、预报、决策或控制该过程。
对于两个变量可通过用一个一元函数去模拟这两个变量的取值,但用不同的方法可得到不同的模拟函数。
使用最小二乘法来进行数据拟合,用基本函数曲线及其变化模拟给定的曲线,理解拟合方法。
二、实验材料2.1 曲线拟合(1)初等函数包括基本初等函数与它们经过加减乘除复合等运算后所得到的函数的图形及其变换。
拟合函数为多项式情形理论上已经解决,称为拉格朗日插值多项式。
(2)光滑曲线的有关内容,包括分段函数的连续性、一阶可导性与高阶可导性。
(3)方程或方程组的求解,包括超越方程或方程组的近似解法,线性方程组的精确解。
2.2最小二乘法给定平面上一组点(i x ,i y )(n i ,,2,1 =)作曲线拟合有多种方法,其中最小二乘法是常用的一种。
最小二乘法的原理是:求)(x f ,使∑=-=n k k k y x f 12])([δ达到最小。
拟合时,选取一定的拟合函数形式,设拟合函数的基底函数为,)(,,)(,)(10x x x m ϕϕϕ拟合函数为,)()()()(1100x c x c x c x f m m ϕϕϕ+++=确定m c c c ,,,10 使方差δ达到极小,此时得到的)(x f 即为所求。
为使δ取到极值,将)(x f 的表达式代入,对δ求i c 的偏导数,令其等于零,得到1+m 方程组成的方程组,从中求解i c 。
当m =1时,取拟合函数bx a x f +=)(,此做法称为线性拟合,统计学上叫做线性回归。
此时,临界方程组为⎪⎩⎪⎨⎧=⎪⎭⎫ ⎝⎛+=⎪⎭⎫ ⎝⎛+∑∑∑∑∑=====n i i i n i i n i i n i i n i i y x b x x y b x na 112111, 从中解出a 与b ,有y x x l l x f xx xy +-=)()(,其中∑==n i i x n x 11 ,∑==n i i y n y 11 21)(x x l n i i xx -=∑=, ))((1y y x x l i ni i xy --=∑=。
曲线拟合实验报告[优秀范文5篇]第一篇:曲线拟合实验报告数值分析课程设计报告学生姓名学生学号所在班级指导教师一、课程设计名称函数逼近与曲线拟合二、课程设计目的及要求实验目的: ⑴学会用最小二乘法求拟合数据的多项式,并应用算法于实际问题。
⑵学会基本的矩阵运算,注意点乘与叉乘的区别。
实验要求: ⑴编写程序用最小二乘法求拟合数据的多项式,并求平方误差,做出离散函数与拟合函数的图形;⑵用MATLAB 的内部函数polyfit 求解上面最小二乘法曲线拟合多项式的系数及平方误差,并用MATLAB的内部函数plot作出其图形,并与(1)结果进行比较。
三、课程设计中的算法描述用最小二乘法多项式曲线拟合,根据给定的数据点,并不要求这条曲线精确的经过这些点,而就是拟合曲线无限逼近离散点所形成的数据曲线。
思路分析 : 从整体上考虑近似函数)(x p 同所给数据点)(i iy x , 误差i i iy x p r -=)(的大小,常用的方法有三种:一就是误差i i iy x p r -=)(绝对值的最大值im ir≤≤ 0max ,即误差向量的无穷范数;二就是误差绝对值的与∑=miir0,即误差向量的 1成绩评定范数;三就是误差平方与∑=miir02的算术平方根,即类似于误差向量的 2 范数。
前两种方法简单、自然,但不便于微分运算,后一种方法相当于考虑 2 范数的平方,此次采用第三种误差分析方案。
算法的具体推导过程: 1、设拟合多项式为:2、给点到这条曲线的距离之与,即偏差平方与:3、为了求得到符合条件的 a 的值,对等式右边求偏导数,因而我们得到了:4、将等式左边进行一次简化,然后应该可以得到下面的等式5、把这些等式表示成矩阵的形式,就可以得到下面的矩阵:⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∑∑∑∑∑∑∑∑∑∑∑=====+==+====niininiiknikinikinikinikiniiniinikiniiyyyaax x xx x xx x11i11012111111211 1an MMΛM O M MΛΛ 6.将这个范德蒙得矩阵化简后得到⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡n kkn nkkyyyaaax xx xx x M MΛM O M MΛΛ21102 21 1111 7、因为 Y A X = * ,那么 X Y A / = ,计算得到系数矩阵,同时就得到了拟合曲线。
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.。
数值计算方法实验报告5―温度分布的曲线拟合本报告是关于温度分布的曲线拟合的,望对大家有所帮助!!!数值计算方法实验报告标题:温度分布的曲线拟合1.实验描述:在科学技术工程和实验中,经常需要从大量的实验数据中寻找拟合曲线,最简单的是一维情形(一元函数),此时数据的形式为x和y坐标的有序对,如:(x1,y1),...,(xN,yN),这里的横坐标{x}是明确的。
数值计算方法的目的之一是求解一个将自变量与因变量联系起来的拟合函数。
求解拟合函数的方法有多种,常见的方法有:线性最小二乘拟合、多项式拟合(最小二乘抛物线拟合)、样条插值拟合(三次样条拟合)、三角多项式拟合、贝塞尔曲线拟合这五种方法。
本次实验分别利用上述五种方法对一组温度数据进行拟合,通过拟合的结果比较这五种方法的优缺点(主要考虑误差)。
2.实验内容:已知某地区一天的温度数据如下:时间,p.m***-**********午夜***-********-********-*****温度时间,a.m***-**********正午***-********-********-*****温度分别利用:线性最小二乘拟合、多项式拟合(最小二乘抛物线拟合)、样条插值拟合(三次样条拟合)、三角多项式拟合、贝塞尔曲线拟合这五种方法对这组温度数据进行拟合,通过拟合的结果比较这五种方法的优缺点。
3.实验原理及分析:本报告是关于温度分布的曲线拟合的,望对大家有所帮助!!!①线性最小二乘拟合法:设{(x,y)}有N个点,其中横坐标{x}是确定的。
最小二乘拟合曲线为:kkk=1kk=1y=Ax+B,其系数满足如下正规方程:(∑x)A+(∑xk)B=∑xkyk 2kNNNNNk=1k=1(∑xk)A+NB=∑yk k=1k=1N解得:A=N∑xk=1Nk=1Nkyk Nxy2k∑xkNxN2=∑(xNNkx)(yk y),B=y Axk∑(xk=1kx)2其中:x=∑xk=1N,y=∑yk=1N线性最小二乘法的本质是:多元函数(均方根误差函数)求极值问题。
曲线拟合的数值计算方法实验Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】曲线拟合的数值计算方法实验【摘要】实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。
曲线拟合(curve fitting)是指选择适当的曲线类型来拟合观测数据,并用拟合的分析两变量间的关系。
曲线直线化是曲线拟合的重要手段之一。
对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按原理求出变换后变量的,在实际工作中常利用此直线方程绘制资料的标准工作曲线,同时根据需要可将此直线方程还原为,实现对资料的曲线拟合。
常用的曲线拟合有最小二乘法拟合、幂函数拟合、对数函数拟合、线性插值、三次样条插值、端点约束。
关键词曲线拟合、最小二乘法拟合、幂函数拟合、对数函数拟合、线性插值、三次样条插值、端点约束一、实验目的1.掌握曲线拟合方式及其常用函数指数函数、幂函数、对数函数的拟合。
2.掌握最小二乘法、线性插值、三次样条插值、端点约束等。
3.掌握实现曲线拟合的编程技巧。
二、实验原理1.曲线拟合曲线拟合是平面上离散点组所表示的坐标之间的函数关系的一种数据处理方法。
用解析表达式逼近的一种方法。
在或社会活动中,通过实验或观测得到量x 与y 的一组数据对(X i ,Y i )(i=1,2,...m ),其中各X i 是彼此不同的 。
人们希望用一类与数据的背景材料规律相适应的解析表达式,y=f(x ,c )来反映量x 与y 之间的依赖关系,即在一定意义下“最佳”地逼近或拟合已知数据。
f(x ,c)常称作拟合模型 ,式中c=(c 1,c 2,…c n )是一些待定参数。
当c 在f 中出现时,称为线性模型,否则称为。
有许多衡量拟合优度的标准,最常用的一种做法是选择参数c 使得拟合模型与实际在各点的(或),c)-f (f y e k k k 的平方和达到最小,此时所求曲线称作在加权最小二乘意义下对数据的拟合曲线。
数值分析课程设计报告学生姓名学生学号所在班级指导教师一、课程设计名称函数逼近与曲线拟合二、课程设计目的及要求实验目的:⑴学会用最小二乘法求拟合数据的多项式,并应用算法于实际问题。
⑵学会基本的矩阵运算,注意点乘和叉乘的区别。
实验要求:⑴编写程序用最小二乘法求拟合数据的多项式,并求平方误差,做出离散函数( )和拟合函数的图形;⑵用MATLAB 的内部函数polyfit 求解上面最小二乘法曲线拟合多项式的系数及平方误差,并用MATLAB 的内部函数plot 作出其图形,并与(1)结果进行比较。
三、课程设计中的算法描述用最小二乘法多项式曲线拟合,根据给定的数据点,并不要求这条曲线精确的经过这些点,而是拟合曲线无限逼近离散点所形成的数据曲线。
思路分析:从整体上考虑近似函数)(x p 同所给数据点)(i i y x ,误差i i i y x p r -=)(的大小,常用的方法有三种:一是误差i i i y x p r -=)(绝对值的最大值i mi r ≤≤0max ,即误差向量的无穷范数;二是误差绝对值的和∑=mi i r 0,即误差向量的1范数;三是误差平方和∑=mi i r 02的算术平方根,即类似于误差向量的2范数。
前两种方法简单、自然,但不便于微分运算,后一种方法相当于考虑2范数的平方,此次采用第三种误差分析方案。
算法的具体推导过程: 1.设拟合多项式为:2.给点到这条曲线的距离之和,即偏差平方和:3.为了求得到符合条件的a 的值,对等式右边求 偏导数,因而我们得到了:4.将等式左边进行一次简化,然后应该可以得到下面的等式5.把这些等式表示成矩阵的形式,就可以得到下面的矩阵:⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∑∑∑∑∑∑∑∑∑∑∑=====+==+====n i i n i n i i k n i k i ni k ini k i n i k i ni in i ini k ini iy y y a a x xx x xxx x 11i 110121111112111a n6. 将这个范德蒙得矩阵化简后得到⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡n k k n n k k y y y a a a x x x x x x 21102211111 7.因为Y A X =*,那么X Y A /=,计算得到系数矩阵,同时就得到了拟合曲线。
数据拟合与曲线拟合实验报告【数据拟合与曲线拟合实验报告】1. 实验介绍数据拟合与曲线拟合是数学和统计学中非常重要的概念和方法。
在科学研究、工程技术和数据分析中,我们经常会遇到需要从一组数据中找到代表性曲线或函数的情况,而数据拟合和曲线拟合正是为了解决这一问题而存在的。
2. 数据拟合的基本原理数据拟合的基本思想是利用已知的一组数据点,通过某种数学模型或函数,找到一个能够较好地描述这组数据的曲线或函数。
常见的数据拟合方法包括最小二乘法、最小二乘多项式拟合、指数拟合等。
在进行数据拟合时,我们需要考虑拟合的精度、稳定性、可行性等因素。
3. 曲线拟合的实验步骤为了更好地理解数据拟合与曲线拟合的原理与方法,我们进行了一组曲线拟合的实验。
实验步骤如下:- 收集一组要进行拟合的数据点;- 选择合适的拟合函数或模型;- 利用最小二乘法或其他拟合方法,计算拟合曲线的参数;- 对拟合结果进行评估和分析;- 重复实验,比较不同的拟合方法和模型。
4. 数据拟合与曲线拟合的实验结果通过实验,我们掌握了数据拟合和曲线拟合的基本原理与方法。
在实验中,我们发现最小二乘法是一种简单而有效的数据拟合方法,能够较好地逼近实际数据点。
我们还尝试了多项式拟合、指数拟合等不同的拟合方法,发现不同的拟合方法对数据拟合的效果有着不同的影响。
5. 经验总结与个人观点通过这次实验,我们对数据拟合和曲线拟合有了更深入的理解。
数据拟合是科学研究和实践工作中不可或缺的一部分,它能够帮助我们从一堆杂乱的数据中提炼出有用的信息和规律。
曲线拟合的精度和稳定性对研究和实践的结果都有着重要的影响,因此在选择拟合方法时需要慎重考虑。
6. 总结在数据拟合与曲线拟合的实验中,我们深入探讨了数据拟合和曲线拟合的基本原理与方法,并通过实验实际操作,加深了对这一概念的理解。
数据拟合与曲线拟合的重要性不言而喻,它们在科学研究、工程技术和信息处理中发挥着重要的作用,对我们的日常学习和工作都具有重要的指导意义。
实验报告班级:计科1101 姓名:杨玲 学号:201126100130一、实验目的用最小二乘法求多项式拟合曲线。
二、实验方法1.首先用Matlab 绘制出拟合曲线,得到拟合函数。
2.用C++语言计算出系数,就是根据书上的公式,计算出各个值,然后再利用之前的顺序消元法求出各个系数值。
三、实验代码clearclcx=[1,3,4,5,6,7,8,9,10]y=[10,5,4,2,1,1,2,3,4]z=polyfit(x,y,2)plot(x,y,'r-*')hold on;f=poly2sym(z)ezplot(f,[0,10])0123456789102468101214x 4820124582082567/18014398509481984 x 2-...+16017/1190#include <iostream>#include <iomanip>using namespace std;void main(){int x[9]={1,3,4,5,6,7,8,9,10},y[9]={10,5,4,2,1,1,2,3,4}; double sum1=0;for(int p=0;p<9;p++){sum1+=x[p];}double sum2=0;for(int q=0;q<9;q++){sum2+=x[q]*x[q];}double sum3=0;for(int g=0;g<9;g++){sum3+=x[g]*x[g]*x[g];}double sum4=0;for(int w=0;w<9;w++){sum4+=x[w]*x[w]*x[w]*x[w];}double sum5=0;for(int r=0;r<9;r++){sum5+=y[r];}double sum6=0;for(int t=0;t<9;t++){sum6+=x[t]*y[t];}double sum7=0;for(int f=0;f<9;f++){sum7+=x[f]*x[f]*y[f];}//===================================================floata[3][4]={9,sum1,sum2,sum5,sum1,sum2,sum3,sum6,sum2,sum3,sum4,sum7},XX[3];//---------------------------------------for (int k=0;k<2;k++){for (int i=k+1;i<3;i++){float l=a[i][k]/a[k][k];for (int j=k+1;j<4;j++){a[i][j]=a[i][j]-l*a[k][j];}}} //消元for (int m=2;m>=0;m--){float sum=0;for (int j=m+1;j<3;j++){sum+=a[m][j]*XX[j];}XX[m]=(a[m][3]-sum)/a[m][m];} //计算//===========================================for (int h=0;h<3;h++){cout<<"XX["<<h+1<<"]="<<XX[h]<<endl;}cout<<"y="<<XX[2]<<"x^2"<<XX[1]<<"x+"<<XX[0]<<endl;cout<<"最低点位置:("<<(-1)*XX[1]/(2*XX[2])<<","<<(4*XX[0]*XX[2]-XX[1]*XX[1])/(4*XX[2])<<")"<< endl;}四、实验结果及其讨论实验结果有很小的误差,这是计算机本身的保留的小数位引起的五、总结通过本次实验,我开始会使用了Matlab软件,并且产生了浓厚的兴趣!另外,这次实验的代码,可能有点笨拙,不是很技巧,因为是直接计算出各个值在进行计算的,循环的次数很多,效率不是很高。
数值分析实验三:函数逼近与曲线拟合1曲线逼近方法的比较1.1问题描述曲线的拟合和插值,是逼近函数的基本方法,每种方法具有各自的特点和特定的适用范围,实际工作中合理选择方法是重要的。
考虑实验2.1中的著名问题。
下面的MATLAB程序给出了该函数的二次和三次拟合多项式。
x=-1:0.2:1;y=1./(1+25*x.*x);xx=-1:0.02:1;p2=polyfit(x,y,2);yy=polyval(p2,xx);plot(x,y,’o’,xx,yy);xlabel(‘x’);ylabel(‘y’);hold on;p3=polyfit(x,y,3);yy=polyval(p3,xx);plot(x,y,’o’,xx,yy);hold off;实验要求:(1) 将拟合的结果与拉格朗日插值及样条插值的结果比较。
(2) 归纳总结数值实验结果,试定性地说明函数逼近各种方法的适用范围,及实际应用中选择方法应注意的问题。
1.2算法设计对于曲线拟合,这里主要使用了多项式拟合,使用Matlab的polyfit函数,可以根据需要选用不同的拟合次数。
然后将拟合的结果和插值法进行比较即可。
本实验的算法比较简单,此处不再详述,可以参见给出的Matlab脚本文件。
1.3实验结果1.3.1多项式拟合1.3.1.1多项式拟合函数polyfit和拟合次数N的关系1 / 13首先使用polyfit函数对f(x)进行拟合。
为了便于和实验2.1相比较,这里采取相同的参数,即将拟合区间[-1,1]等分为10段,使用每一段区间端点作为拟合的数据点。
分别画出拟合多项式的次数N=2、3、4、6、8、10时,f(x)和多项式函数的图像,如图1所示。
Matlab 脚本文件为Experiment3_1_1.m。
Figure 1 多项式拟合与拟合次数N的关系可以看出,拟合次数N=2和3时,拟合效果很差。
增大拟合次数,N=4、6、8时,拟合效果有明显提高,但是N太大时,在区间两端附近会出现和高次拉格朗日插值函数类似的龙格现象。
数值分析实验之拟合拟合是数值分析中的重要内容之一,通过对已知数据进行拟合,可以得到未知数据的近似值,从而进行预测和分析。
本次实验的目的是通过拟合方法,对给定的数据集进行曲线拟合,并分析拟合结果的准确性和适用性。
实验步骤:1.数据收集:从已有的数据集中选择一组适当的数据用于拟合实验。
这些数据可能是实验数据、调查数据或者通过其他方法获得的数据。
为了方便分析,我们选择一个二次曲线的数据集作为示例。
2. 选择拟合模型:根据数据的性质和曲线的特点,选择合适的拟合模型。
在本次实验中,我们选择二次曲线模型进行拟合。
该模型可以表示为y = ax^2 + bx + c,其中a、b、c是待求的参数。
3.参数估计:通过最小二乘法等统计方法,对待求参数进行估计。
最小二乘法是常用的参数估计方法,它通过最小化残差的平方和来确定最佳参数估计值。
在本次实验中,可以利用MATLAB或者其他数值计算软件来实现最小二乘法。
4.拟合结果评估:将估计获得的参数代入拟合模型中,得到拟合曲线,并将其与原始数据进行对比。
在本次实验中,可以通过绘制原始数据和拟合曲线的图像,观察拟合效果的好坏。
5.拟合结果分析:分析拟合结果的准确性和适用性。
可以从图像上观察拟合曲线与原始数据的拟合程度,如果两者重合度较高,则拟合结果较为准确。
此外,还可以比较拟合曲线的误差和残差等指标,来评估拟合结果的质量。
实验结果分析:通过以上步骤,我们得到了二次曲线拟合的结果。
拟合曲线与原始数据的重合度较高,说明拟合效果较好。
此外,通过计算拟合曲线的误差和残差,可以得到更加准确的评估结果。
在本次实验中,我们选择了二次曲线模型进行拟合。
然而,在实际应用中,并不是所有的数据都适合二次曲线模型。
根据实际情况,选择合适的拟合模型非常重要。
如果选择不当,将会导致拟合结果的不准确和误导性。
总结:拟合是数值分析中一项重要的实验内容,通过对已知数据进行拟合,可以获得未知数据的近似值,并进行预测和分析。
实验三曲线拟合最小二乘法一、实验目的(1)掌握最小二乘法,(2)熟练掌握求函数的近似最小二乘拟合多项式(3)掌握数据拟合的思想,清楚数据拟合与插值法的区别及最小二乘法原理在数据拟合中的重要作用及最小二乘法解的求法。
二、实验(或算法)原理最小二乘法(又称最小平方法)是一种数学优化技术。
它通过最小化误差的平方和寻找数据的最佳函数匹配。
利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
最小二乘法还可用于曲线拟合。
其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
最小二乘法拟合:对给定数据点{(Xi,Yi)}(i=0,1,…,m),在取定的函数类Φ中,求p(x)∈Φ ,使误差的平方和E^2最小,E^2=∑[p(Xi)-Yi]^2。
从几何意义上讲,就是寻求与给定点 {(XiYi)}(i=0,1,…,m)的距离平方和为最小的曲线y=p(x)。
函数p(x)称为拟合函数或最小二乘解,求拟合函数p(x)的方法称为曲线拟合的最小二乘法。
三、实验步骤(1)根据算法事先写出相应程序。
(2)启动PC机,进入vc集成环境,输入代码。
(3)编译调试。
(4)调试通过,计算出正确结果。
四、代码#include<stdio.h>#include<math.h>#include<conio.h>float cf(int i,float f){float g=1.0;while(i--)g*=f;return g;}void ColPivot(float a[99][99], int n, float b[99][1],float x[99]){float max,m,temp;int k,q=0,i,j,I;for(k=0;k<n && q==0;k++){max=a[k][k];for(i=k+1;i<n;i++)if(fabs(max)<fabs(a[i][k])){max=a[i][k];I=i;}if(max==0)q=1;else{if(I!=k){temp=b[I][0]; b[I][0]=b[k][0];b[k][0]=temp;for(j=k;j<n;j++){temp=a[I][j]; a[I][j]=a[k][j];a[k][j]=temp;}}for(i=k+1;i<n;i++){m=a[i][k]/a[k][k];b[i][0]=b[i][0]-b[k][0]*m;for(j=0;j<n;j++)a[i][j]=a[i][j]-a[k][j]*m;}}}for(i=n-1;i>=0;i--){for(j=n-1;j>=i+1;j--)b[i][0]=b[i][0]-a[i][j]*x[j];x[i]=b[i][0]/a[i][i];}}void main(){float x[99],y[99],z[99],s[99][99],t[99][1]; int n,m,i,j,k;printf("n=");scanf("%d",&n);printf("m=");scanf("%d",&m);printf("y[%]=",n);for(i=0;i<n;i++)scanf("%f",&y[i]);printf("z[%d]=",n);for(i=0;i<n;i++)scanf("%f",&z[i]);for(i=0;i<=m;i++){for(j=0;j<=m;j++){s[i][j]=0.0;for(k=0;k<=n-1;k++)s[i][j]+=cf(i+j,y[k]);}t[i][0]=0.0;for(j=0;j<=n-1;j++)t[i][0]+=z[j]*cf(i,y[j]);}for(i=0;i<=m;i++)s[i][m+1]=t[i][0];for(i=0;i<=m;i++){for(j=0;j<=m+1;j++) printf("%f\t",s[i][j]);printf("\n");}ColPivot(s,m+1,t,x);printf("\n\n");for(i=0;i<=m;i++)printf("\na[%d]=%f",i,x[i]); printf("\n\n");}四、实验结果、实验体会通过实验的验证,可以更深刻地理解曲线拟合最小二乘法在数值计算的重要性,同时了解了其基本原理在计算机数值拟合的应用,更深刻地理解了曲线拟合最小二乘法的计算原理。
数值分析曲线拟合的最小二乘法实验报告数值分析曲线拟合的最小二乘法实验报告篇一:数值分析设计曲线拟合的最小二乘法曲线拟合的最小二乘法一、目的和意义在科学实验的统计方法研究中,往往要从一组实验数据?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的拟合曲线。
数值计算(分析)实验报告2南昌航空大学数学与信息科学学院实验报告课程名称:《数值计算方法》实验名称:曲线拟合实验类型:验证性■综合性□设计性□实验室名称:数学实验室班级学号: 09072113学生姓名:邢宪平任课教师(教师签名):成绩:一、实验目的实验目的:实验目的:了解函数逼近与曲线拟合的基本原理,并且运用MATLAB 软件进行实践操作。
二、实验原理、程序框图、程序代码等 实验题目:题目1:试分别用抛物线2y a bx cx =++和指数曲线bxy ae =拟合下列数据并比较两个拟合函数的优劣。
题目2:已知实验数据如下:试用形如2y a bx =+的抛物线进行最小二乘拟合。
实验原理:1、逼近方式 假设()[,]f x C a b ∈,2{1,,,...,}n nHspan x x x =,()nnP x H ∈,称(,)|||||()()|max n n n a x bf P F P f x P x ≤≤=-=-V 为()f x 与()|nP x 在[,]a b 上的偏差。
若存在*()nnP x H ∈,使得**(,)|||||()()|max inf n nn nn P H a x bf P f Pf x P x ∞∈≤≤=-=-V 则称*()nP x 是()f x 在[,]a b 上的最佳一致逼近多项式。
假设()[,]f x C a b ∈及[,]C a b 的一个子集01{(),(),,...()}nspan x x x ϕ=ϕϕϕ,若存在*()S x ϕ∈,使*22222()()||()()||||()()||()[()()]min min bS x S x af x S x f x S x x f x S x dxϕϕρ∈∈-=-=-⎰则称*()S x 是()f x 在子集[,]C a b ϕ⊂中的最佳平方逼近数。
2、曲线拟合上述函数的最佳平方逼近法中,若()f x 是以一组离散点集的形式给出的,即给出了函数()f x 在一些离散点上的值{(,),0,1,...,}iix y i m =,则该方法就是所说的曲线拟合。
曲线拟合的数值计算方法实验【摘要】实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。
曲线拟合(curve fitting )是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。
曲线直线化是曲线拟合的重要手段之一。
对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按最小二乘法原理求出变换后变量的直线方程,在实际工作中常利用此直线方程绘制资料的标准工作曲线,同时根据需要可将此直线方程还原为曲线方程,实现对资料的曲线拟合。
常用的曲线拟合有最小二乘法拟合、幕函数拟合、对数函数拟合、线性插值、三次样条插值、端点约束。
关键词曲线拟合、最小二乘法拟合、幕函数拟合、对数函数拟合、线性插值、三次样条插值、端点约束一、实验目的1•掌握曲线拟合方式及其常用函数指数函数、幕函数、对数函数的拟合2. 掌握最小二乘法、线性插值、三次样条插值、端点约束等。
3. 掌握实现曲线拟合的编程技巧。
、实验原理1•曲线拟合曲线拟合是平面上离散点组所表示的坐标之间的函数关系的一种数据处理方法。
用解析表达式逼近离散数据的一种方法。
在科学实验或社会活动中,通过实验或观测得到量x与y的一组数据对(X,Y i)(i=1,2,...m),其中各X是彼此不同的。
人们希望用一类与数据的背景材料规律相适应的解析表达式,y=f(x,c)来反映量x与y之间的依赖关系,即在一定意义下最佳”地逼近或拟合已知数据。
f(X,C)常称作拟合模型,式中C=(C i,C2,…C n)是一些待定参数。
当c在f 中线性出现时,称为线性模型,否则称为非线性模型。
有许多衡量拟合优度的标准,最常用的一种做法是选择参数C使得拟合模型与实际观测值在各点的残差(或离差)e k y k-f f k,C)的加权平方和达到最小,此时所求曲线称作在加权最小二乘意义下对数据的拟合曲线。
有许多求解拟合曲线的成功方法,对于线性模型一般通过建立和求解方程组来确定参数,从而求得拟合曲线。
至于非线性模型,则要借助求解非线性方程组或用最优化方法求得所需参数才能得到拟合曲线,有时称之为非线性最小二乘拟合。
曲线拟合:贝塞尔曲线与路径转化时的误差。
值越大,误差越大;值越小,越精确。
2.最小二乘法拟合:最小二乘法(又称最小平方法)是一种数学优化技术。
它通过最小化误差的平方和寻找数据的最佳函数匹配。
利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
最小二乘法还可用于曲线拟合。
其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
函数曲线为:y=Ax+B其中系数满足下列的正规方程:N N Nx k A XY kk B X kk 1k 1k 1N NX k A NB y kk 1k 13.幕函数拟合:函数曲线为:设X k,y k N勺有N个点,其中横坐标是确定的。
最小二乘幕函数拟合曲线的系数A为:M 2M、A ( X k yJ/( X k )4. 对数函数拟合:对数函数(lograrithmic function )的标准式形式为Y a bl nX(X 0)b>0时,丫随X增大而增大,先快后慢;b<0时,丫随X增大而减少,先快后慢,见图12.4(c)、(d)。
当以丫和lnX绘制的散点图呈直线趋势时,可考虑采用对数函数描述丫与X之间的非线性关系,式中的b和a分别为斜率和截距。
更一般的对数函数Y=a+bl n(X+k)式中k为一常量,往往未知。
(a) lnY=l na+bX(b) lnY=l na-bX(c) Y=a+blnX(d) Y=a-blnX5. 线性插值:在代数插值中,为了提高插值多项式对函数的逼近程度一般是增加节点的个数,即提高多项式的次数,但这样做往往不能达到预想的效果。
如下图所示:f(x) =1 / (1 + x2)如果在区间[-5,5]上取7个等距节点x=5*(k/3-1) (k=0,1,2,...,6),由lagrange插值公式可得到f(x)的次L7(x)。
如图所示:L7(x)仅在区间的中部能较好的逼近函数f(x),在其它部位差异较大,而且越接近端点,逼近效果越差。
可以证明,当节点无限加密时,Ln(x)也只能在很小的围收敛,这一现象称为Runge现象。
它表明通过增加节点来提高逼近程度是不适宜的,因而不采用高次多项式插值。
如果我们把以上的点用直线连接起来,显然比L7(x)要更逼近f(x)。
这就是分段线性插值。
而在实际应用常采用分段低次插值来提高近似程度,比如可用分段线性插值或分段三次埃尔米特插值来逼近已知函数,但它们的总体光滑性较差。
为了克服这一缺点,一种全局化的分段插值方法一一三次样条插值成为比较理想的工具。
6•三次样条插值:设x k, y k: o有N+1个点,其中a x0X| x2... x N b。
如果存在N个三次多项式S k(x),系数为S k;0,S k;1,S k;2,S k;3满足如下性质:S(x) S k(x) S k,o S k,i(X X k) S k,2(x X k)2S k,3(x X k)3X [X k,X k 1], k 0,1,....,N1S(X k) y k k0,1,....NS(x k 1) S k 1 (x k 1)k0,1,....N2S' (x k 1) S'k 1 (x k 1 )k0,1,....N2S'。
-) S''k1(X kJ k0,1,....N2则成函数S(x)为三次样条函数。
7.端点约束:紧压样条:存在唯一的三次样条曲线,其一阶导数的边界条件是:S'(a) d o,S'(b) d Nnatural样条:存在唯一的三次样条曲线,它的自由边界条件是:S''(a) 0,S''(b) 0外推样条:存在唯一的三次样条曲线,其过对点x1和x2进行外推得到S a,同时通过对点X(n-1)和X(N-2)进行外推得到S b。
端点曲率调整:存在唯一的三次样条曲线,其中二阶导数的边界条件S a和S b是确定的。
抛物线终结样条:存在唯一的三次样条曲线,其中二阶在区间[X o,X i]S ( x) 0,而在[Xn-1,X n]S ( x) 0。
三、实验容1. P202 1胡克定律指出F=kx,其中F是拉伸弹簧的拉力(单位为盎司),x为拉伸的长度(单位为英寸)。
根据下列试验数据,求解拉伸常量k的近似值。
2. P215 1洛杉矶(美国城市)郊区11月8日的温度记录入下表所示,其中共有 24 个数据点。
(a )根据例5.5中的处理过程(使用fmins 命令),对给定的数据求解最小 二乘曲线f (x ) Acos (Bx ) Csin (Dx ) E 。
(b ) 求 E 2(f )。
(c ) 在同一坐标系下画出这些点集和(a )得出的最小二乘曲线。
(b)(a)3. P229 1一个轿车在时间T k时经过的距离d k,如下表所示。
使用程序5.3,并根据阶导数边界条件S'(0) 0,S'(8) 98,求这些数据的三次紧压样条插值。
4. P238 5美国洛杉矶郊区11月9日的温度(华氏温度)如表5.10所示。
采用24小时制。
(a)求三角多项式T7 (x)(b)在同一坐标系下,画出图T7 (x)和24个数据点。
(c)使用本地的温度情况重新求解问题(a)和问题(b)。
5. P246 1编写Matlab程序,生成并绘制组合贝塞尔曲线。
利用该程序生成和绘制过3 个控制点集{( 0,0),( 1,2),(1,1),( 3,0) },{(3,0),(4, -1),(5,-2 ),( 6,1),( 7,0) }, {( 7,0) ,(4,-3),(2,-1),(0,0)}的贝塞尔曲线。
四、实验结果及分析1. P202 1实验描述:由题意可知,此题需要用最小二乘法进行计算,因为已知函数的5个插点并且知道它们的x,y的值。
且函数的表达式为F=kx ,所以只需用方程中N N(X k)A y k便可计算出k的数值。
k 1 k 1定义一个动态数组a ,用来依次存取x和y的插值。
其中x,y的插值通过键盘手动输入并赋予给a中的元素。
然后通过相应的求和和基本运算便可以得到相应插值下的最小二乘法的函数表达式。
(其中k 保留小数点后4 位)具体函数运行效果如下:(a)请在此输入x的各插值0.2 0.4 0.6 0.8 1.0请在此输入y 的各插值3.6 7.3 10.9 14.5 8.2此函数的最小二乘法曲线表达式为Y=14.8333*x请按任意键继续。
(b)请在此输入x的各插值0.2 0.4 0.6 0.8 1.0请在此输入y 的各插值5.3 10.6 15.9 21.2 26.4此函数的最小二乘法曲线表达式为Y=26.4667*x请按任意键继续。
结果分析:易得,最小二乘法多项式计算可以很好的做出较为精确的最小二乘法拟合曲线,并且程序通用性高,只要输入相应的插值便可以计算出结果,结果系数的小数点有效位同时也可以自己确定。
2. P215 1实验描述:给出的最小二乘曲线表达式为:f (x) A cos(Bx) C sin( Dx ) E其中变量有5 个,而给出的数据点有24 个,在C 语言中可以用牛顿- 拉夫森算法迭代计算分别得出5个变量的值,但是方法繁琐,且迭代计算量庞大,因此这里采用Matlab 进行相关的计算,调用fminsearch 函数,求得当5 个参量都为1 附近时候多项式的最小值,此时便可求出此5 个参变量的值.然后继续通过Matlab, 将得到的公式以及各点,用plot 函数,便可以求得。
实验结果:运行matlab 结果如下:>> fminsearch('fiveOne',[1 1 1 1 1]) ans =15.7225 1.3717 15.5359 1.2768 60.3579此时的所求值便为函数的待定系数。
所以可得最小二乘曲线的表达式为:f (x) 15.7225cos(1.3717x) 15.5359sin(1.2768) 60.3579然后进行相应的绘制图形便可以求出所要求出的结果。
结果分析:通过最小二乘法多项式同样可以绘制出三角函数的曲线。
并且程序通用性高,只要输入相应的插值便可以计算出结果,结果系数的小数点有效位同时也可以自己确定。
3. P229 1实验描述:由题意可知,由于这里涉及到了样条线的运算,计算较为复杂。
且要涉及到画图的部分,所以此处采用matlab 计算较为方便快捷。
而书本上给出了一个用来计算三次紧压样条曲线的可调用函数,现在将其引用,并根据已知点得出相应的曲线实验结果:代入后得出的结果如下所示:>> X=[0 2 4 6 8];>> Y=[0 40 160 300 480];>> S=csfit(X,Y,0,98)S =0.81258.375000-2.437513.250043.250040.00001.4375-1.375067.0000160.0000-0.81257.250078.7500300.0000由结果可知此插值为在区间[0,8]中有三个分别戈U分了[0,2],[2,4],[4,6],[6,8]四个区间的插点。