声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: wanra

[绘图技巧] 如何求曲线上两点间的最大距离?

[复制链接]
发表于 2006-10-14 23:02 | 显示全部楼层
36点(0.144,-8.1487)和228点(0.912,-9.3127)间的距离:
Sqrt(Sqr(0.144-0.912)+Sqr(-8.1487+9.3127)) = 1.39453217962154,怎么会是1.1468?

再看28点(0.112,-6.7517)和122点(0.488,-12.223)间的距离:
Sqrt(Sqr(0.112-0.488)+Sqr(-6.7517+12.223)) = 5.48420456310667

不知哪个对?是否自己理解有误?

评分

1

查看全部评分

回复 支持 反对
分享到:

使用道具 举报

发表于 2006-10-15 00:17 | 显示全部楼层
感谢dingd兄的细心和提醒,提出另外一个思路,计算量应当小得多:
1.求得曲线上所有极值点,加上区间两个端点,得到新数据点集N,维数:(length(DerData),2)
如果有拟合公式直接由polyder得到导数,如果由于浮点运算误差没有零值点则取一个接近0的数
如果本身是数据集则通过polyfit或者csapi得到拟合公式,再由fnder或者polyder求导
2.用nchoosek(1:length(N),2)命令得到新数据集所有索引的标号组合
3.按标号组合算所有点之间的距离,取最大值。
================================================
花时间算了一下,dingd兄的验算如果我没有猜错的话是基于原始数据的,而我用的是其拟合的多项式公式,因为楼主没有提供mat文件,我懒得再替其编辑那些乱七八糟的数据,所以我的36点应为(0.144,-8.9473),228点为(0.912,-9.7989),从我的图像上看,也不可能达到dingd所说的5以上。所以原来的计算结果应当是正确的。,如下是楼主所提供的拟合公式曲线图象,明显是峰值点附近和波谷点附近的某两个点距离最大,我验算了这两个峰值点之间的距离,是disttt =1.1351。
linetu.jpg
按新思路编写了一个程序,计算结果完全相同:
  1. function DistanceForTwoPoint
  2. clc
  3. x=[.004:.004:1]';
  4. f=[121.0907 -289.6766 211.7924 -17.0045 -36.1942 10.4089 -9.7191];
  5. f1=polyder(f);
  6. RsolDer=roots(f1);
  7. RsolDer=RsolDer(RsolDer>=0&RsolDer<=1);
  8. RealRoots=RsolDer(RsolDer-abs(real(RsolDer))<1e-3);
  9. indOrigin=[];
  10. for i=1:length(RealRoots)
  11.     fOriginVal=polyval(f,x);
  12.     indOrigin=[indOrigin;find(abs(polyval(f1,x)-RealRoots(i))<0.1)];
  13. end
  14. xOrigin=x([1;indOrigin;end]);
  15. fOrigin=fOriginVal([1;indOrigin;end]);
  16. fDerLine=[xOrigin,fOrigin];
  17. P=nchoosek(1:length(xOrigin),2);
  18. FirstPoint=[xOrigin(P(:,1)),fOrigin(P(:,1))];
  19. SecondPoint=[xOrigin(P(:,2)),fOrigin(P(:,2))];
  20. Distance=sqrt((FirstPoint(:,1)-SecondPoint(:,1)).^2+...
  21.     (FirstPoint(:,2)-SecondPoint(:,2)).^2);
  22. [MaxDist,Ind]=max(Distance);
  23. disp(['两点之间最大距离为Dist=',num2str(MaxDist)])
复制代码

[ 本帖最后由 bainhome 于 2006-10-15 05:02 编辑 ]

评分

1

查看全部评分

发表于 2010-8-16 00:55 | 显示全部楼层
的确如同bainhome所说, 16F中dingd所指出之差异, 乃因采用原始数据或拟合多项式公式所造成! 见附图
若采用原始数据, 15F程序得到如下结果: 两点之间最大距离为Dist=5.4842, 这两个点分别是第28个点和第122个点
还有个人较喜欢15F的思维, 简易明了, 17F的对个人而言还真有点复杂!:loveliness:

[ 本帖最后由 ChaChing 于 2010-8-16 00:59 编辑 ]
aaa.jpg
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-16 15:40 , Processed in 0.098636 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表