曲线拟合 曲率计算麻烦高手帮忙做下曲线拟合,然后计算下最大和最小曲率,0 32-1 33-2 34-3 36-4 37-5 51-6 59-7 67-8 94-9 133-10 210-11 340-12 590-13 940-14 1420-15 2140-16 3400-17 5100-18 7400-19 10900-20 17000-21 25300-22 36
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 10:08:04
曲线拟合 曲率计算麻烦高手帮忙做下曲线拟合,然后计算下最大和最小曲率,0 32-1 33-2 34-3 36-4 37-5 51-6 59-7 67-8 94-9 133-10 210-11 340-12 590-13 940-14 1420-15 2140-16 3400-17 5100-18 7400-19 10900-20 17000-21 25300-22 36
曲线拟合 曲率计算
麻烦高手帮忙做下曲线拟合,然后计算下最大和最小曲率,
0 32
-1 33
-2 34
-3 36
-4 37
-5 51
-6 59
-7 67
-8 94
-9 133
-10 210
-11 340
-12 590
-13 940
-14 1420
-15 2140
-16 3400
-17 5100
-18 7400
-19 10900
-20 17000
-21 25300
-22 36600
-23 53000
-24 76000
-25 126000
-26 175000
-27 235000
-28 340000
-29 490000
-30 830000
-31 1090000
-32 1800000
-33 2300000
那最大和最小曲率貌似不在那吧!平面曲线的曲率就是针对曲线上某个点的切线方向角对弧长的转动率,通过微分来定义,表明曲线偏离直线的程度。曲率越大,表示曲线的弯曲程度越大。那里好像不是弯曲程度最大的点吧!
曲线拟合 曲率计算麻烦高手帮忙做下曲线拟合,然后计算下最大和最小曲率,0 32-1 33-2 34-3 36-4 37-5 51-6 59-7 67-8 94-9 133-10 210-11 340-12 590-13 940-14 1420-15 2140-16 3400-17 5100-18 7400-19 10900-20 17000-21 25300-22 36
由于曲线比较诡异所以,这里采用三次插值的方法来做,这样可以是曲线比较平滑,三次插值是分段插值,使得曲线平滑,如果使用取对数后在进行最小二乘法来做的话那么得到的误差将会是十分大,
我是用MATLAB的曲线拟合工具箱来做的,结果只有用三次样条插值的方法拟合的曲线才比较令人满意,由于曲线拟合有多种理论,所以选择好的拟合方法很重要
通过拟合后的曲线,并进行一二次导数后,得到的最大曲率值为10.02334723在点x=-3.5570处,最小曲率为0在点x=-1处
补充下:
由于题目中给定的问题中可知,x ,y 之间的函数表达式是不知道的,也即是说x,y 之间可能有一个函数关系式,也可能是有一个分段函数的关系式,或者根本上就没有函数关系式,那么楼下所作的取对数后在进行最小二乘法拟合,那么说明楼下已经承认了x,y之间有一个指数函数的关系,这种做法我认为是不可取的,除非提问者已经说明了存在这个关系式,(其实我们知道,最小二乘法的原理就是知道了函数关系式,才来进行系数的拟合的,求出系数来)而且通过楼下的拟合可以看出,有大多数点没有被通过,数据没有被充分利用(在这种只有数据的情况下,数据就是我们唯一知道的信息,所以我们要充分利用),误差较大,而且由于x,y之间的数量及较大,取对数后减小了这种差别,在还原后那么误差就会进一步放大;因此在不知道x,y 之间的确切的函数关系式那么,用三次插值是比较好的,应为这有效利用了数据信息,并且图像时光滑的,这个满足数据所反应的信息,以及其变化趋势,正应为这样才能求出比较精确的曲率值
关于楼下所说的计算所取得最大曲率值和我的值不一样,我不知道楼主是怎么算的,我先说下我是怎么算的,根据分段插值得到多个分段的三次函数,然后用这些函数计算在相关段内等间距的离散点的一二次导数数值,这样可以得到以个关于曲率k的数组,找出这组数中的最大最小值,一二次导数是MATLAB计算出来的,所以不可能会错,最大值最小值当然也不会错.关于到底是使用什么方法来做拟合或是插值,我想我在上面已经说得够清楚了,因此不在此赘述!
作者说最大最小曲率值在图上貌似不再那点,我想说,由于想x,y的值相差太大,y的坐标刻度经过了缩放,x,y的坐标刻度不再是等距的了,因此图上一般是看不出来的!
还有我想楼下提醒下,就题论题,你不要扯得太远了,如果是那样的话这道题就知道一组数据没有任何其他条件,要你求曲率,按你的说法,什么精度,什么点可能存在的误差.,这里没有那么多条件,是不是你就不能做啦,我想说当然不是,好了.
为了更清楚地说明问题,把回答做了更新,增加了解释部分。 数据点用(x_i, y_i)表示, 拟合曲线方程为: y=e^(0.002707959454*x^2-0.2852803573*x+2.666852328);(-33<= x <=0) e为自然对数的底,e=2.718281828459045……。 如果限定x的范围是[-33, 0],那么,拟合出来, 最小曲率 在x=-33处取得(曲率半径最大),为1.946756485*10^(-13); 最大曲率 在x=0处取得(曲率半径最小),为0.01654934877。 根据问题的要求,这里计算出来的是曲率而非曲率半径。 由于所用的拟合曲线不同,得出的结论会稍有差异,不过差别不大,数量级应该会一致。 但是,如果所用的方法不同,并且做出的假设不一样,那么,结果可能会差别较大。 这里基于如下假定和考虑: 1、这些数据都是测量数据而非计算数据,换言之,承认这些数据存在误差。如果是计算数据,那么,可以直接计算曲率,而不用算出那么多组数据出来。从你给出的数据看,y值中各个数据不为0的数字大多只有两位,少数有3位,很多数据后面有很多个零,由此可以推断,实际的有效数字至多只有3位,误差应该在百分之几只有——这也是很普遍的情况,仪器仪表测量出来的数据,不可能那么多数据都有很多个0在后面,而且,目前,除了光电测量仪器测量时间的有效数字会很多——很准确以外(时间是目前能够测量最准确的物理量),绝大多数常用的数字测量仪表都只有三位或三位半(四位数字的测量仪表价格已经很昂贵了——不要误把三位半的数字仪表当成四位),指针式仪表的有效数字不会更多。提问者的最后一个数据“2300000”,如果按照正常的判断有效数字的方法,有七位有效数字,这不太可能——除非是重大科研项目,否则不会用那么准确的测量仪器(那样的话,这些数据都是保密的,提问者不可能带出来)。于是可以推知,要么是测量数据时记录不规范(不知道用科学计数法准确记录有效数字位数),要么是把录入到excell中的数据复制过来(已经看不出有效数字的位数了)。这样的话,后面的数据的绝大误差非常大,2300000的误差至少应该有5000,比起前面几个数据(30多),大了150多倍。如果不加处理,直接拟合的话,把他们的误差都看成一样,是不合适的。所以,这里也不是直接对数据点(x_i,y_i)用最下二乘法做拟合,而是对(x_i, ln y_i)用最下二乘法做拟合,(后来想一想,对(x_i, lg y_i)拟合可能会更好一些)。 2、只考虑有数据的范围,即x在-33到0之间的情况,此范围之外没有测量数据,不便计算(即使计算出来也不准)。(拟合出来的结果是曲率随着x的减小不断减小——这里认为从0到-33是在减小而不是最大,那么如果不限定范围,最大值和最小值是不存在的) 3、根据数据的特点,拟合曲线是一条整体的曲线,而不是分段曲线。做出x~ln x的曲线(如附图一所示)可以看出,除了开始几个点(|x|较小时)之外,其余的数据点几乎都在一条直线上。如果是人工做图,基本上都会通过直线拟合该曲线,舍去前面几个数据点。但是,直线拟合的话,在|x|较小时会产生较大的误差,见附图四),在工程上,常常都用二次曲线拟合(结果见附图二)。所以,这里并没有单纯地用对数曲线拟合,而是用e^(a*x^2+b*x+c)的曲线拟合。如果要分段拟合,常常用样条曲线或是NURBS曲线拟合(工程上很少直接用三次曲线拟合,而是用样条曲线拟合,可以理解为在三次曲线分段拟合的基础上做了一点改进),计算量大很多。结果可能会差别大一点。从提问者给出的数据曲线来看,这些数据点连接起来并不光滑(除个别点以外,大致是光滑的),说明误差肯定是存在的。如果分段拟合,曲线严格通过每一个数据点(网友 ha_2010_ha的做法),那样,拟合曲线的每一段都只依赖于附近几个数据点,而与其它数据点无关(这是样条曲线的性质),这样,如果局部几个数据都有误差,会导致这附近的曲线都受此误差的影响,导致结果不准确(因为不能充分利用数据)——另一方面,避免了y值很大的点对y值很小的点的影响,这也是一个好处了。如果可以确保所有数据都非常准确,误差很小,且各数据的数量级一致,往往会用样条曲线(三次样条曲线最常用)或是NURBS曲线(一般认为NURBS曲线比普通样条曲线更好一点)(特别是有很多“弯曲”的曲线,不适宜用一个函数整体来拟合),那么只要在AutoCAD上把这些点画出,用“Spline”拟合一下就可以了,曲线都严格通过每一个数据点,但是会发现,拟合出来的曲线有很多个“弯”,不知道这是不是提问者想要的结果(有些时候,特别是化学上,对这种“与众不同”的点很感兴趣)。只是在AutoCAD上拟合时,看不出曲线的表达式,计算曲率时麻烦一些。本人对Matlab不熟悉,不知道那里是否有样条曲线和NURBS曲线能够(感觉上应该有此功能)。 4、基于假定1,拟合曲线不一定会通过每一个数据点,而是通过最小二乘法,使得处理后的各个数据点(x, ln y)与拟合曲线的距离之平方和最小。 5、另外一位网友 ha_2010_ha给出了另外的拟合方式,是基于数据都很准确的假定下做出的(曲线过每一个拟合点),与此处计算的结果差别较大。这不是方法错误,而是基于不同的假定得出的结论不同而已。 6、如果需要更精确的结果,可以用高次曲线来拟合(x, lg y),从图五和图六可以看出,四次和五次曲线上的点与原来的数据点拟合得非常好。 以下是各种拟合方式下的曲率最值,从中可以看出,曲率的数量级都是一样的。如果要精确一点,可以采用四次或五次曲线的拟合结果。 曲线次数,对数种类,最大曲率, 最小曲率 #一次, 自然对数:0.02939653517, 6.100957152*10^(-13) #一次, 常用对数:0.02939653428, 6.100957344*10^(-13) #二次, 自然对数:0.01654934877, 1.946756485*10^(-13) #二次, 常用对数:0.01654934725, 1.946756287*10^(-13) #四次, 常用对数:0.01805898064, 3.911154182*10^(-13) #五次, 常用对数:0.01835618491, 3.897350975*10^(-13) 又及: 关于提问者的疑问: y=f(x)的曲率计算公式为: k=|y''|/(1+y'^2)^(3/2); 只要把拟合曲线的方程代入上市,计算出最大值和最小值即可。 由于原始数据跨越5个数量级,直接从总的数据图上是很难看出弯曲程度的。很容易错误地认为在x=-25左右弯曲程度最大。其实,只要分别做出局部数据图像,把相邻的几个点单独画出来,就可以看得比较清楚。(比如,把前面8个点描出来,就会发现,那里是弯曲最厉害的,而在x取30多时,弯曲程度很小。) 关于另外一位网友提到的几个问题: 另外一位回答者没有考虑误差的影响,误以为只要通过所有数据点,就是充分利用了数据,没有通过某个数据点就是没有利用数据。其实,通过最小二乘法算出来的拟合曲线参数是和每个数据都相关的。改变任何一个数据都会直接影响到整体结果,但是一个数据对拟合曲线的影响非常小,于是,即便个别数据误差大一点,也不会对整个拟合曲线参数有多大影响。由于各个数据点对拟合曲线总体的影响很小,因而对各数据点附件一段拟合曲线的影响也不大。 另外,对误差大小的判断还有误区,只考虑到了绝对误差,没有考虑相对误差。例如,在x=-31时,y=1090000,拟合曲线的误差如果达到10000,从绝对值看,确也不小;在x=-3处,y=36,误差假设为1,绝对误差也不大。但是,y=1090000时,即便误差达到10000,也不到千分之一,何况测量数据只有3为有效数字,测量误差都超过了100000,把计算误差较小到10000以下没有任何意义。而在y=36,测量误差大致为0.5,相对误差已经达到14%,远比y=1090000时的相对误差误差大很多。(举一个例子:南京长江大桥在江 面上的正桥长1577米,从卫星上测量的误差大概5米;有直尺测量一只10厘米左右的铅笔,直尺最小刻度1毫米;那是不是测量直尺更准确呢?这个例子在以前的初中物理教科书上出现过。)(这也是这位网友没有理解为什么要在数量级跨度较大的情况下对数据取对数后再拟合(在y值较大的地方绝对误差会大很多),而不直接拟合(各个数据点的误差一视同仁地处理)——其实,在大学物理实验课程中,老师都会讲到如何处理数据。如果还不清楚,可参阅大学物理实验的指导书,一般在第一册中会提到。) 另外,通过三次样条插值,算出来,开始部分的曲率中,x=-3.46或-2.69时取得最大值5.17,并没有达到10。 提到误差,再多说几句。由于当x的绝对值较小时,测量误差很大,如果局部拟合,会导致局部误差很大。比如,x=-4时,y=37,测量误差大概在0.5左右(大一点可以认为是1),那么,实际值可能在36.5到37.5之间。假如把y=37换成36.5,那么重新计算一下,会发现,这一次,该点附件的最大曲率增大大了30.4%,为6.73,(取最大曲率的点也由-3.46变为-3.54,相差2.3%)即在其它数据点精确的情况下,仅仅考虑x=-4处这一个数据点的误差,就会发现实际的最大曲率值可能与计算值偏差达30%,如果考虑到其它几个点的误差,这个偏差还更大。估计在40~50%左右。在这么大的偏差的情况下,计算出来曲率大的地方,有可能实际曲率会小一些,计算出来曲率小的地方有可能实际曲率会大一些,由于计算偏差那么大,谁还能够确定哪里是曲率最大的地方哪里是曲率最小的地方? 另外,由样条曲线的局部性质,把x在-8到-33的那些数据点都去掉,只留下开始8个数据点,算出的结果是一样。也从另外一个角度看得出目前讨论的这个问题中,分段插值这种方法并没有充分利用到数据。(某些情况下,这也是一个优点,称为“局部稳定性”,可以参阅样条函数的书籍。目前国内有不少高校的计算数学专业都面向研究生开设了该课程,从国外引进了不少相关专著。) 以上如有错误,欢迎批评指正。