Skip to main content
LibreTexts - Ukrayinska

4.2: Лінійні рівняння

  • Page ID
    79646
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    У фізиці нас часто закликають вирішувати лінійні рівняння виду

    \[\mathbf{A} \vec{x} = \vec{b},\]

    де\(\mathbf{A}\) деяка\(N\times N\) матриця, і обидва\(\vec{x}\) і\(\vec{b}\) є векторами для довжини\(N\). З огляду на\(\mathbf{A}\) і\(\vec{b}\), мета полягає в вирішенні для\(\vec{x}\).

    Це важливий і корисний навик розпізнавати лінійні системи рівнянь, коли вони виникають у задачах фізики. Такі рівняння можуть виникати в багатьох різноманітних контекстах; нижче ми наведемо пару простих прикладів.

    Приклад\(\PageIndex{1}\)

    Припустимо, є набір\(N\) електрично заряджених точкових частинок в положеннях\(\{\vec{R}_0, \vec{R}_1, \dots, \vec{R}_{N-1}\}\). Ми не знаємо значення електричних зарядів, але ми можемо виміряти електричний потенціал в будь-якій точці\(\vec{r}\). Електричний потенціал задається

    \[\phi(\vec{r}) = \sum_{j=0}^{N-1} \frac{q_j}{|\vec{r}-\vec{R}_j|}.\]

    Якщо ми виміряємо потенціал на\(N\) позиціях\(\{\vec{r}_0, \vec{r}_1, \dots, \vec{r}_{N-1}\}\), як можна вивести\(\{q_0,\dots,q_{N-1}\}\) нарахування?

    Рішення

    Для цього напишемо рівняння електричного потенціалу в точці\(\vec{r}_i\) як:

    \[\phi(\vec{r}_i) = \sum_{j=0}^{N-1} \left[\frac{1}{|\vec{r}_i-\vec{R}_j|}\right] \, q_j.\]

    Це має вигляд\(\mathbf{A} \vec{x} = \vec{b}\), де\(\mathbf{A}_{ij} \equiv \frac{1}{|\vec{r}_i-\vec{R}_j|}\)\(\vec{b}_i \equiv \phi(\vec{r}_i)\), і невідомі є\(\vec{x}_j = q_j\).

    Приклад\(\PageIndex{2}\)

    Лінійні системи рівнянь зазвичай з'являються в теорії кіл. Для прикладу розглянемо наступну паралельну схему блоків\(N\) живлення і опорів:

    clipboard_eed50e5556844af65a0b0863f068a4b99.png
    Малюнок\(\PageIndex{1}\)

    Припустимо, що напруга на правій стороні ланцюга є\(V_{0}=0\). З огляду на\(\{R_0, \dots, R_{N-1}\}\) опори і ЕРС\(\{\mathcal{E}_0, \dots, \mathcal{E}_{N-1}\}\), як ми знаходимо ліву напругу\(V\) і струми\(\{\mathcal{I}_0, \dots, \mathcal{I}_{N-1}\}\)?

    Рішення

    Слідуємо звичним законам теорії кіл. Кожна гілка паралельного контуру підпорядковується закону Ома,

    \[\mathcal{I}_j R_j + V = \mathcal{E}_j.\]

    Крім того, течії підкоряються закону Кірхофа (збереження струму), тому

    \[\sum_{j=0}^{N-1} \mathcal{I}_j = 0.\]

    Ми можемо об'єднати ці\(N+1\) рівняння в матричне рівняння виду\(\mathcal{A}\,\vec{x} = \vec{b}\)

    \[\begin{bmatrix}R_0 & 0 & \cdots & 0 & 1 \\ 0 & R_1 & \cdots & 0 & 1 \\ \vdots & \vdots &\ddots & \vdots & \vdots \\ 0& 0& \cdots & R_{N-1} & 1 \\ 1& 1& \cdots & 1& 0\end{bmatrix} \begin{bmatrix}\mathcal{I}_0 \\ \mathcal{I}_1 \\ \vdots \\ \mathcal{I}_{N-1} \\ V\end{bmatrix} = \begin{bmatrix}\mathcal{E}_0 \\ \mathcal{E}_1 \\ \vdots \\ \mathcal{E}_{N-1} \\ 0\end{bmatrix}\]

    Тут невідомий вектор\(\vec{x}\) складається з\(N\) струмів, що проходять через гілки ланцюга, і потенціалу\(V\).

    4.2.1 Пряме рішення

    Зіткнувшись із системою лінійних рівнянь, перший інстинкт зазвичай вирішується\(\vec{x}\) шляхом інвертування матриці\(\mathbf{A}\):

    \[\mathbf{A} \vec{x} = \vec{b} \quad\Rightarrow\quad \vec{x} = \mathbf{A}^{-1}\, \vec{b}.\]

    Не робіть цього. Це математично правильно, але чисельно неефективно. Як ми побачимо, обчислення матриці, оберненої\(\mathbf{A}^{-1}\), а потім праворуч множення на\(\vec{b}\), включає більше кроків, ніж просто рішення рівняння безпосередньо

    Для розв'язання системи лінійних рівнянь використовують функцію розв'язання з модуля scipy.linalg. (Вам потрібно буде імпортувати scipy.linalg явно, оскільки він є підмодулем Scipy і не імпортується нашим звичайним з оператора scipy import *.) Ось приклад:

    >>> A = array([[1., 2., 3.], [2., 4., 0.], [1., 3., 9.]])
    >>> b = array([6., 6., 9.])
    >>>
    >>> import scipy.linalg as lin
    >>> x = lin.solve(A, b)
    >>> x
    array([ 9., -3.,  1.])
    

    Ми можемо переконатися, що це дійсно рішення:

    >>> dot(A, x)              # This should equal b.
    array([ 6.,  6.,  9.])
    

    Прямий розв'язувач використовує алгоритм, відомий як гаусова елімінація, про який ми розповімо в наступній статті. Час виконання гауссова елімінації -\(N\) це\(O(N^{3})\), де розмір задачі лінійної алгебри.

    Причина, по якій ми уникаємо вирішення лінійних рівнянь шляхом інвертування матриці,\(\mathbf{A}\) полягає в тому, що матриця зворотна сама обчислюється за допомогою алгоритму гаусової елімінації! Якщо ви все одно збираєтеся використовувати гаусову елімінацію, набагато краще застосувати алгоритм безпосередньо на бажане\(\mathbf{A}\) і\(b\). Рішення шляхом обчислення\(\mathbf{A}^{-1}\) передбачає приблизно в два рази більше обчислювальних кроків.