牛顿差分插值中的输出值错误

ax6ht2ek  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(251)

我有这个代码来计算牛顿的除法差分插值,但它是给我错误的值,这是什么错误的代码?

  1. package divided.differnece;
  2. import java.text.*;
  3. import java.math.*;
  4. import java.util.*;
  5. public class DividedDiffernece {
  6. static float term(int i, float v, float x[]) {
  7. float ter = 1;
  8. for (int j = 0; j < i; j++) {
  9. ter = ter * (v - x[j]);
  10. }
  11. return ter;
  12. }
  13. static void divided_differences_table (float x[], float y[][], int n){
  14. for (int i = 1; i < n; i++) {
  15. for (int j = 0; j < n - i; j++) {
  16. y[j][i] = (y[j][i - 1] - y[j + 1]
  17. [i - 1]) / (x[j] - x[i + j]);
  18. }
  19. }
  20. }
  21. static float Formula(float v, float x[], float y[][], int n) {
  22. float sum = y[0][0];
  23. for (int i = 1; i < n; i++) {
  24. sum = sum + (term(i, v, x) * y[0][i]);
  25. }
  26. return sum;
  27. }
  28. static void print_divided_differences_table(float[] x, float[][] y, int n) {
  29. DecimalFormat df = new DecimalFormat("#.####");
  30. df.setRoundingMode(RoundingMode.HALF_UP);
  31. System.out.println("****************************************************Divided Difference Interpolation Table*******************************************************************");
  32. for (int i = 0; i < n; i++)
  33. {
  34. System.out.print(x[i]+"\t ");
  35. for (int j = 0; j < n - i; j++)
  36. {
  37. String str1 = df.format(y[i][j]);
  38. System.out.print(str1+"\t ");
  39. }
  40. System.out.println("\n");
  41. }
  42. }
  43. public static void main(String[] args) {
  44. System.out.print("_______________________________ X Values ________________________________\n\n");
  45. Scanner Input = new Scanner(System.in);
  46. int n = 5;
  47. float P = 0 ;
  48. float y[][] = new float [10][10];
  49. float x[] = new float [n];
  50. for (int i = 0; i < n; i++)
  51. {
  52. int l= i+1;
  53. System.out.print("Enter x["+l+"]: ");
  54. x[i] = Input.nextFloat();
  55. }
  56. System.out.print("\n_______________________________ Y Values ________________________________\n\n");
  57. for (int i = 0; i < n; i++)
  58. {
  59. int l= i+1;
  60. System.out.print("Enter y["+l+"][0]: ");
  61. y[i][0] = Input.nextFloat();
  62. }
  63. System.out.print("\n_______________________________ The approxmiate F(x) ________________________________\n\n");
  64. System.out.print("Enter X for finding F(x): ");
  65. P = Input.nextFloat();
  66. divided_differences_table ( x, y, n);
  67. print_divided_differences_table(x, y, n);
  68. // print the value
  69. DecimalFormat df = new DecimalFormat("#.##");
  70. df.setRoundingMode(RoundingMode.HALF_UP);
  71. System.out.println("\nValue at "+df.format(P)+" is "
  72. +df.format(Formula(P, x, y, n)));
  73. }
  74. }

正确的输出应该是这样的:

但密码告诉我:

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题