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

📄 interpolationtest.java

📁 数值分析算法源码(java) 这个学期一边学习java一边学习数值分析,因此用java写了一个数值分析算法的软件包numericalAnalysis. [说明] 适合使用者:会java的
💻 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 + -