⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cinterpolator.java

📁 拉格朗日的线形函数
💻 JAVA
字号:
package interpolator;

import java.util.*;

public class CInterpolator {
  double x[],y[],ts[];
  int n,nt;

  CInterpolator() {
    n = 1;nt=1;
    x= new double[n];
    y=new double[n];
    ts=new double[n];
  }
  protected void finalize() {
      System.out.println("所有在CInterpolator类中的都已清除.");
  }
  boolean GetNodesFromString(String sx, String sy,String st, String sDelim) {
    StringTokenizer tkx = new StringTokenizer(sx, sDelim);
    StringTokenizer tky = new StringTokenizer(sy, sDelim);
    StringTokenizer tkt = new StringTokenizer(st, sDelim);
    String sElement;int i = 0,j=0;double dt = 0.0;
    try{
      n = tkx.countTokens();
      x = new double[n];
      y =new double[n];

      while (tkx.hasMoreElements() && tky.hasMoreElements()) {
        sElement = tkx.nextElement().toString();
        dt=Double.valueOf(sElement.trim()).doubleValue();
        x[i++] = dt;
        sElement = tky.nextElement().toString();
        dt=Double.valueOf(sElement.trim()).doubleValue();
        y[i - 1] = dt;
      }
      nt=tkt.countTokens();
      ts=new double[nt];
      while (tkt.hasMoreElements()){
        sElement = tkt.nextElement().toString();
        dt=Double.valueOf(sElement.trim()).doubleValue();
        ts[j++] = dt;
      }
      if(i!=n || j!=nt){
        System.out.println("不完全字符处理,仅有" + i + "个节点,"+j+"个插值点可用.");
        return false;
      }
      return true;
    }catch(Exception e){
      System.out.println("错误溢出,仅有"+i+"个节点可用.");
      return false;
    }
  }
  String res2str(){
    double yts[]=InterT();
    String strResult="";
    for(int i=0;i<=nt-1;i++){
      strResult+="f("+ts[i]+") = "+yts[i]+" ;\r\n";
    }
    return strResult;
  }
  double[] InterT(){
    double yts[];
    yts=new double[nt];
    for(int i=0;i<=nt-1;i++){
      yts[i]=GetValueLagrange(ts[i]);
    }
    return yts;
  }

  double GetValueLagrange(double t)
{
        int i,j,k,m;
        double z,s;

        //\u00B3\u00F5\u00D6\u00B5
        z=0;

        //\u00CC\u00D8\u00C0\u00FD\u00B4\u00A6\u00C0í
        if(n<1)
                return(z);
        if(n==1)
        {
                z=y[0];
                return(z);
        }

        if(n==2)
        {
                z=(y[0]*(t-x[1])-y[1]*(t-x[0]))/(x[0]-x[1]);
                return(z);
        }

        //\u00BF\u00AA\u00CA\u00BC\u00B2\u00E5\u00D6\u00B5
        i=0;
        while((x[i]<t)&&(i<n))
                i++;

        k=i-4;
        if(k<0)
                k=0;

        m=i+3;
        if(m>n-1)
                m=n-1;

        for(i=k;i<=m;i++)
        {
                s=1;
                for(j=k;j<=m;j++)
                {
                        if(j!=i)
                                //\u00C0\u00AD\u00B8\u00F1\u00C0\u00CA\u00C8\u00D5\u00B2\u00E5\u00D6\u00B5\u00B9\u00AB\u00CA\u00BD
                                s=s*(t-x[j])/(x[i]-x[j]);
                }
                z=z+s*y[i];
        }
        return(z);
}




}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -