曲线拟合的数值计算方法实验

合集下载

曲线拟合问题的数值试验

曲线拟合问题的数值试验

曲线拟合问题的数值试验一、算法要求已知数据: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篇]

曲线拟合实验报告[优秀范文5篇]

曲线拟合实验报告[优秀范文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.。

数值计算方法 曲线拟合2 - 曲线拟合2

数值计算方法 曲线拟合2 - 曲线拟合2
v
曲 记 y ln g, a1 k, a2 ln(d / v)
线

则 y a1t a2

作线性最小二乘法拟合可得:
k 0.2347(1 / h), v 12(l)
D0 300, D 225.3, 3.9
参考答案
D0 300(mg), D 180(mg),
4(h)
课后实验课题


变换法方程结构
AT
ln a
Ab
AT
Z
例题分析
建立法方程
1
x1
1 x2
1
L L
1 x5
1M
x1 x2 M
lna
b
1 x1
1 x2
L L
1 x5
ln lMn
y1 y2
1 x5
ln y5

5 7.53 a 17.1059
线
化简法方程
7.53 11.5309b 26.0501
负面思考者
卖时间 找一份好工作 受人支配
做事情 重视学历 知识就是力量
20%的人身上集中了人类80%的智慧,他们一出生就鹤立鸡群。
【”二 ● 八“ 法 则】 意大利经济学家帕累托(1897)
20%
我要是怎么样怎么样做我就有钱 爱投资 有目标 问题中找答案 放眼长远 把握机会 计划未来 按成功的经验行事 重复做简单的事 明天的事今天做

求血药浓度随时间的变化规律 g(t) .
线 设计用药方案

问题:给药方式-快速静脉注射;

一室(中心室)模型;
血药浓度变化规律;
最小有效浓度和最大治疗浓度。
g(t) c0ekt
c0 , k为待定系数

数值计算方法实验报告5―温度分布的曲线拟合

数值计算方法实验报告5―温度分布的曲线拟合

数值计算方法实验报告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 的平方和达到最小,此时所求曲线称作在加权最小二乘意义下对数据的拟合曲线。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

曲线拟合的数值计算方法实验【摘要】实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。

曲线拟合(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]四个区间的插点。

相关文档
最新文档