Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.lang.Math;
- /**
- * Created by 1501290108 on 16.11.2018.
- */
- class Rextester{
- static class Lagrange{
- static Double lagrangeFuncSecond(double x, double x0, double x1, double x2) {
- return ((x - x1) * (x - x2)) / ((x0 - x1) * (x0 - x2)) * func(x0) +
- ((x - x0) * (x - x2)) / ((x1 - x0) * (x1 - x2)) * func(x1) +
- ((x - x0) * (x - x1)) / ((x2 - x0) * (x2 - x1)) * func(x2);
- }
- static Double lagrangeFuncThird(double x, double x0, double x1, double x2, double x3) {
- return ((x - x1) * (x - x2) * (x - x3)) / ((x0 - x1) * (x0 - x2) * (x0 - x3)) * func(x0) +
- ((x - x0) * (x - x2)* (x - x3)) / ((x1 - x0) * (x1 - x2)*(x1 - x3)) * func(x1) +
- ((x - x0) * (x - x1)*(x-x3)) / ((x2 - x0) * (x2 - x1) * (x2 - x3)) * func(x2) +
- ((x - x0) * (x - x1)*(x-x2)) / ((x3 - x0) * (x3 - x1) * (x3 - x2)) * func(x3);
- }
- static Double func(double x) {
- return x - Math.cos(x);
- }
- static double AnalyticLagrangeFuncFaultSecond(double x, double x0, double x1, double x2){
- return (Math.abs(func(x) - lagrangeFuncSecond(x, x0, x1, x2)));
- }
- static double FormulaLagrangeFuncFaultSecond(double x, double x0, double x1, double x2){
- return (Math.abs(func(x) - lagrangeFuncSecond(x, x0, x1, x2)));
- }
- static double AnalyticLagrangeFuncFaultThird(double x, double x0, double x1, double x2, double x3){
- return (Math.abs(func(x) - lagrangeFuncThird(x, x0, x1, x2, x3)));
- }
- static double FormulaLagrangeFuncFaultThird(double x, double x0, double x1, double x2, double x3){
- double max = Math.max((x0*(Math.pow(2,x0))*Math.log(2) + (Math.pow(2,x0))), (x1*(Math.pow(2,x1))*Math.log(2) + (Math.pow(2,x1))));
- max = Math.max((x2*(Math.pow(2,x2))*Math.log(2) + (Math.pow(2,x2))), max);
- max = Math.max((x3*(Math.pow(2,x3))*Math.log(2) + (Math.pow(2,x3))), max);
- return (max/24 * Math.abs((x-x0)*(x-x1)*(x-x2)*(x-x3)));
- }
- static double LagrangeFuncValue(ArrayList<Double> x_list, double X) {
- for (int i = 0; i < x_list.size(); i++) {
- if (X >= x_list.get(i)) {
- System.out.println();
- System.out.println("X = " + X);
- try {
- System.out.println("Значение полинома в точке X: " + lagrangeFuncThird(X, x_list.get(i), x_list.get(i + 1), x_list.get(i + 2), x_list.get(i + 3)));
- System.out.println("Погрешность используя аналитическое задание функции: " + AnalyticLagrangeFuncFaultThird(X, x_list.get(i), x_list.get(i + 1), x_list.get(i + 2), x_list.get(i + 3)));
- System.out.println("Погрешность используя формулу: =< " + FormulaLagrangeFuncFaultThird(X, x_list.get(i), x_list.get(i + 1), x_list.get(i + 2), x_list.get(i + 3)));
- return lagrangeFuncThird(X, x_list.get(i), x_list.get(i + 1), x_list.get(i + 2), x_list.get(i + 3));
- } catch (Exception e) {
- System.out.println("Значение полинома в точке X: " + lagrangeFuncThird(X, x_list.get(i - 2), x_list.get(i - 1), x_list.get(i), x_list.get(i + 1)));
- System.out.println("Погрешность используя аналитическое задание функции: " + AnalyticLagrangeFuncFaultThird(X, x_list.get(i-2), x_list.get(i -1), x_list.get(i), x_list.get(i + 1)));
- System.out.println("Погрешность используя формулу: =< " + FormulaLagrangeFuncFaultThird(X, x_list.get(i-2), x_list.get(i -1), x_list.get(i), x_list.get(i + 1)));
- return lagrangeFuncThird(X,x_list.get(i - 2), x_list.get(i - 1), x_list.get(i), x_list.get(i + 1));
- }
- }
- }
- return -1;
- }
- }
- static class Newton{
- static double[][] FiniteDifferences = new double[6][6];
- static double func(double x){
- return x - Math.cos(x);
- }
- static double AnalyticNewtonFuncFaultSecondX1(double x, double x1, double x2){
- return (Math.abs(func(x) - NewtonFuncSecondX1(x, x1, x2)));
- }
- static double AnalyticNewtonFuncFaultSecondX2(double x, double x1, double x2){
- return (Math.abs(func(x) - NewtonFuncSecondX2(x, x1, x2)));
- }
- static double AnalyticNewtonFuncFaultSecondX3(double x, double x1, double x2){
- return (Math.abs(func(x) - NewtonFuncSecondX3(x, x1, x2)));
- }
- static double FormulaNewtonFuncFaultSecond(double x, double x1, double x2){
- double max = Math.max((x1*(Math.pow(2,x1))*Math.log(2) + (Math.pow(2,x1))), (x2*(Math.pow(2,x2))*Math.log(2) + (Math.pow(2,x2))));
- return (max/24 * Math.abs((x-x1)*(x-x2)));
- }
- static double NewtonFuncSecondX1(double X, double x1, double x2){
- return(func(x1) + ((FiniteDifferences[0][0]/Math.PI/5) * (X - x1)) + ((FiniteDifferences[0][1]/(2 * Math.pow(Math.PI/5, 2))) * (X - x2) * (X - x1)));
- }
- static double NewtonFuncSecondX2(double X, double x1, double x2){
- return(func(x1) + ((FiniteDifferences[1][0]/Math.PI/5) * (X - x1)) + ((FiniteDifferences[1][1]/(2 * Math.pow(Math.PI/5, 2))) * (X - x2) * (X - x1)));
- }
- static double NewtonFuncSecondX3(double X, double x1, double x2){
- return(func(x1) + ((FiniteDifferences[3][0]/Math.PI/5) * (X - x1)) + ((FiniteDifferences[3][1]/(2 * Math.pow(Math.PI/5, 2))) * (X - x2) * (X - x1)));
- }
- static double NewtonFuncValue(){
- return 1.2;
- }
- static void FiniteDifferenceValue(ArrayList<Double> y_list){
- for(int i = 0; i < y_list.size() - 1; i++){
- FiniteDifferences[i][0] = y_list.get(i+1) - y_list.get(i);
- }
- for(int i = 0; i < y_list.size() - 2; i++){
- FiniteDifferences[i][1] = FiniteDifferences[i+1][0] - FiniteDifferences[i][0];
- }
- for(int i = 0; i < y_list.size() - 3; i++){
- FiniteDifferences[i][2] = FiniteDifferences[i+1][1] - FiniteDifferences[i][1];
- }
- for(int i = 0; i < y_list.size() - 4; i++){
- FiniteDifferences[i][3] = FiniteDifferences[i+1][2] - FiniteDifferences[i][2];
- }
- for(int i = 0; i < y_list.size() - 5; i++){
- FiniteDifferences[i][4] = FiniteDifferences[i+1][3] - FiniteDifferences[i][3];
- }
- }
- }
- public static void main(String[] args) {
- double X1 = 0.71;
- double X2 = 1.54;
- double X3 = 3.01;
- double h = Math.PI/5;
- double x0 = 0;
- double x1 = Math.PI;
- ArrayList<Double> x_list = new ArrayList<>();
- ArrayList<Double> y_list = new ArrayList<>();
- while(x0 <= x1){
- x_list.add(x0);
- x0 = (x0 * 10 + h * 10) / 10;
- }
- for(int i = 0; i < x_list.size(); i++){
- y_list.add(Lagrange.func(x_list.get(i)));
- }
- System.out.println();
- System.out.println("x | y(x)");
- System.out.println("-------------------------");
- for(int i = 0; i < x_list.size(); i++){
- System.out.println(x_list.get(i) + " | " + y_list.get(i));
- System.out.println("-------------------------");
- }
- System.out.println("\nЛагранж");
- Lagrange.LagrangeFuncValue(x_list, X1);
- Lagrange.LagrangeFuncValue(x_list, X2);
- Lagrange.LagrangeFuncValue(x_list, X3);
- System.out.println("\nНьютон");
- System.out.println("\nТаблица конечных разностей");
- Newton.FiniteDifferenceValue(y_list);
- for(int i = 0; i < 6; i++){
- System.out.println();
- for(int j = 0; j < 6; j++){
- double buf = Newton.FiniteDifferences[i][j];
- System.out.print(buf + " ");
- for(int f = 0; f < 25 - (buf + " ").length(); f++){
- System.out.print(" ");
- }
- }
- }
- System.out.println("\n\nX = " + X1);
- System.out.println("Значение полинома в точке X: " + Newton.NewtonFuncSecondX1(X1, 1.0, 1.2));
- System.out.println("Погрешность используя аналитическое задание функции: " + Newton.AnalyticNewtonFuncFaultSecondX1(X1, 1.0, 1.2));
- System.out.println("Погрешность используя формулу: =< " + Newton.FormulaNewtonFuncFaultSecond(X1, 1.0, 1.2));
- System.out.println("\nX = " + X2);
- System.out.println("Значение полинома в точке X: " + Newton.NewtonFuncSecondX2(X2, 1.2, 1.4));
- System.out.println("Погрешность используя аналитическое задание функции: " + Newton.AnalyticNewtonFuncFaultSecondX2(X2, 1.2, 1.4));
- System.out.println("Погрешность используя формулу: =< " + Newton.FormulaNewtonFuncFaultSecond(X2, 1.2, 1.4));
- System.out.println("\nX = " + X3);
- System.out.println("Значение полинома в точке X: " + Newton.NewtonFuncSecondX3(X3, 1.6, 1.8));
- System.out.println("Погрешность используя аналитическое задание функции: " + Newton.AnalyticNewtonFuncFaultSecondX3(X3, 1.6, 1.8));
- System.out.println("Погрешность используя формулу: =< " + Newton.FormulaNewtonFuncFaultSecond(X3, 1.6, 1.8));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement