рд░реИрдЦрд┐рдХ рдмреАрдЬреАрдп рд╕рдореАрдХрд░рдгреЛрдВ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ

рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╖рдп рдореЗрд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЕрдХреНрд╕рд░ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЧреЙрд╕ рдХреНрдпреЛрдВ? рдЧреЙрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде) рдФрд░ рдХреБрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрдд рддрд░реАрдХреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, Sinn3r рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП , рдореИрдВрдиреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рд╢реБрд░реВ рдХрд░реЛ


рддреЛ, рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЖрджреЗрд╢ рдХреЗ рд░реИрдЦрд┐рдХ рдмреАрдЬреАрдп рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдПрдиред рд╕рдмрд╕реЗ рд╣рдбрд╝рддрд╛рд▓реА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рд▓реВ-рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЕрдкрдШрдЯрдиред

рдпрд╣ рд╕рд╣рдЬ рд╡рд┐рдзрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реИрдЦрд┐рдХ рдмреАрдЬреАрдп рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИ (рд╡реЗрдХреНрдЯрд░ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд┐рдд):

рдЕрдХреНрд╖=рдмреА,

рдЬрд╣рд╛рдБ A=(aij)- рдПрдХ рднрдпрд╛рдирдХ рдФрд░ рднреНрд░рд╛рдордХ рдЧреИрд░-рдкрддрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ред рд╣рдо рдЗрд╕реЗ рджреЛ рдЕрдиреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ: L=(lij)рдПрдХ рдХрдо рддреНрд░рд┐рдХреЛрдгреАрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ, рдФрд░ U=(uij)рдКрдкрд░реА рддреНрд░рд┐рдХреЛрдгреАрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИред рдлрд┐рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдлреЙрд░реНрдо рд▓реЗрддрд╛ рд╣реИ:

рдПрд▓рдпреВрдПрдХреНрд╕=рдмреА

рдпрджрд┐ рдирд╛рдорд┐рдд рд╣реЛ Ux=y, рддрдм рдореВрд▓ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдорд╛рдзрд╛рди рджреЛ рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рд▓рдп=рдмреА,

рдпреВрдПрдХреНрд╕=рд╡рд╛рдИ


рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рджреЛ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ (рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдПрд▓рдФрд░ рдпреВ- рддреНрд░рд┐рдХреЛрдгреАрдп)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрди рдореИрдЯреНрд░рд┐рд╕ рдХреЛ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реИ? рдЗрд╕рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рднрд╡рди рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реВрдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП -ecompositionsред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓реВ-decomposition рдпрд╣рд╛рдБ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ ред рдЗрд╕ рдмреАрдЪ, рд╣рдо рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВрдЧреЗред

рд╡рд░реНрдЧрдореВрд▓ рд╡рд┐рдзрд┐


рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрддреЗрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдПред рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордорд┐рдд рд╣реЛ, рдЕрд░реНрдерд╛рдд aij=ajiрдпрд╛ рдПрдЯреА=рдПред рдЗрд╕ рддрд░рд╣ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

A=StDS,

рдЬрд╣рд╛рдБ рдПрд╕- рдКрдкрд░реА рддреНрд░рд┐рдХреЛрдгреАрдп рдореИрдЯреНрд░рд┐рдХреНрд╕, рдбреАрдПрдХ рд╡рд┐рдХрд░реНрдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдХрд░реНрдг рддрддреНрд╡ рдкреВрд░реНрдг рдореВрд▓реНрдп рдореЗрдВ рдПрдХрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рдореВрд▓ рдкреНрд░рдгрд╛рд▓реА рджреЛ рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЧрдИ рд╣реИ:

StDy=b,

Sx=y,

рдЬреЛ рдХрд┐ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдХрд╛рд░рдг рднреА рд╣рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдПрд╕рдФрд░ рдбреАред

рдПрд▓реНрдЧреЛрд░рд┐рдердо рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рдХреА рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдмреЛрдЭрд┐рд▓ рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдирдореВрдирд╛ рдЬрд╛рд╡рд╛ рдХреЛрдб рдЬреЛ рд╕реНрд╡реАрдк рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

import java.io.FileNotFoundException; import java.io.FileReader; import java.io.PrintWriter; import java.util.Locale; import java.util.Scanner; public class SquareRootMethod { public static void main(String[] args) throws FileNotFoundException { Scanner scanner = new Scanner(new FileReader("input.txt")); scanner.useLocale(Locale.US); int n = scanner.nextInt(); double[][] a = new double[n + 1][n + 1]; double[] b = new double[n + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { a[i][j] = scanner.nextDouble(); } b[i] = scanner.nextDouble(); } double[] x = new double[n + 1]; double[] d = new double[n + 1]; double[][] s = new double[n + 1][n + 1]; // for i = 1 d[1] = Math.signum(a[1][1]); s[1][1] = Math.sqrt(Math.abs(a[1][1])); for (int j = 2; j <= n; j++) { s[1][j] = a[1][j] / (s[1][1] * d[1]); } // for i > 1 //searching S and D matrix for (int i = 2; i <= n; i++) { double sum = 0; for (int k = 1; k <= i - 1; k++) { sum += s[k][i] * s[k][i] * d[k]; } d[i] = Math.signum(a[i][i] - sum); s[i][i] = Math.sqrt(Math.abs(a[i][i] - sum)); double l = 1 / (s[i][i] * d[i]); for (int j = i + 1; j <= n; j++) { double SDSsum = 0; for (int k = 1; k <= i - 1; k++) { SDSsum += s[k][i] * d[k] * s[k][j]; } s[i][j] = l * (a[i][j] - SDSsum); } } //solve of the system (s^t * d)y = b double[] y = new double[n + 1]; y[1] = b[1] / (s[1][1] * d[1]); for (int i = 2; i <= n; i++) { double sum = 0; for (int j = 1; j <= i - 1; j++) { sum += s[j][i] * d[j] * y[j]; } y[i] = (b[i] - sum) / (s[i][i] * d[i]); } //solve of the system sx = y x[n] = y[n] / s[n][n]; for (int i = n - 1; i >= 1; i--) { double sum = 0; for (int k = i + 1; k <= n; k++) { sum += s[i][k] * x[k]; } x[i] = (y[i] - sum) / s[i][i]; } //output PrintWriter pw = new PrintWriter("output.txt"); for (int i = 1; i <= n; i++) { pw.printf(Locale.US, "x%d = %f\n", i, x[i]); } pw.flush(); pw.close(); } } 

рд╕реНрд╡реАрдк рд╡рд┐рдзрд┐


рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рддреАрди рд╕реЗ рдЕрдзрд┐рдХ рдЕрдЬреНрдЮрд╛рдд рд╡рд╛рд▓реЗ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рд╕реНрдЯрдо рд╣рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде

рдЕрдХреНрд╖=рдмреА

рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрддреНрд░рд┐рджрд▓реАрдп рд╣реИ:

A = \ start {pmatrix} C_1 & -B_1 & 0 & \ dots & 0 & 0 \\ -A_2 & C_2 & -B_2 рдФрд░ \ dots & 0 & 0 \\ \ vdots & \ vdots & \ vdots & \ ddots & \ vdots & \ vdots \\ 0 & 0 & \ dots & -A_ {n-1} & C_ {n-1} & -B_ {n-1} \\ 0 & 0 & \ dots & 0--A_n & C_n \\ \ end {pmatrix}ред



рдмрд╕ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрдбрд╝реЛрд╕реА рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╣реИ:

xiтИТ1= AlphaiтИТ1xi+ BetaiтИТ1,


 Alphak, Betak- рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рдирдВрдмрд░ред рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдФрд░ рдПрдХ рдПрдХрд▓ рдЪрд░ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдиреНрдп рд╕рднреА рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реВрддреНрд░реЛрдВ рдХреА рд╡реНрдпреБрддреНрдкрддреНрддрд┐

\ Alpha_1 = \ dfrac {B_1} {C_1}, \ \ Alpha_i = \ dfrac {B_i} {C_i - A_i \ Alpha_ {i-1}}, \ i = \ over \ {2}, n},

\ beta_1 = \ dfrac {b_1} {C_1}, \ \ Beta_i = \ dfrac {b_i + A_i \ beta_ {i-1}} {C_i - A_i \ alpha_ / i-1}}, \ i = \ _ рдЭреБрдХрдирд╛ {ред 2, рдПрди}

рдпрд╣рд╛рдБ рдореМрдЬреВрдж рд╣реИ ред рдЦреИрд░, рдЕрдВрдд рдореЗрдВ

xn= dfracbn+An betanтИТ1CnтИТAn AlphanтИТ1, xi= Alphaix+1+ Betai, i=nтИТnтИТ1,рдПрдитИТ2, рдбреЙрдЯреНрд╕,1


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЦреЛрдЬ рд╕реВрддреНрд░реЛрдВ рдореЗрдВ  Alphai, Betaiрд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд╛рдЬрди рд╣реЛрддрд╛ рд╣реИ CiтИТAi AlphaiтИТ1,рдЬреЛ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдерди рд░рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдорд╛рдг рдпрд╣рд╛рдВ рд╣реИ : рд╕реНрд╡реАрдк рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рд╣реА рдФрд░ рд╕реНрдерд┐рд░ рд╣реИ рдпрджрд┐ рд╢рд░реНрддреЗрдВ рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ:

C1,Cn neq0,Ai,Bi neq0 (i= overline2,n),

|Ci| geq|Ai|+|Bi|


рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

\ рдмрд╛рдИрдВ \ {\ _ рд╢реБрд░реВ рдХрд░рдирд╛ {рд╕рдВрд░реЗрдЦрд┐рдд} & x_1 = 0, \\ & x_ {i-1} + \ xi x_ {i + 1} = \ dfrac {i} {n}, \ (i = \ overline # 2), n-1}), \\ & x_n = 1, \\ \ end {align} \ right

рдкрд░  xi=2,n=21ред

 package SystemOfLinearAlgebraicEquations; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.PrintWriter; import java.util.Locale; import java.util.Scanner; public class TridiagonalMatrixAlgorithm { public static void main(String[] args) throws FileNotFoundException { final int n = 21; double[] A = new double[n + 1]; double[] B = new double[n + 1]; double[] C = new double[n + 1]; double[] F = new double[n + 1]; double xi = 2; C[1] = 1; F[1] = 0; for(int i = 2; i <= n-1; i++) { A[i] = 1; C[i] = xi; B[i] = 1; F[i] = - (double) i / n; } A[n] = 0; C[n] = 1; F[n] = 1; double[] alpha = new double[n + 1]; double[] beta = new double[n + 1]; // right stroke alpha[1] = B[1] / C[1]; beta[1] = F[1] / C[1]; for (int i = 2; i <= n - 1; i++) { double denominator = C[i] - A[i] * alpha[i-1]; alpha[i] = B[i] / denominator; beta[i] = (F[i] + A[i] * beta[i - 1]) / denominator; } double[] x = new double[n + 1]; // back stroke x[n] = (F[n] + A[n] * beta[n - 1]) / (C[n] - A[n] * alpha[n - 1]); for (int i = n - 1; i >= 1; i--) { x[i] = alpha[i] * x[i + 1] + beta[i]; } // output PrintWriter pw = new PrintWriter("output.txt"); for (int i = 1; i <= n; i = i + 5) { pw.printf(Locale.US, "x%d = %f\n", i, x[i]); } pw.flush(); pw.close(); } } 

Source: https://habr.com/ru/post/hi418627/


All Articles