Il est bien sûr très difficile de décrire en détail toutes les méthodes, mais ce sujet me semble intéressant et extrêmement important, car tout le monde est confronté au problème de trouver une solution assez souvent. Dans le premier article
Pourquoi Gauss? la méthode de Gauss a été décrite (y compris avec des modifications) et quelques méthodes itératives. Cependant, étant donné la critique de
Sinn3r , j'ai décidé de décrire également d'autres méthodes.
Recommencer
Alors, encore une fois, nous devons résoudre un système d'équations algébriques linéaires d'ordre
. L'une des méthodes numériques les plus frappantes est une méthode qui utilise
-décomposition de la matrice.
Cette méthode intuitive est la suivante. Supposons que nous ayons un système d'équations algébriques linéaires (écrites sous forme vectorielle):
où
- une matrice
non dégénérée terrible et déroutante. Nous le représentons comme le produit de deux autres matrices:
Est une matrice triangulaire inférieure, et
Est la matrice triangulaire supérieure. Alors évidemment le système prend la forme:
Si désigné
, la solution du système d'origine est trouvée à partir de la solution de deux autres systèmes:
L'avantage de cette méthode est que les solutions de deux systèmes auxiliaires sont très simples (du fait que les matrices
et
- triangulaire). Mais est-il facile de trouver ces matrices? Ainsi, la tâche de résoudre le système est réduite à la tâche de construire
-décompositions pour la matrice.
Description de l'algorithme d'application
-la décomposition est décrite de manière suffisamment détaillée
ici . En attendant, nous examinerons une autre méthode.
Méthode de la racine carrée
Nous imposons des conditions supplémentaires à la matrice
. Nous exigeons qu'il soit symétrique, c'est-à-dire
ou
. Une telle matrice peut être représentée comme
où
- matrice triangulaire supérieure,
Est une matrice
réelle diagonale, et ses éléments diagonaux sont égaux à l'unité en valeur absolue. De même, le système d'origine est réduit à deux autres:
qui sont également résolus élémentairement en raison des propriétés des matrices
et
.
La dérivation des formules algorithmiques est assez lourde et reste au-delà du champ de publication. Si vous le souhaitez, vous pouvez les trouver
ici .
Exemple de code Java qui implémente la méthode de balayage:
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];
Méthode de balayage
En utilisant cette méthode, seuls les systèmes spécifiques avec pas plus de trois inconnues dans chaque ligne peuvent être résolus. Autrement dit, avec le système
matrice
est tridiagonal:
A = \ begin {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}.
Notez simplement qu'il existe une connexion de solutions voisines:
- quelques nombres inconnus. Si nous les trouvons et une seule variable, nous pouvons trouver toutes les autres.
Dérivation de formules
présent
ici . Eh bien, à la fin
Notez que dans les formules de recherche
il y a une division par numéro
qui peut s'avérer être zéro qui doit être suivi. Mais en fait, l'
énoncé suivant est vrai, la preuve en est
ici : l'algorithme de balayage est correct et stable si les conditions sont remplies:
Considérez le code du programme Java qui résout le système.
\ left \ {\ begin {aligné} & x_1 = 0, \\ & x_ {i-1} + \ xi x_ {i + 1} = \ dfrac {i} {n}, \ (i = \ overline {2, n-1}), \\ & x_n = 1, \\ \ end {aligné} \ à droite.
à
.
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];