рдпрджрд┐ рдЖрдкрдХреЛ рддреАрди рдЕрдЬреНрдЮрд╛рдд рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдП рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ? рдкреНрд░рддреНрдпреЗрдХ рдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдФрд░ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрдирд╛рдпрд╛ рд╣реИред рд░реИрдЦрд┐рдХ рдмреАрдЬреАрдп рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреЙрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╡рд░реАрдпрддрд╛ рдХреНрдпреЛрдВ рджреА рдЬрд╛рддреА рд╣реИ?
рдкрд╣рд▓реЗ рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗ
рдЪрд▓реЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рддреАрд╕рд░реЗ рдХреНрд░рдо рдХреЗ рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рджреА рдЬрд╛рдП:
$ $ $ $ $ \ рдмрд╛рдпрд╛рдБ {\ _ \ _ рд╢реБрд░реВ {рдЧрдардмрдВрдзрди} a_ {11} x_1 + a_ {12} x_2 + a_ {13} x_3 = b_1, \\ a_ {21} x_1 + a_ {22} x_2 + a_ { 23} x_3 = b_2, \\ a_ {31} x_1 + a_ {32} x_2 + a_ {33} x_3 = b_3ред \\ \ рдЕрдВрдд {рд╕рдВрд░реЗрдЦрд┐рдд} \ рд╕рд╣реАред $ $ $ $ рдкреНрд░рджрд░реНрд╢рд┐рдд
рдЧреЙрд╕ рд╡рд┐рдзрд┐ рдореБрдЦреНрдп рд╡рд┐рдХрд░реНрдг рдХреЗ рдиреАрдЪреЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ "рдирд╖реНрдЯ" рдХрд░ рд░рд╣реА рд╣реИред рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рдкрд╣рд▓рд╛ рд╕рдореАрдХрд░рдг рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ \ dfrac {a_ {21}} {a_ {11}} $ рдЗрдирд▓рд╛рдЗрди $ рдФрд░ рджреВрд╕рд░реЗ рд╕реЗ рдШрдЯрд╛рдпрд╛ (рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛
$ рдЗрдирд▓рд╛рдЗрди $ \ dfrac {a_ {31}} {a_ {11}} $ рдЗрдирд▓рд╛рдЗрди $ рдФрд░ рддреАрд╕рд░реЗ рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЧрдпрд╛)ред рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
$ $ $ $ $ \ рдмрд╛рдпрд╛рдБ {\ _ \ _ рд╢реБрд░реВ рдХрд░рдирд╛ {рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛} a_ {11} x_1 + a_ {12} x_2 + a_ {13} x_3 = b_1, \\ a_ {22} 'x_2 + a_ 23' 'x_3 = b_2 ', \\ a_ {32}' x_2 + a_ {33} 'x_3 = b_3'ред \\ \ рдЕрдВрдд {рд╕рдВрд░реЗрдЦрд┐рдд} \ рд╕рд╣реАред $ $ $ $ рдкреНрд░рджрд░реНрд╢рд┐рдд
рдЕрдм рджреВрд╕рд░реЗ рд╕рдореАрдХрд░рдг рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ \ dfrac {a_ {32} '} {a_ {22}'} $ рдЗрдирд▓рд╛рдЗрди $ рдФрд░ рддреАрд╕рд░реЗ рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЧрдпрд╛:
$ $ $ $ $ \ рдмрд╛рдпрд╛рдБ {\ _ \ _ рд╢реБрд░реВ рдХрд░рдирд╛ {рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛} a_ {11} x_1 + a_ {12} x_2 + a_ {13} x_3 = b_1, \\ a_ {22} 'x_2 + a_ 23' 'x_3 = b_2 ', \\ a_ {33}' 'x_3 = b_3' 'ред \\ \ рдЕрдВрдд {рд╕рдВрд░реЗрдЦрд┐рдд} \ рд╕рд╣реАред $ $ $ $ рдкреНрд░рджрд░реНрд╢рд┐рдд
рд╣рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдкреНрд░рдгрд╛рд▓реА рдорд┐рд▓реА, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ x_3 $ рдЗрдирд▓рд╛рдЗрди $ рддреЛ
$ рдЗрдирд▓рд╛рдЗрди $ x_2 $ рдЗрдирд▓рд╛рдЗрди $ рдФрд░
$ рдЗрдирд▓рд╛рдЗрди $ x_1 $ рдЗрдирд▓рд╛рдЗрди $ ред
рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдЧрд╛: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд┐рдХрд░реНрдг рддрддреНрд╡ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдХрд░реЗрдВ
$ рдЗрдирд▓рд╛рдЗрди $ a_ {11} = 0 $ рдЗрдирд▓рд╛рдЗрди $ ? рдХреНрдпрд╛ рдкреНрд░рд╕рд┐рджреНрдз рдЧреЙрд╕ рд╡рд┐рдзрд┐ рд╡рд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ?
рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ! рдЖрдЗрдП рдвреВрдВрдврддреЗ рд╣реИрдВ
$ рдЗрдирд▓рд╛рдЗрди $ \ max | a_ {1j} | $ рдЗрдирд▓рд╛рдЗрди $ рдФрд░ рд╕реНрд╡реИрдк рдХрд░реЗрдВ
$ рдЗрдирд▓рд╛рдЗрди $ j $ рдЗрдирд▓рд╛рдЗрди $ рд╡реЗрдВ рдФрд░ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ (рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рдХреА рд╣рд╛рдирд┐ рдХреЗ рдмрд┐рдирд╛, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐
$ рдЗрдирд▓рд╛рдЗрди $ \ max | a_ {1j} | = a_ {13} $ рдЗрдирд▓рд╛рдЗрди $ )ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм рд╕рдм рдХреБрдЫ рд╣реЛ
$ рдЗрдирд▓рд╛рдЗрди $ a_ {1j} = 0 $ рдЗрдирд▓рд╛рдЗрди $ рдпрд╣ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧреБрдгрд╛рдВрдХ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдХ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рддреАрд╕рд░реЗ рд╕рдореАрдХрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
рдЕрдзрд┐рдХрддрдо рдореЛрдбреБрд▓реЛ рддрддреНрд╡ рдХреА рдЦреЛрдЬ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рдпрд╛рдиреА, рдкрд░ рдирд┐рдкрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ k $ рдЗрдирд▓рд╛рдЗрди $ -рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддрд┐ рджреЗрдЦрдирд╛
$ рдЗрдирд▓рд╛рдЗрди $ \ max | a_ {kj} | $ рдЗрдирд▓рд╛рдЗрди $ рдлрд┐рд░ рдмрджрд▓реЛ
$ рдЗрдирд▓рд╛рдЗрди $ j $ рдЗрдирд▓рд╛рдЗрди $ -s рдФрд░
$ рдЗрдирд▓рд╛рдЗрди $ k $ рдЗрдирд▓рд╛рдЗрди $ рд╡реЗрдВ рдкрдВрдХреНрддрд┐ред рд╡рд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓рдо рдореЗрдВ рдЕрдзрд┐рдХрддрдо рддрддреНрд╡ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЙрд▓рдо рдореЗрдВ рдореБрдЦреНрдп рддрддреНрд╡ рдХреА рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде рдЧреЙрд╕ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
$ рдЗрдирд▓рд╛рдЗрди $ k $ рдЗрдирд▓рд╛рдЗрди $ -рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддрд┐ рджреЗрдЦрдирд╛
$ рдЗрдирд▓рд╛рдЗрди $ \ max | a_ {ik} | $ рдЗрдирд▓рд╛рдЗрди $ , рдлрд┐рд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реНрддрдВрднреЛрдВ рдХреЛ рдмрджрд▓реЗрдВред рд▓реЗрдХрд┐рди рдХреБрдЫ рдХреЙрд▓рдо рдореЗрдВ рдмрджрд▓рддреЗ рдХреЙрд▓рдо рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ \ рдЕрд▓реНрдлрд╛ $ рдЗрдирд▓рд╛рдЗрди $ (рддрдм рдЪрд░ рдХреЗ рд╕рдЯреАрдХ рдХреНрд░рдо рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред
рдПрдХ рд╕рд░рд▓ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.Locale; import java.util.Scanner; public class GuassianEliminationSearchMainElementsAtString { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(new FileReader("input.txt")); sc.useLocale(Locale.US); int n = sc.nextInt(); double[][] a = new double[n + 1][n + 1]; double[] b = new double[n + 1];
рдЧреЙрд╕ рдХреНрдпреЛрдВ?
SLAE рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ Cramer рд╡рд┐рдзрд┐ рд╣реИред рдЗрд╕рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рдХреЛрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрдирд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдЪрд░ рдХреЗ рдорд╛рдиреЛрдВ рдХреА рддреБрд░рдВрдд рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдореВрд▓ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рддрд╣рдд, рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
$$ рдкреНрд░рджрд░реНрд╢рди $ $ \ Delta = \ _ {рд╢реБрд░реВ {vmatrix} a_ {11} & a_ {12} & a_ {13} \\ a_ {21} & a_ {22} & a_ {23} \\ a_ 31 # & a_ {32} & a_ {33} \\ \ end {vmatrix}, \ Delta_1 = \ start {vmatrix} b_1 & a_ {12} & a_ {13} \\ b_2 & a_ {22} & a_ {23} \ _ \ b_3 & a_ {32} & a_ {33} \\ \ end {vmatrix}, $ $ $ $ рдкреНрд░рджрд░реНрд╢рд┐рдд
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред \\ \ рдЕрдВрдд {vmatrix}, \ Delta_3 = \ start {vmatrix} a_ {11} & a_ {12} & b_1 \\ a_ {21} & a_ {22} & b_2 \\ a_ 31} & a_ {32 } & b_3 \\ \ end {vmatrix}, $ $ рдкреНрд░рджрд░реНрд╢рди $ $
$ $ рдкреНрд░рджрд░реНрд╢рди $ $ x_i = \ dfrac {\ Delta_i} {\ Delta}ред $ $ рдкреНрд░рджрд░реНрд╢рди $ $
рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ - рдПрдХ рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рдХреНрдпрд╛ рд╣реИ?
рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдХ
$ рдЗрдирд▓рд╛рдЗрди $ A = (a_ {ij}) $ рдЗрдирд▓рд╛рдЗрди $ рдПрдХ рд░рд╛рд╢рд┐ рд╣реИ
$$ $ $ $ \ _ \ _ рд╕реАрдорд╛рдПрдВ {{1 \ leq i_1 <\ dots <i_n \ leq n} (-1) ^ {N (i_1, \ dots, i_n)} a_ {1i_1}} / рдбреЙрдЯреНрд╕ a_ {ni_n}, рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ $ $ рдкреНрд░рджрд░реНрд╢рди $ $
рдЬрд╣рд╛рдБ
$ рдЗрдирд▓рд╛рдЗрди $ N (i_1, \ dots, i_n) $ рдЗрдирд▓рд╛рдЗрди $ - рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб
$ рдЗрдирд▓рд╛рдЗрди $ i_1, \ dots, i_nред $ рдЗрдирд▓рд╛рдЗрди $
рдирд┐рд░реНрдзрд╛рд░рдХ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ n! $ рдЗрдирд▓рд╛рдЗрди $ рд╢рд░реНрддреЛрдВред рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ n + 1 $ рдЗрдирд▓рд╛рдЗрди $ рдирд┐рд░реНрдзрд╛рд░рдХреЛрдВред рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рд╕реНрддрд░ рдкрд░
$ рдЗрдирд▓рд╛рдЗрди $ n $ рдЗрдирд▓рд╛рдЗрди $ рдпрд╣ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм
$ рдЗрдирд▓рд╛рдЗрди $ n = 12 $ рдЗрдирд▓рд╛рдЗрди $ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрди рдЬрд╛рддреА рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ 12! (12 + 1) = 6227020800, $ рдЗрдирд▓рд╛рдЗрди $ рдЬрдмрдХрд┐ рдЧреЛрдореЗрдЯреНрд╕ рдПрд╕рд┐рдореНрдкреЛрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ n ^ 3 $ рдЗрдирд▓рд╛рдЗрди $ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
$ рдЗрдирд▓рд╛рдЗрди $ 12 ^ 3 = 1728 $ рдЗрдирд▓рд╛рдЗрди $ рд╕рдВрдЪрд╛рд▓рдиред
Iterative рддрд░реАрдХреЗ
рддрдерд╛рдХрдерд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐рдпрд╛рдБ SLAE рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рд╡реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕рдЯреАрдХ рдЙрддреНрддрд░ рдХреЗ рдХрд░реАрдм рди рд╣реЛред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рдордирдорд╛рдирд╛ рд╡реЗрдХреНрдЯрд░ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ
$ рдЗрдирд▓рд╛рдЗрди $ x ^ 0 $ рдЗрдирд▓рд╛рдЗрди $ рдПрдХ рд╢реВрдиреНрдп рд╕рдиреНрдирд┐рдХрдЯрди рд╣реИред рдЗрд╕ рдкрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
$ рдЗрдирд▓рд╛рдЗрди $ x ^ 1 $ рдЗрдирд▓рд╛рдЗрди $ - рдпрд╣ рдкрд╣рд▓рд╛ рдЕрдиреБрдорд╛рди рд╣реИред рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЧрдгрдирд╛рдПрдБ рдХрдм рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВ
$ рдЗрдирд▓рд╛рдЗрди $ || x ^ k - x ^ {k + 1} || <\ _ varepsilon $ рдЗрдирд▓рд╛рдЗрди $ рдЬрд╣рд╛рдБ
$ рдЗрдирд▓рд╛рдЗрди $ \ varepsilon $ рдЗрдирд▓рд╛рдЗрди $ - рдХреБрдЫ рд╕реЗрдЯ рд╡реИрд▓реНрдпреВ рдкрд╣рд▓реЗ рд╕реЗред рдЕрдВрддрд┐рдо рдЕрд╕рдорд╛рдирддрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╣рдорд╛рд░рд╛ "рд╕реБрдзрд╛рд░" рд▓рдЧрднрдЧ рдирдЧрдгреНрдп рд╣реИред
рд▓реЛрдХрдкреНрд░рд┐рдп рдЬреИрдХреЛрдмреА рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ SLAE рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
$ $ $ $ $ \ _ \ _ рд╕реАрдорд╛рдПрдВ {{j \ leq n} a_ {ij} x_j = b_i, \ i = \ overline {1, n} рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред $ $ рдкреНрд░рджрд░реНрд╢рди $ $
рд╡рд┐рдпреЛрдЬреНрдп
$ рдЗрдирд▓рд╛рдЗрди $ рдореИрдВ $ рдЗрдирд▓рд╛рдЗрди $ -рддрдмреНрдж рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░реЗрдВ:
$ $ рдкреНрд░рджрд░реНрд╢рди $ $ x_i = \ dfrac {b_i - \ sum \ limit_ {j \ neq i} a_ {ij} x_j} {a_ {ii}}, \ i = \ overline {1, n}ред $ $ $ $ рдкреНрд░рджрд░реНрд╢рдиред $
рдЕрдм рдмрд╕ рдЪрд░ рдкрд░ "рдХрд╛рдЙрдВрдЯрд░" рд▓рдЯрдХрд╛рдПрдВ рдФрд░ рдЬреИрдХреЛрдмреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
$ $ $ $ $ x_i ^ k = \ dfrac {b_i - \ sum \ limit_ {j \ neq i} a_ {ij} x_j ^ k} {a_ {ii}}, \ i = \ _ toline {1, n} \ k = 0,1, \ dotsред $$ рдкреНрд░рджрд░реНрд╢рди $ $
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рдореБрдЦреНрдп рд╡рд┐рдХрд░реНрдг рдХреЗ рд╕рд╛рде рд╢реВрдиреНрдп рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реИред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдЬреИрдХреЛрдмреА рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ $ рдЗрдирд▓рд╛рдЗрди $ \ varepsilon $ рдЗрдирд▓рд╛рдЗрди $ рдПрдХ рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рддрдерд╛рдХрдерд┐рдд рдорд╢реАрди рдПрдкреНрд╕рд┐рд▓реЙрди рдХреЛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред import java.io.FileNotFoundException; import java.io.FileReader; import java.io.PrintWriter; import java.util.Locale; import java.util.Scanner; public class JacobiMethod { public static void main(String[] args) throws FileNotFoundException { Scanner sc = new Scanner(new FileReader("input.txt")); sc.useLocale(Locale.US); int n = sc.nextInt(); double[][] a = new double[n + 1][n + 1]; double[] b = new double[n + 1]; double[] x0 = new double[n + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { a[i][j] = sc.nextDouble(); } b[i] = sc.nextDouble(); x0[i] = b[i] / a[i][i]; } double EPS = EPSCalc(); double[] x = new double[n+1]; double norm = Double.MAX_VALUE; int counter = 0; do{ for(int i = 1; i <= n; i++) { double sum = 0; for(int j = 1; j <= n; j++) { if(j == i) continue; sum += a[i][j] * x0[j]; } x[i] = (b[i] - sum) / a[i][i]; } norm = normCalc(x0, x, n); for(int i = 1; i <= n; i++) { x0[i] = x[i]; } counter++; } while(norm > EPS); PrintWriter pw = new PrintWriter("output.txt"); pw.println(counter + " iterations"); for (int i = 1; i <= n; i++) { pw.printf(Locale.US, "x%d = %f\n", i, x0[i]); } pw.flush(); pw.close(); } static double normCalc(double []x1, double[] x2, int n) { double sum = 0; for(int i = 1; i <= n; i++) { sum += Math.abs(x1[i] - x2[i]); } return sum; } static double EPSCalc () { double eps = 1; while (1 + eps > 1) { eps /= 2; } return eps; } }
рдЬреИрдХреЛрдмреА рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕рдВрд╢реЛрдзрди рд╡рд┐рд╢реНрд░рд╛рдо рд╡рд┐рдзрд┐ рд╣реИред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡-рдЪрдпрдирд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдорджрдж рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЖрдЗрдП рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
рдореВрд▓ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ, рд╣рдо рдлрд┐рд░ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВ
$ рдЗрдирд▓рд╛рдЗрди $ x $ рдЗрдирд▓рд╛рдЗрди $ , рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ
$ рдЗрдирд▓рд╛рдЗрди $ \ omega $ рдЗрдирд▓рд╛рдЗрди $ :
$ $ $ $ $ x_i ^ k = \ dfrac {\ omega \ left (b_i - \ sum \ limit_ {j = 1} ^ {i-1} a_ {ij} x_j ^ {k +}} - \ sum \ limit_ {j = i + 1} ^ n a_ {ij} x_j ^ k \ right)} {a_ {ii}} + (1- \ _ omega) x_i ^ k, \ i = \ overline {1, n}, \ k = 0,1, \ dotsред $ $ $ $ рдкреНрд░рджрд░реНрд╢рди
рдкрд░
$ рдЗрдирд▓рд╛рдЗрди $ \ omega = 1 $ рдЗрдирд▓рд╛рдЗрди $ рдпрд╣ рд╕рдм рдПрдХ рдЬреИрдХреЛрдмреА рдкрджреНрдзрддрд┐ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ, рд╣рдо рдХреБрдЫ тАЬрдЕрдЪреНрдЫреЗтАЭ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗ
$ рдЗрдирд▓рд╛рдЗрди $ \ omega $ рдЗрдирд▓рд╛рдЗрди $ ред рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
$ рдЗрдирд▓рд╛рдЗрди $ рдПрд╕ $ рдЗрдирд▓рд╛рдЗрди $ рдФрд░ рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ
$ рдЗрдирд▓рд╛рдЗрди $ \ omega \ (0,2) $ рдЗрдирд▓рд╛рдЗрди $ , рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╣рдо рдорд╛рдирджрдВрдбреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ
$ рдЗрдирд▓рд╛рдЗрди $ || x ^ {k + 1} -x ^ k ||, \ k = \ overline {1, s}} рдЗрдирд▓рд╛рдЗрди $ ред рдЗрди рдорд╛рдирджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ
$ рдЗрдирд▓рд╛рдЗрди $ \ omega $ рдЗрдирд▓рд╛рдЗрди $ , рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЕрдкрдиреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред
рдЬрд╛рд╡рд╛ рд╡рд┐рдзрд┐ рдЪрд┐рддреНрд░рдг:
рдпрд╣рд╛рдВ $ рдЗрдирд▓рд╛рдЗрди $ s = 5 $ рдЗрдирд▓рд╛рдЗрди $ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.PrintWriter; import java.util.Locale; import java.util.Scanner; public class SuccessiveOverRelaxation { public static void main(String[] args) throws FileNotFoundException { Scanner sc = new Scanner(new FileReader("input.txt")); sc.useLocale(Locale.US); int n = sc.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] = sc.nextDouble(); } b[i] = sc.nextDouble(); } double EPS = EPSCalc(); double w = bestRelaxationParameterCalc(a, b, n); double[] x = new double[n + 1]; int counter = 0; double maxChange = Double.MAX_VALUE; do { maxChange = 0; for (int i = 1; i <= n; i++) { double firstSum = 0; for (int j = 1; j <= i - 1; j++) { firstSum += a[i][j] * x[j]; } double secondSum = 0; for (int j = i + 1; j <= n; j++) { secondSum += a[i][j] * x[j]; } double lastTerm = (1 - w) * x[i]; double z = (b[i] - firstSum - secondSum); double temp = (w * z) / a[i][i] + lastTerm ; maxChange = Math.max(maxChange, Math.abs(x[i] - temp)); x[i] = temp; } counter++; } while(maxChange > EPS); PrintWriter pw = new PrintWriter("output.txt"); pw.println(w + " is the best relaxation parameter"); pw.println(counter + " iterations"); for (int i = 1; i <= n; i++) { pw.printf(Locale.US, "x%d = %f\n", i, x[i]); } pw.flush(); pw.close(); } static double bestRelaxationParameterCalc(double[][]a, double[]b, int n) { double bestW = 1, bestMaxChange = Double.MAX_VALUE; for (double w = 0.05; w <= 2; w += 0.05) { double[] x = new double[n + 1]; double maxChange = 0; for (int s = 0; s < 5; s++) { maxChange = 0; for (int i = 1; i <= n; i++) { double firstSum = 0; for (int j = 1; j <= i - 1; j++) { firstSum += a[i][j] * x[j]; } double secondSum = 0; for (int j = i + 1; j <= n; j++) { secondSum += a[i][j] * x[j]; } double lastTerm = (1 - w) * x[i]; double z = (b[i] - firstSum - secondSum); double temp = (w * z) / a[i][i] + lastTerm; maxChange = Math.max(maxChange, Math.abs(x[i] - temp)); x[i] = temp; } } if (maxChange < bestMaxChange) { bestMaxChange = maxChange; bestW = w; } } return bestW; } static double EPSCalc () { double eps = 1; while (1 + eps > 1) { eps /= 2; } return eps; } }
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
SLAE рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧрдореВрд▓ рд╡рд┐рдзрд┐, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЛ рджреЛ "рд╕рд░рд▓" рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реВрддреНрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ; рд╕реНрд╡реАрдк рд╡рд┐рдзрд┐, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрддрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреНрд░рд┐рдбрд┐рдУрдЧрдирд▓ рдореИрдЯреНрд░реАрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд░ рдХреЛрдИ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред