📄 interpolationtest.java
字号:
package numericalAnalysis.interpolation;
import java.util.Scanner;
public class InterpolationTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Interpolation problems;// 一个插值问题
int n;// 保存节点数减1的值
double[] x, y;// 节点的xi,yi(i=0,1,...,n)
double xInput, yInput;// Pn(x)的x
String another;// 新建一个插值问题的判断
System.out.println("\n----------------------------本程序解决插值问题"
+ "-----------------------------\n");
do {
// 输入节点
System.out.println("\n输入节点个数:");
n = input.nextInt() - 1;// 因为是x0,x1,...,xn所以n为节点个数减1
x = new double[n + 1];
y = new double[n + 1];
System.out.println("\n输入节点的xi(用空格分开):");
for (int i = 0; i < n + 1; i++)
x[i] = input.nextDouble();
System.out.println("\n输入节点的yi=f(xi)(用空格分开):");
for (int i = 0; i < n + 1; i++)
y[i] = input.nextDouble();
problems = new Interpolation(n, x, y);
// 确认
System.out.println("\n输入的节点是:");
System.out.println(problems.print());
String anotherChoice;
do {
int choice = 0;
boolean retry = true;
while (retry) {
retry = false;
System.out.println();
System.out.println("1---差商表");
System.out.println("2---使用牛顿基本差商公式求解");
System.out.println("3---差分表");
System.out.println("4---使用牛顿前插公式求解");
System.out.println("5---使用牛顿后插公式求解");
System.out.println("6---使用拉格朗日插值公式求解");
System.out.println("7---使用等距节点正函数反插值公式(书中(5.104)式)求解");
System.out.println("请选择:");
try {
choice = Integer.parseInt(input.next());
} catch (NumberFormatException e) {
System.out.println("请别胡乱输入!\n");
retry = true;
}
if (retry == false && (choice < 1 || choice > 7)) {
System.out.println("请别胡乱输入!\n");
retry = true;
}
}
switch (choice) {
case 1: {
System.out.println("\n差商表:");
System.out.println(problems.differenceQuotientChart());
break;
}
case 2: {
System.out.println("\n现在使用牛顿基本差商公式求解");
System.out.println("\n输入Pn(x)的x:");
xInput = input.nextDouble();
System.out.println("\n结果:");
System.out.println(problems
.newtonBasicDifferenceQuotient(xInput));
break;
}
case 3: {
System.out.println("\n差分表:");
System.out.println(problems.differenceChart());
break;
}
case 4: {
System.out.println("\n现在使用牛顿前插公式求解");
System.out.println("\n输入Pn(x)的x:");
xInput = input.nextDouble();
System.out.println("\nt结果:");
System.out.println(problems.newtonSequence(xInput));
break;
}
case 5: {
System.out.println("\n现在使用牛顿后插公式求解");
System.out.println("\n输入Pn(x)的x:");
xInput = input.nextDouble();
System.out.println("\n结果:");
System.out.println(problems.newtonInverse(xInput));
break;
}
case 6: {
System.out.println("\n现在使用拉格朗日插值公式求解");
System.out.println("\n输入Ln(x)的x:");
xInput = input.nextDouble();
System.out.println("\n结果:");
System.out.println(problems.lagrange(xInput));
break;
}
case 7: {
System.out.println("\n现在使用等距节点正函数反插值公式(书中(5.104)式)求解");
System.out.println("\n输入y=Pn(x)的y:");
yInput = input.nextDouble();
System.out.println(problems
.sameDistanceInverseIntepolation(yInput));
break;
}
}
System.out.println(" 要再选择上面的项目吗? y/n:");
anotherChoice = input.next();
} while (anotherChoice.equalsIgnoreCase("y"));
System.out.println("\n 输入另一个插值问题(即输入新节点)? y/n:");
another = input.next();
} while (another.equalsIgnoreCase("y"));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -