精华内容
下载资源
问答
  • 参数优化的有理函数图像插值算法
  • remez算法matlab代码PolyRat:多项式和有理函数库 PolyRat 是一个用于多项式和有理近似的库。 形式上,我们可以将其视为 的幂之和: A 是两个多项式函数的比值 该库的目标是在给定由输入和输出对组成的点数据集合的...
  • 此程序是目前MATLAB中求解误差函数的通用算法
  • 有理函数内插法和外推法算法实现

    千次阅读 2007-12-13 16:29:00
    算法名称:有理函数内插法和外推法 算法描述:用Ri(i+1)...(i+m)表示过m+1个点(xi,yi)...(xi+m,yi+m)的有理函数。假定 (1)因为有μ+ν+1个未知的p和q(q0任意),则有 (2)在把插值函数定义为有理函数时,必须...
    算法名称:有理函数内插法和外推法
     
    算法描述:
    Ri(i+1)...(i+m)表示过m+1个点(xi,yi)...(xi+m,yi+m)的有理函数。假定
                      (1
    因为有μ+ν+1个未知的pqq0任意),则有

                                    (2

    在把插值函数定义为有理函数时,必须给出分子和分母多项式的阶数。
          有理函数比多项式函数优越,是因为有理函数能够模拟具有极点的函数。极点是指(1)式中分母的零点。如果要插值的函数本身有极点的话,则在实数x处就有可能出现这些极点。
          若函数fx)对所有有限实数x都是有穷的,但在x复平面内存在极点的解析连续性。即使限定为实数x,这些极点也会使多项式逼近彻底失败,正如它们会使x的无穷级数达不到收敛一样。如果在复平面内,沿列表中的m个点画一个圆,除非最近的极点也远离此圆,否则多项式插值结果就不会很好。相比而言,只要在有理函数的分母中,x有足够高的幂次以避免(消除)近处的极点,有理函数的逼近效果要强于多项式函数逼近。
          Bulirsch-Stoer算法产生一个所谓的对角有理函数,分子和分母阶数相等(若m为偶数),或者分母的阶数比分子的阶数高一阶(若m为奇数)。
            (3
    该递推式表示,可由过m个点的有理函数和过m-1个点的有理函数导出过m+1个点的有理函数。初始值为
                                          (4
                     (5
    于是跟《多项式内插法和外推法》一文中的(4)式和(5)式一个道理,可以将(3)转化为仅含细微差别的式子
                            (6
    特别注意它们满足关系式,这对后面的式子理解非常重要
                            (7
    由上式可得
                     (8
          这个方法的式子很复杂,笔者感觉(3)式看得实在恶心,但是理解了基本思想还是不成问题的,这里我们讨论的有理函数插值法和多项式函数插值法都是由拉格朗日插值多项式衍生而来的,结合拉格朗日插值多项式的思想会更容易理解一些。
         
    注:在程序实现时我们其实只需用到(8)式,所以前面的只是了解就可以了。
     
    运行示例:
     
    Data x:
    32.0
    22.2
    41.6
    10.1
    50.5
    --------------------------
    Data f(x):
    0.52992
    0.37784
    0.66393
    0.17537
    0.63608
    --------------------------
    P(x=27.5)
    0.46151604949025693
    --------------------------

     示例程序:

    package com.nc4nr.chapter03.ratint;

    public class RatInt 
    {

        
    double[] xa = 32.022.241.610.150.5 }
    ;
        
    double[] ya = 0.529920.377840.663930.175370.63608 }
    ;
        
        
    int count = 5
    ;
        
        
    private void ratint(double x) 
    {
            
    int n = count, ns = 0
    ;
            
    double dif = Math.abs(x-xa[0]), y = 0.0
    ;
            
    double[] c = new double
    [n],
                     d 
    = new double
    [n];
            
    for (int i = 0; i < n; i++
    {
                
    double dift = Math.abs(x-
    xa[i]);
                
    if (dift == 0.0
    {
                    y 
    =
     ya[i];
                    
    return
    ;
                }
     else if (dift < dif) {
                    ns 
    =
     i;
                    dif 
    =
     dift;
                }

                c[i] 
    = ya[i];
                d[i] 
    =
     ya[i];
            }

            y 
    = ya[ns--];
            
    for (int m = 1; m < n; m++
    {
                
    for (int i = 0; i < n-m; i++
    {
                    
    double  a = xa[i]-
    x,
                            b 
    = xa[i+m]-
    x,
                            h 
    = a*d[i]/
    b,
                            w 
    = c[i+1]-
    d[i],
                            t 
    = h - c[i+1
    ];
                    
    if (t == 0.0) System.out.println("ratint: error"
    );
                    t 
    = w/
    t;
                    c[i] 
    = h*
    t;
                    d[i] 
    = c[i+1]*
    t;
                }

                
    double dy = 2*(ns+1< (n-m) ? c[ns+1] : d[ns--];
                y 
    +=
     dy;
            }

            System.out.println(y);
            System.out.println(
    "--------------------------");
        }

        
        
    private void output(double[] v, int n) {
            
    for (int i = 0; i < n; i++
    {
                System.out.println(v[i]);
            }

            System.out.println(
    "--------------------------");
        }

        
        
    public RatInt() {
            System.out.println(
    "Data x:"
    );
            output(xa,count);
            System.out.println(
    "Data f(x):"
    );
            output(ya,count);
            
    double x = 27.5
    ;
            System.out.println(
    "P(x=" + x + ")"
    );
            ratint(x);
        }

        
        
    public static void main(String[] args) {
            
    new
     RatInt();
        }


    }

    展开全文
  • 基于有理函数模型提出了一种新的自适应图像插值算法。此类有理函数具有简单显性数学表达式,且含有可调参数。当两个参数都等于 1 时, 有理函数变为双三次插值函数。基于有理函数构造图像插值曲面, 原始图像通过等值...
  • 本提交中的三种算法求解形式为 r(X) = A 的方程,其中 r 是有理函数,A 和 X 是大小相同的方阵。 函数 invrat_horn() 实现了 [1, 算法 2] 而 invrat_pow() 和 invrat_ps() 分别实现了 [2, 算法 3.1] 和 [2, 算法 ...
  • 对于提出的三角网格上有理插值问题,本文将对称型连分式与逐次降价的一元多项式结合起来,通过定义偏差商和混合反差商,建立递推算法,构造三角网格上的有理插值函数,满足所给的有理插值问题的条件,并给出了插值...
  • 这一算法来自于我们对“线性递推式拟合”的视角转换,其后得到的算法是自然的。 引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2p1​/q1​,p2​/q2​ 均有 deg⁡p<n,deg⁡q≤n\deg p<n, \deg q\leq ...

    这一算法来自于我们对“线性递推式拟合”的视角转换,其后得到的算法是自然的。

    引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2 均有 degp<n,degqn\deg p<n, \deg q\leq n 且展开式 p1/q1p2/q2(modx2n)p_1/q_1 \equiv p_2/q_2 \pmod {x^{2n}},那么 p1/q1=p2/q2p_1/q_1 = p_2/q_2

    证明. 通分,等价于 p1q2=q1p2p_1q_2=q_1p_2,由两边次数均 <2n<2n,而同余式保留了全部信息。

    这一引理告诉我们,若一个 nn 阶线性递推式确实拟合了其前 2n2n 项,那么通分之后就一定是“最小”的。

    为了解决这一问题,我们首先将问题适当泛化:

    「有理函数重建」(Rational Function Reconstruction):给定域上的多项式 f(x),M(x)f(x),M(x),设 degM=n\deg M = n,当多项式 p,qp,q 满足 degqnk,degp<k\deg q \leq n-k, \deg p < k 时,若 pqf(modM)p\equiv qf \pmod M,那么称 p,qp,q 是一个 (k,nk)(k,n-k) 有理逼近。

    接下来,我们将发现任何一个 kk,都存在 (k,nk)(k,n-k) 有理逼近。将同余式写作 pqf+Mtp\equiv qf + Mt,这诱导我们考虑欧几里得过程:最初有
    [fM]=[1001][fM] \begin{bmatrix} f\\ M \end{bmatrix}= \begin{bmatrix} 1 & 0\\ 0 & 1\\ \end{bmatrix} \begin{bmatrix} f\\ M \end{bmatrix}
    在欧几里得的过程中,有中间量
    [AB]=[XAYAXBYB][fM] \begin{bmatrix} A\\ B \end{bmatrix}= \begin{bmatrix} X_A & Y_A\\ X_B & Y_B\\ \end{bmatrix} \begin{bmatrix} f\\ M \end{bmatrix}
    不妨设 k1=degAdegB=mk-1=\deg A \ge \deg B=m,那么我们接下来进行多项式取模,就应当逐步将 AA 的度数从 <k<k 降到 <m<m,然后交换 A,BA,B。此时我们归纳假设 degXA,degXBnk\deg X_A, \deg X_B \leq n-k,那么由于辗转相除 AdBA-dB 的系数有 degd<km\deg d < k-m,可知 ff 的系数 XAdXBX_A-dX_B,那么新的系数为 XAdXB,XBX_A-dX_B,X_B。度数均 <nm< n-m
    我们现在设 k=m+1,m=deg(AdB)k'=m+1,m'=\deg (A-dB),也就有新的系数的度数均 nk\le n-k'。注意我们每次辗转相除后得到的 (k,nk)(k,n-k) 有理逼近的 kk 是一段区间,且刚好拼出了 1n1\sim n 的所有整数。取对应的 p=A,q=XAp=A,q=X_A 即可。

    辗转相除过程的这个序列通过 HALF-GCD 算法可以在 Θ(nlog2n)\Theta(n\log ^2n) 时间内计算。严格来说,我们是通过 HALF-GCD 算法计算出的矩阵列,可以算出任何一个阶段的有理函数重建。但对于我们对线性递推式的计算而言,只做 nn 消到 n/2n/2 这第一轮刚好足够我们求出信息。

    不过这里似乎 p,qp,q 是可能有 xx 的幂的,但如果将引理 1 稍微改改就会发现,如果我们给的数列真的有一个递推式,那就算 p,qp,qxx 的幂,通分之后肯定还是正确的。

    展开全文
  • 二元切触有理插值函数的构造方法大都是基于连分式进行的,其算法可行性是有条件的,且计算量较大,有理函数的次数较高。利用分段组合方法,构造出一种二元切触有理插值函数并将其推广到向量值切触有理插值情形,既...
  • 熟知的构造矩阵值有理插值函数的方法,是基于矩阵的古典逆或Samelson逆,利用连分式给出的,其算法可行性不易预知。借助构造向量值有理插值的方法,引入多个参数,定义一对多项式:代数多项式和矩阵值多项式,并利用...
  • 函数基础逼近算法,用帕德形式的有理分式逼近已知函数
  • 将多幅图像间相同位置的像素点建立对应关系,按照该关系建立一元混合有理插值函数,对插值函数进行重采样,得到一系列的渐变中间图像。实验表明,新算法在反映空间数据的分布特性、保证图像纹理特征方面均优于其他...
  • 给出一种具有特殊性质的有理保形插值函数及其求解算法,讨论了它的收敛阶,这对有关问题无论是理论研究,还是实际应用都具有一定的意义。
  • 论文运用Petri网来描述程序,并且按照一定的数学规则将此Petri网进行分解,得到独立的段组(Independent Segment Group,ISG)并产生测试用例,最后设计一个算法找到满足覆盖准则的最少测试用例。
  • Newton插值和Thiele型连分式插值在多项式插值和有理插值中具有重要的地位,将Newton插值多项式与Thiele型分叉连分式结合起来构造三元混合型有理函数,通过引入差商和倒差商建立三元有理插值算法、特征定理和相应的...
  • 利用牛顿插值承袭性的思想和分段组合方法,构造出一种二元切触有理插值算法并推广到向量值有理插值,既解决了有理插值的存在性问题,又降低了切触有理插值函数的次数。相比于其他方法,算法的可行性是无条件的,有理...
  • 我们可以使用有理B样条显示圆、椭圆和其他二维曲线。此外,OpenGL实用工具包(GLUT)中还有可以用来显示某些三维曲面(如球面、锥面和其他形体)的函数。然而,所有这些函数比本章中介绍的基本图元应用得更多,因此我们...
    OpenGL曲线函数
           生成圆和椭圆等基本曲线的函数并未作为图元功能包含在OpenGL核心库中。但该库包含了显示Bezier样条的功能,该曲线是由一组离散点定义的多项式。OpenGL实用库(GLU)中包含有球面和柱面等三维曲面函数以及生成B样条的函数,它是包含简化Bezier曲线的样条曲线的总集。我们可以使用有理B样条显示圆、椭圆和其他二维曲线。此外,OpenGL实用工具包(GLUT)中还有可以用来显示某些三维曲面(如球面、锥面和其他形体)的函数。然而,所有这些函数比本章中介绍的基本图元应用得更多,因此我们将在第7章进一步讨论这一组函数。
          我们还可以使用折线来近似地显示简单曲线。仅需确定一组曲线上的点并将它们连接成一组直线段。折线中的线段越多,曲线越平滑。图3.15给出了用于表示弧的几种折线显示。


    第三种可选方法是按下面将给出的算法写出自己的曲线生成函数。首先讨论生成圆和椭圆的高速算法,然后再看一个生成其他二次曲线、多项式和样条曲线的函数。


    圆生成算法

    由于圆是图形中经常使用的元素,因此在大多数图形软件中都包含生成圆和圆弧的函数。这些软件有时也会提供一个能显示包括圆和椭圆在内的多种曲线的通用函数。


    圆的特性

           我们将圆定义为所有距中心位置(xc,yc)为给定值r的点集(参见图3.16 )。对于任意的圆点(x,y),这个距离关系可用笛卡儿坐标系中的勾股(Pythagorean)定理定义为

    利用这个方程,我们可以沿x轴从xc-r到xc+r以单位步长计算对应的y值,从而得到圆周上每点的位置:

           但这并非是生成圆的最好方法。这个方法的一个问题是每一步包含很大的计算量。而且,如图3.17所示,所画像素位置间的间距是不一致的。我们可以在圆斜率的绝对值大于1后,交换x和y(即步进y值并计算x值)来调整间距。但是,这种方法增加了算法所需的计算量和处理过程。
           另一种消除图3.17中不等间距的方法是使用极坐标r和θ(参见图3.16)来计算沿圆周的点。
    以参数极坐标形式表示圆方程,可以得到方程组:




           使用上述方法以固定角度为步长生成显示结果时,就可以利用沿圆周的等距点来绘制出圆。为了减少计算量,我们可以在相邻点间使用较大的角度间隔并用线段连接相邻点来逼近圆的路径。在光栅显示中设定角度间隔为1/r可获得较连续的边界。这样绘出的像素位置大约间隔一个单位。尽管极坐标系统提供了等距点,但三角函数计算是十分耗时的。
           对于上述任何一种圆生成算法,考虑圆的对称性可以减少计算量。圆的形状在每个象限中是相似的。因此,如果我们确定了在第一象限中圆的位置,则可以生成该圆在xy平面中第二象限的部分,这是因为两个圆弧段对于y轴是对称的。考虑对于x轴的对称性,根据第一和第二象限中的圆弧可以得到第三和第四象限的圆弧。在八分圆之间也有对称性,因此可以进一步细化,一个象限内的相邻八分圆的圆弧对于分割两个部分的45度直线是对称的。这种对称情况可参见图3.18,图中八分之一圆上的一点(x,y)将映射到xy平面的其他七个八分圆的点。这种方法利用了圆的对称性,仅需计算从x=0到x = y分段内的点就可得到整个圆的所有像素位置。在这个八分圆中,圆弧斜率绝对值小于或等于1.0 。x = 0时圆的斜率是0,而当x = y时圆的斜率是-1.0。

           使用对称性及方程(3.26)或方程(3.28)来确定圆周上的像素位置,仍然需要大量的计算时间。笛卡儿方程(3.26)包括乘法和平方根运算,而参数方程中包含乘法和三角运算。更有效的画圆算法是如同Bresenham画线算法一样以决策参数的增量计算为基础,这样仅仅包括简单的整数处理。
           通过设定在每一取样步骤中寻找最接近圆周像素的决策参数,可以将光栅系统的Bresenham画线算法移植为画圆算法。然而,圆方程(3.26)是非线性的,计算像素与圆的距离必须进行平方根运算。Bresenham画圆算法则通过比较像素与圆的距离的平方而避免了平方根运算。
           然而,不做平方运算而直接比较距离是可能的。该方法的基本思想是检验两像素间的中间位置以确定该中点是在圆边界之内还是之外。这种方法更易应用于其他圆锥曲线,并且对于整数圆半径,中点方法生成与Bresenham画圆算法相同的像素位置。而且使用中点检验时,沿任何圆锥截面曲线所确定的像素位置,其误差限制在像素间隔的1/2以内。

    展开全文
  • 提出了有理式多层前馈神经网络的数学模型, 给出了有理式多层神经网络的学习算法. 就计算复杂度而 言, 有理式神经网络的... 函数逼近应用实例结果表明, 将有理式 多层神经网络用于解决传统问题是有效的.</p>
  • 算法集包括线性代数方程组(LU分解法、追赶法、奇异数分解、矩阵的QR分解)、数值积分(梯形求积法、反常积分、高斯求积法)、插值(拉格朗日插值、有理函数插值、三次样条插值、‘双三次样条插值)
  • 特殊函数计算手册

    2019-04-03 20:15:36
     《特殊函数计算手册》较系统地阐述了各种特殊函数的定义、数学性质、算法、数表和程序。由特定微分方程的解定义的特殊函数有正交多项式(如Chebyshev、Laguerre和Hermite多项式),Gamma函数,Legendre函数类,...
  • delphi算法集源码

    2012-07-24 09:46:04
    2.有理函数插值 3.三次样条插值 4.有序表的检索法 5.插值多项式 6.二元拉格朗日插值 7.双三次样条插值 第3章数值积分 1.梯形求积法 2.辛普森求积法 3.龙贝格求积法 4.反常积分 5.高斯求积法 6.三重积分 ...
  • 7种插值算法

    2013-10-18 23:44:07
    1 拉格朗日插值(POLINT) 2 有理函数插值(RATINT) 3 三次样条插值(SPLINE(二阶导数值)->SPLINT(函数值)) 4 有序表的检索法(LOCATE(二分法), HUNT(关联法)) 5 插值多项式(POLCOE(n2), POLCOF(n3)) 6 二元拉格朗日插值...
  • 提出了对参数速度模有理逼近的2种形式,在此基础上给出了平面雎zier曲线等距曲线的逼近函数和误差估计函数,并导出了保持法矢平移方向的代数方式的等距有理逼近算法。最后给出例子验证其效果。
  • 将重心有理插值与Newton型多项式插值结合起来,利用偏差商的递推算法,得到了满足矩形网格上所给插值条件的二元有理插值函数,给出了插值的特征性质和对偶形式.该二元有理插值函数它继承了重心有理插值的计算量孝没有...
  • 数学算法原书光盘

    2012-05-11 17:38:03
    2.有理函数插值 3.三次样条插值 4.有序表的检索法 5.插值多项式 6.二元拉格朗日插值 7.双三次样条插值 第3章数值积分 1.梯形求积法 2.辛普森求积法 3.龙贝格求积法 4.反常积分 5.高斯求积法 6.三重积分 第4章特殊...
  • matlab 插值类算法全C++

    2017-12-24 22:24:19
    7种插值算法的c++代码实现,1 拉格朗日插值(POLINT) 2 有理函数插值(RATINT) 3 三次样条插值(SPLINE(二阶导数值)->SPLINT(函数值)) 4 有序表的检索法(LOCATE(二分法), HUNT(关联法)) 5 插值多项式(POLCOE(n2), ...
  • 算法经典VC++数值分析

    热门讨论 2010-10-21 21:03:49
    2.2有理函数插值 2.3三次样条插值 2.4有序表的检索法 2.5插值多项式 2.6二元拉格朗日插值 2.7双三次样条插值 第3章 数值积分 3.1梯形求积法 3.2辛普森(Simpson)求积法 3.3龙贝格(Romberg)求积法 3.4反常...
  • 7种插值算法的c++代码实现,1 拉格朗日插值(POLINT) 2 有理函数插值(RATINT) 3 三次样条插值(SPLINE(二阶导数值)->SPLINT(函数值)) 4 有序表的检索法(LOCATE(二分法), HUNT(关联法)) 5 插值多项式(POLCOE(n2), ...
  • MATLAB常用算法

    热门讨论 2010-04-05 10:34:28
    Neville 用Neville算法求已知数据点的有理分式形式的插值分式 FCZ 用倒差商算法求已知数据点的有理分式形式的插值分式 DL 用双线性插值求已知点的插值 DTL 用二元三点拉格朗日插值求已知点的插值 DH 用分片双三次...
  • Visual C++ 常用数值算法

    热门讨论 2012-03-19 11:57:59
    2.2有理函数插值 2.3三次样条插值 2.4有序表的检索法 2.5插值多项式 2.6二元拉格朗日插值 2.7双三次样条插值 第3章 数值积分 3.1梯形求积法 3.2辛普森(Simpson)求积法 3.3龙贝格(Romberg)求积法 3.4反常...

空空如也

空空如也

1 2 3 4 5 6
收藏数 112
精华内容 44
关键字:

有理函数算法