免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1117 | 回复: 0
打印 上一主题 下一主题

Hermite插值———学习笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-31 23:50 |只看该作者 |倒序浏览

/**
* @(#)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) / (x[j] - x);
               }
          }
          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));
     }
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/40668/showart_454117.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP