Mesurer sept fois - couper une fois ou utiliser le dicton dans la pratique

Je me suis assis sur le cours Coursera. Le cours était destiné aux débutants en Java, et dans l'un des didacticiels vidéo, le sujet 7 étapes pour résoudre les problÚmes a été soulevé .

Moi, en toute conscience, j'ai écouté le tutoriel vidéo, je me suis dit, cette affaire est allée loin et depuis longtemps.

Le reste du cours a été facile, détendu. Mais, sur l'un des sujets de l'université, à savoir la soi-disant «Programmation scientifique», la tùche suivante est apparue:
Résoudre un systÚme d'équations linéaires Ax=ben utilisant l'expansion de matrice suivante A:

A=LU,

OĂč LEst la matrice triangulaire infĂ©rieure, et UEst la matrice triangulaire supĂ©rieure.

Le sujet de l'algÚbre linéaire, que nous avons abordé au 1er cours. Franchement, je me suis souvenu des principes généraux des opérations avec des matrices, des vecteurs et le saint des saints - la méthode de Gauss. Si vous y réfléchissez avec le cerveau, alors nous n'avons étudié aucune décomposition LU, mais la méthode "google" aide toujours. Sauvé, jusqu'à ce point.

J'ai trouvĂ© un algorithme gĂ©nĂ©ral pour trouver des matrices Let U, mais Ă  trois heures et demie du matin, aucun cafĂ© ne m'a donnĂ© l'occasion de le mettre en Ɠuvre correctement (Ă©tant donnĂ© que nous y avons codĂ© sur Octave). En fin de compte, j'ai paniquĂ© et j'ai dĂ©cidĂ© d'Ă©couter nĂ©anmoins le proverbe intelligemment nommĂ©.

1. DĂ©crivez le problĂšme Ă  la main


Tout ce qui vous manque dans la vie, c'est de comprendre quel est rĂ©ellement le problĂšme. Prenons un exemple du problĂšme ci-dessus et Ă©crivons-le sur une feuille de papier. Dans le bon sens, les conditions suivantes d'existence de matrices doivent ĂȘtre rempliesL et U:

- la matrice inverse doit existerA, Je veux dire ∃A−1;
- tous les mineurs majeurs ne doivent pas ĂȘtre dĂ©gĂ©nĂ©rĂ©s, c'est-Ă -direΔ(1,...,n)≠0

Eh bien, c'est pourquoi nous avons au moins besoin d'un «test de dupes», car il y a sûrement des gens intelligents qui veulent utiliser la matrice qui ne nous convient pas. Mais nous allons omettre cela pour l'instant.

Le problĂšme est clair pour nous: trouver des matricesL et Uqui tombera dans les conditions ci-dessus. AprĂšs avoir essayĂ© de google les mĂ©thodes de solution, il est peu probable que vous puissiez implĂ©menter correctement l'algorithme la premiĂšre fois (si vous n'ĂȘtes pas bon en algĂšbre linĂ©aire). AprĂšs avoir traversĂ© des tonnes de tentatives, nous dĂ©velopperons trĂšs probablement une sĂ©quence d'actions pour rĂ©soudre notre problĂšme, puis nous passerons Ă  l'Ă©tape 2.

2. DĂ©crivez ce que vous avez fait


Prenons la matrice comme exemple

A=(1230−241−10).



Maintenant, nous lui appliquons notre méthode de Gauss et éliminons les éléments inutiles de la 3Úme ligne, en soustrayant la premiÚre ligne de celle-ci, multipliée par le rapport du premier élément de 3 lignes au premier élément de 1 ligne:

a3=a3−a1⋅a31a11.



Maintenant, débarrassez-vous du deuxiÚme élément de la ligne 3 avec une action similaire:

a3=a3−a2⋅a32a22.



En conséquence, nous obtenons la matrice

A=(1230−24000)=U.



Et maintenant, les coefficients que nous avons trouvés (le résultat du rapport des éléments aijajj) prendre les valeurs de la matrice L, et obtenir

L=(1000101121).



En regardant Ă  travers le modĂšle, n'est-ce pas?

3. Trouver des modĂšles


À ce stade, vous retournerez probablement aux Ă©tapes 1 et 2, car le modĂšle que vous n'avez pas toujours trouvĂ© sera vrai pour tous les cas. Mais rien, car cela n'a pas fonctionnĂ©, cela se produira ensuite.

Ainsi, sur la base d'un exemple, nous pouvons formuler le modĂšle d'algorithme / solution suivant:

1. Définir une matrice carréeA,ne ordre;
2. DĂ©finissez la matriceL=IoĂč I- matrice d'identitĂ© ne ordre;
3. DĂ©finissez la matriceU=A;
4. Nous appliquons les transformations successives suivantes aux matrices, à condition que{i=2,
,nj=1,
,i

lij=uijujjui=ui−uj⋅lij,



À n=3on a:

L=(100l2110l31l321),U=(u11u12u130u22u2300u33)



4. VĂ©rification du modĂšle / algorithme


Il y a un algorithme - il y a des millions de matrices pour le tester! Vous ne pouvez pas vous inquiĂ©ter de ce modĂšle, c'est Ă©videmment vrai (personnellement testĂ© sur la plus non dĂ©gĂ©nĂ©rĂ©e des matrices possibles). Mais souvenez-vous: dĂ©pĂȘchez-vous - vous faites rire les gens . VĂ©rifiez donc toujours les modĂšles que vous avez crĂ©Ă©s afin de ne pas continuer Ă  sauter comme un sacrĂ© au tout dĂ©but.

5. Traduction de l'algorithme en code


L'étape évidente, tout ce dont vous avez besoin est souvent déjà dans la syntaxe du langage, et sinon, personne ne vous dérange pour créer des classes et des fonctions pour résoudre ce problÚme, alors vous avez un algorithme. Depuis que j'ai implémenté cet algorithme dans le cadre d'un programme universitaire universitaire, je ne pouvais utiliser que Octave pour l'implémentation, donc tout le code que je vous présente est dans sa syntaxe (il est trÚs similaire à Python, donc j'utiliserai son surlignage pour le formatage):

A = input("Enter the matrix A: ")
numOfRows = size(A, 1)
numOfCols = size(A, 2)

if numOfRows ~= numOfCols
    disp("Wrong matrix.")
else
    n = numOfCols
    disp("----------------")
    L = eye(3)
    disp("Making U = A")
    U = A
    disp("----------------")

    for i=2:n
        disp("Step "), disp(i-1)
        for j=1:i-1
            L(i,j) = U(i,j)/U(j,j)
            U(i,:) = U(i,:) - U(j,:)*L(i,j)
        end
        disp("----------------")
    end

    disp("Check the answer of L*U: "), disp(L*U)
end

6. Recherche d'Ă©checs de tests


Vous devriez toujours essayer de «casser» votre code. Ici (évidemment) il n'y a pas de «protection complÚte contre le fou», mais j'ai pris comme base l'hypothÚse que la matrice initialement correcte sera introduite.

À cette Ă©tape, vous devriez trouver toutes les erreurs, inexactitudes possibles dans votre code, Ă  la suite desquelles le biais de l'algorithme construit peut Ă©galement ĂȘtre rĂ©vĂ©lĂ©. Par consĂ©quent, ici, vous devriez essayer autant d'omissions qui auraient pu ĂȘtre faites.

7. Déboguer les tests ayant échoué


La plus logique et probablement attendue des Ă©tapes. Le code doit ĂȘtre biaisĂ© et l'algorithme corrigĂ©. Il n'y a rien de plus Ă  ajouter ici.

Conclusion


Je peux dire qu'il est peu probable que je prenne jamais au sĂ©rieux cette approche pour rĂ©soudre des problĂšmes, sinon pour mon Ă©tat de somnolence. Mais il vaut la peine de prĂȘter attention Ă  cette mĂ©thode - elle est courte, et toute sa pĂ©nibilitĂ© consiste uniquement dans le fait qu'elle doit ĂȘtre utilisĂ©e.

Remarque


Merci aux manuels d'algÚbre linéaire pour le matériel pour résoudre le problÚme.

All Articles