package kn_10_02; /***************************************************************** * Äàäåíà å êâàäðàòíàòà ìàòðèöà A(nxn) ñ åëåìåíòè � ðåàëíè ÷èñëà. * Äà ñå îïðåäåëÿò êîåôèöèåíòèòå íà õàðàêòåðèñòè÷íèÿ ïîëèíîì * íà ìàòðèöàòà è äà ñå ïðåñìåòíå ñòîéíîñòòà ìó çà * äàäåíà ñòîéíîñò íà íåèçâåñòíîòî. */ import java.util.Scanner; public class Task_1 { static double [][] mat; static double [] polinomCoef; static double [] sums; static Scanner sc = new Scanner(System.in); public static void main(String[] args) { getMatrix(); // Make array of Sums double [][] matDegree = mat; sums = new double[mat.length]; sums[0] = sum(mat); for(int i = 1; i < sums.length; i++){ matDegree = matMult(matDegree, mat); sums[i] = sum(matDegree); } /* for(int i = 0; i < mat.length; i++) System.out.print(sums[i] + " "); System.out.println(); */ // Create Polinom polinomCoef = new double[mat.length + 1]; polinomCoef[polinomCoef.length - 1] = 1; polinomCoef[0] = -sums[0]; for(int i = 1; i < polinomCoef.length - 1; i++){ polinomCoef[i] = sums[i]; for(int j = 0; j < i; j++) polinomCoef[i] += polinomCoef[j] * sums[i - 1 - j]; polinomCoef[i] = -polinomCoef[i] / (i + 1); } for(int i = 0; i < polinomCoef.length; i++) System.out.print(polinomCoef[i] + " "); double x = sc.nextDouble(); System.out.println(polinom(x)); } static void getMatrix() { int n = sc.nextInt(); mat = new double[n][n]; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) mat[i][j] = sc.nextDouble(); } static double sum(double [][] mat){ double sum = 0; for(int i = 0; i < mat.length; i++) sum += mat[i][i]; return sum; } static double[][] matMult(double [][]mat1, double [][]mat2){ double [][]result = new double[mat1.length][mat1.length]; for(int i = 0; i < mat1.length; i++) for(int j = 0; j < mat1.length; j++) for(int k = 0; k < mat1.length; k++) result[i][j] += mat1[i][k] * mat2[k][j]; return result; } static double polinom(double x) { double result = 1; for(int i = polinomCoef.length - 1; i >= 0; i--) result = result * x + polinomCoef[i]; return result; } }