Нужно перевести с языка Java на C++

(а) Найти приближённое значение функции Y=H(X) при заданном значении аргумента x с помощью интерполяционного многочлена Лагранжа. Функция Y=H(X) задана таблично координатами точек (XI;YI) (i = |0,5).

(б) Ту же задачу решить с помощью интерполяционного многочлена Ньютона.

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 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));
    }
 
}

Ответы (0 шт):