Код:
package com.company;
public class Logic {
public double [][] div_sub(double [] x, double [] f, double [][] y, int n) { // вычисление разделённых разностей функции
for(int m = 1; m < n; m++) {
for(int k = 0; k < n-m; k++) {
if(m == 1) y[k][m] = (f[k+1] - f[k]) / (x[k+1]-x[k]);
else y[k][m] = (y[k+1][m-1] - y[k][m-1]) / (x[k+m] - x[k]);
}
}
return y;
}
public double Lagrange(double X, double [] x, double [] f, double [][] y, int n) { // вычисление значения полинома Лагранжа
double Lagrange = 0;
double denominator = 1; // знаменатель
double numerator = 1; // числитель
for(int k=0; k<n; k++) {
numerator = 1;
for(int i=0; i<n; i++) {
if(i != k) numerator *= (X-x[i]);
}
denominator = 1;
for(int j=0; j<n; j++) {
if(j != k) denominator *= (x[k] - x[j]);
}
Lagrange += f[k] * numerator/denominator;
}
return Lagrange;
}
public double NewtonNF(double X, double [] x, double [] f, double [][] y, int n) { // вычисление значения полинома Ньютона NF
double Newton = f[0];
double prod = 1;
for(int k=1; k<n; k++) {
prod *= (X - x[k-1]);
Newton += y[0][k] * prod;
}
return Newton;
}
public double NewtonNB(double X, double [] x, double [] f, double [][] y, int n) { // вычисление значения полинома Ньютона NB
double Newton = f[n-1];
double prod = 1;
for(int k=1; k<n; k++) {
prod *= (X - x[n-k]);
Newton += y[n-k-1][k] * prod;
}
return Newton;
}
public void print_matr(double [][] y, int n) { // вывод матрицы в консоль
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if(j>0 && (n%j-1) == 0)
System.out.println(String.format("%.3f", y[i][j]) + "\t");
else
System.out.print(String.format("%.3f", y[i][j]) + "\t");
}
}
}
}
package com.company;
public class Main {
public static void main(String[] args) {
int n = 6;
double X = 0;
double [] x = new double[n];
double [] f = new double[n];
double [][] y = new double[n][n];
Logic L = new Logic();
X = -0.2;
x[0] = -1.6;
x[1] = -0.8;
x[2] = 0.9;package com.company;
public class Logic {
public double [][] div_sub(double [] x, double [] f, double [][] y, int n) { // вычисление разделённых разностей функции
for(int m = 1; m < n; m++) {
for(int k = 0; k < n-m; k++) {
if(m == 1) y[k][m] = (f[k+1] - f[k]) / (x[k+1]-x[k]);
else y[k][m] = (y[k+1][m-1] - y[k][m-1]) / (x[k+m] - x[k]);
}
}
return y;
}
public double Lagrange(double X, double [] x, double [] f, double [][] y, int n) { // вычисление значения полинома Лагранжа
double Lagrange = 0;
double denominator = 1; // знаменатель
double numerator = 1; // числитель
for(int k=0; k<n; k++) {
numerator = 1;
for(int i=0; i<n; i++) {
if(i != k) numerator *= (X-x[i]);
}
denominator = 1;
for(int j=0; j<n; j++) {
if(j != k) denominator *= (x[k] - x[j]);
}
Lagrange += f[k] * numerator/denominator;
}
return Lagrange;
}
public double NewtonNF(double X, double [] x, double [] f, double [][] y, int n) { // вычисление значения полинома Ньютона NF
double Newton = f[0];
double prod = 1;
for(int k=1; k<n; k++) {
prod *= (X - x[k-1]);
Newton += y[0][k] * prod;
}
return Newton;
}
public double NewtonNB(double X, double [] x, double [] f, double [][] y, int n) { // вычисление значения полинома Ньютона NB
double Newton = f[n-1];
double prod = 1;
for(int k=1; k<n; k++) {
prod *= (X - x[n-k]);
Newton += y[n-k-1][k] * prod;
}
return Newton;
}
public void print_matr(double [][] y, int n) { // вывод матрицы в консоль
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if(j>0 && (n%j-1) == 0)
System.out.println(String.format("%.3f", y[i][j]) + "\t");
else
System.out.print(String.format("%.3f", y[i][j]) + "\t");
}
}
}
}
package com.company;
public class Main {
public static void main(String[] args) {
int n = 6;
double X = 0;
double [] x = new double[n];
double [] f = new double[n];
double [][] y = new double[n][n];
Logic L = new Logic();
X = -0.2;
x[0] = -1.6;
x[1] = -0.8;
x[2] = 0.9;
x[3] = 1.8;
x[4] = 1.9;
x[5] = 2.8;
f[0] = 3.56789;
f[1] = -4.12345;
f[2] = 11.65432;
f[3] = 29.45678;
f[4] = 26.76543;
f[5] = 6.67890;
y = L.div_sub(x,f,y,n); // вычисление разделённых разностей функции
L.print_matr(y,n); // вывод матрицы разделённых разностей
// вычисление и вывод значения полинома Ньютона
System.out.println("\nПолином Лагранжа= " + L.Lagrange(X, x, f, y, n));
System.out.println("Полином Ньютона NF= " + L.NewtonNF(X, x, f, y, n));
System.out.println("Полином Ньютона NB= " + L.NewtonNB(X, x, f, y, n));
}
}