当前位置:首页 >> 电力/水利 >>

三次样条曲线算法的改进及Java语言实现


三次样条曲线算法的改进及Java语言实现 [摘要] 针对常规三次样条插值存在的不足,本文提出了结合微分弦长积累 的改进型算法并给出了程序。 该算法使得各给定的相邻离散点区间段能保证至少 二阶导数连续,从而大大地提高了拟合曲线的光滑度。 [关键词]样条曲线,均方曲率,积累弦长,边界条件,Java 1 引 言 美国数学家 I.J.Schoenberg 于 1946 年提出的 B 样条曲线,现在已得到了 广泛的应用。在实际应用中,比较多的是采用 3 次 B 样条曲线。在文献[1]中给 出了平面坐标系下的三次 B 样条插值曲线的方程式 三次 B 样条插值在各种可能的插值中使得均方曲率 为最小,即在一定意义下最为“光顺”。它可以保证 各相邻离散样点区间段直到二阶导数连续,因而光滑度较高。所以该插值法也是 在工程应用中使用得最多的一种插值方法。但在使用中我们发现,三次 B 样条 插值也存在着一大缺陷,它不是局部化的,每个节点都会影响到全局,虽然影响 是随着远离该点而衰退的, 但是由于存在着误差的远距离扩散,使得样条插值也 会有“多余”的波动,特别是在间距不均匀以及其它一些特殊场合更为显著[1]。 根据三次 B 样条插值函数的基本要求,函数变量必须单调递增(或减),这对 于封闭性拟合曲线来说,难以实现。本文我们设想了采用普通三次 B 样条插值 与微分弦长积累相结合的办法, 即各相邻离散样点弦长积累,并以各样点积累弦 长为自变量构造样点弦长函数, 再与三次样条插值函数合并,寻求封闭样条曲线 的最优拟合的办法。 结果将该混合算法与原三次样条算法的求解过程进行比较和 分析后,表明该算法能很好地解决上述样条插值的不足。 2 微分弦长累积原理 根据输入的离散样点,首先求出相邻点的积累弦长 si 和积累弦长差 hi, 再分别将离散点 xi 坐标的值(yi 坐标同理)和 si 及 hi 代入三次 B 样条曲线函数, 根据导数连续的性质和边界条件构造矩阵,利用高斯消元法求出 Mxi(或 Myi)。 高斯消元法的基本思想是用逐次消去一个未知数(矩阵元素)的办法把原来的矩 阵化为等价的(即具有相同解答的)三角形矩阵,再利用回代法求出该等价三角 形矩阵的各未知数 (矩阵变量) , 从而得出 X 关于弦长 s 的三次 B 样条函数 X(s), (Y(s)同理),最后根据样条函数 X(s)和 Y(s),近似地将该拟合曲线分成若干小直线 段,并将其绘出,最终得到所需要的三次 B 样条拟合曲线。 4 Java 语言实现 Java 是面向对象的、支持多线程的、体系结构独立的解释型动态语言, 具有高度的安全性、可移植性和代码可重用性,具有很高的运行效率,近年来 Java 已成为最受欢迎的面向对象程序设计语言之一, 是目前软件中极为健壮的编 程语言。 (1) 部分源代码: import java.applet.*; import java.awt.*; public class Spline extends Applet{ public Spline(){... ... } public void drawSpline(Graphics g){ ... ... for(i=0;i<N-1;i++){ nn=(s[i+1]-s[i])/20; for(j=1;j<21;j++){ a=s[i]+j*nn; x=Math.pow(s[i+1]-(a-nn),3)*Mx[i]/(6*hx[i]) +Math.pow(a-nn-s[i],3)*Mx[i+1]/(6*hx[i]) +(s[i+1]


相关文章:
实验四 三次样条实验报告
二、实验内容和要求 实验给出型值点,用 VC++ 画出通过给定型值点的三次参数样条曲线。 三、实验方案设计 实验方案设计说明,包括主要设计思路、算法设计、程序...
JAVA算法题40例含源码
JAVA算法题40例含源码_计算机软件及应用_IT/计算机_专业资料。算法题,Java语言实现 JAVA 经典算法 40 题【程序1】 题目:古典问题:有一对兔子,从出生后第3个月...
数值分析课程设计用三次样条插值设计中英文签名
三次样条插值函数对应的曲线称为三次样条插值曲线。 同时我们还可以通过计算三...《VB语言程序设计》专家预测试题 计算机三级软件测试技术基础常见问题集 二级java考前...
蓝桥杯经典例题(Java语言实现)
暂无评价|0人阅读|0次下载|举报文档蓝桥杯经典例题(Java语言实现)_IT认证_资格...数列排序 import java.util.Scanner; public class Main { public static void ...
求三角形面积_JAVA语言实现
暂无评价|0人阅读|0次下载|举报文档 求三角形面积_JAVA语言实现_计算机软件及应用_IT/计算机_专业资料。import java.util.Scanner; class Test3_13{ public stati...
JAVA语言基础_复习题
暂无评价|0人阅读|0次下载|举报文档JAVA语言基础_复习...15. 答:JAVA 类要实现序列化,对应的类必须先实现...1、计算 1/1+1/2+1/3+...+1/100 的值。 ...
Java语言的学习过程曲线
暂无评价|0人阅读|0次下载Java语言的学习过程曲线_教学研究_教育专区。Java 语言的学习过程曲线 摘要:本文通过对 100 名社会培训机构的学生和 100 名大学本科计算机...
java日历的算法
任务2 Java 语言基础操作编程 一、实验目的 (1)掌握 Java 语言的各种数据类型...int months = reader.nextInt(); 三、实验内容 2. 实现万年历的计算 (1)...
Java语言程序设计模拟题4
共 15 分) 1、Java 是从哪一种语言改进并重新...一种是继承 Thread 类,另一种是实现___接口。 A...3、--___抽象___类只能定义但不能被实例化,__...
在Excel中进行样条插值计算
利用三次样条函数插值法,建 立迈耶尔曲线和密度曲线的数学模型, 并由此出发导出...计算得到相应的累计重量和累计灰分量,计算数据见表 2 表 2 改进的 M 曲线上...
更多相关标签: