📄 cinterpolator.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 + -