网络强国是哪几个:Hermite插值———学习笔记 - 我的文章 -

来源:百度文库 编辑:中财网 时间:2024/04/29 18:57:49
Hermite插值———学习笔记/**
 * @(#)Hermite.java
 *
 *
 * @author 坚持到底
 * @version 1.00
 */
public class Hermite
{
     private double[] x;
     private double[] y;
     private double[] m;
     private int n;
  /**
      * 构造函数
      * @param x 节点x
      * @param y 节点x所对应的函数值
      * @param m y所对应的导数值
      * @param n 节点的个数
      */
     Hermite(double[] x, double[] y, double[] m, int n)
     {
          this.x = x;
          this.y = y;
          this.m = m;
          this.n = n;
     }
  /**
      * @param x0
      * @return x0处所对应的Hermite插值的值
      */
     public double calHermite(double x0)
     {
          double HermiteValue = 0.0;
          int j;
          for (j = 0; j < n; j++)
               HermiteValue += y[j] * a(j, x0) + m[j] * b(j, x0);
          return HermiteValue;
     }
     public double a(int j, double x0)
     {
          double value = 0.0;
          double sum = 0.0;
          int k;
          for (k = 0; k < n; k++)
          {
               if (k == j)
                    continue;
               else
               {
                    sum += (1.0 / (x[j] - x[k]));
               }
          }
          value = (1-2 * (x0 - x[j]) * sum) * l(j, x0) * l(j, x0);
          return value;
     }
     public double b(int j, double x0)
     {
          double value = 0.0;
          value = (x0 - x[j]) * l(j, x0) * l(j, x0);
          return value;
     }
  /**
      * Lagrange插值基函数
      */
     public double l(int j, double x0)
     {
          double value = 1;
          int i;
          for (i = 0; i < n; i++)
          {
               if (i == j)
                    continue;
               else
               {
                    value *= (x0 - x[i]) / (x[j] - x[i]);
               }
          }
          return value;
     }
     public static void main(String[] args)
     {
          double[] x={0.10,0.15,0.30,0.45,0.55,0.60,0.70,0.85,0.9,1.0};
          double[] y={0.904837,0.860708,0.740818,0.637628,0.576950,0.548812,0.496585,0.427415,0.406570,0.367879};
          double[] m={-0.904837,-0.860708,-0.740818,-0.637628,-0.576950,-0.548812,-0.496585,-0.427415,-0.406570,-0.367879};
          int n = 10;
          double x0 = 0.356;
          Hermite h = new Hermite(x, y, m, n);
          System.out.println("f(" + x0 + ")=" + h.calHermite(x0));
     }
}