Позволять — квадратная система n линейных уравнений, где:
Когда и известны, и неизвестно, мы можем использовать метод Якоби для аппроксимации . Вектор обозначает наше первоначальное предположение для (часто для ). Обозначим как k -е приближение или итерация , и это следующая (или k +1) итерация .
Формула на основе элементов для каждой строки таким образом:
Вычисление требует каждого элемента в кроме себя. В отличие от метода Гаусса–Зейделя , мы не можем перезаписать с , так как это значение понадобится для остальной части вычислений. Минимальный объем памяти — два вектора размера n .
Input:initial guess x(0) to the solution, (diagonal dominant) matrix A, right-hand side vector b, convergence criterion
Output:solution when convergence is reachedComments: pseudocode based on the element-based formula above
k = 0while convergence not reached dofori := 1 step until n doσ = 0forj := 1 step until n doifj ≠ ithenσ = σ + aijxj(k)endendxi(k+1) = (bi − σ) / aiiend
increment kend
Стандартное условие сходимости (для любого итерационного метода) — это когда спектральный радиус итерационной матрицы меньше 1:
Достаточным (но не необходимым) условием сходимости метода является то, что матрица A является строго или неприводимо диагонально доминантной . Строгое доминирование диагонали строк означает, что для каждой строки абсолютное значение диагонального термина больше суммы абсолютных значений других терминов:
Метод Якоби иногда сходится, даже если эти условия не выполняются.
Если мы выберем (0, 0, 0, 0) в качестве начального приближения, то первое приближенное решение будет иметь вид
Используя полученные аппроксимации, итерационная процедура повторяется до тех пор, пока не будет достигнута желаемая точность. Ниже приведены приближенные решения после пяти итераций.
importnumpyasnpITERATION_LIMIT=1000# initialize the matrixA=np.array([[10.,-1.,2.,0.],[-1.,11.,-1.,3.],[2.,-1.,10.,-1.],[0.0,3.,-1.,8.]])# initialize the RHS vectorb=np.array([6.,25.,-11.,15.])# prints the systemprint("System:")foriinrange(A.shape[0]):row=[f"{A[i,j]}*x{j+1}"forjinrange(A.shape[1])]print(f'{" + ".join(row)} = {b[i]}')print()x=np.zeros_like(b)forit_countinrange(ITERATION_LIMIT):ifit_count!=0:print(f"Iteration {it_count}: {x}")x_new=np.zeros_like(x)foriinrange(A.shape[0]):s1=np.dot(A[i,:i],x[:i])s2=np.dot(A[i,i+1:],x[i+1:])x_new[i]=(b[i]-s1-s2)/A[i,i]ifx_new[i]==x_new[i-1]:breakifnp.allclose(x,x_new,atol=1e-10,rtol=0.):breakx=x_newprint("Solution: ")print(x)error=np.dot(A,x)-bprint("Error:")print(error)
Arc.Ask3.Ru Номер скриншота №: a6601fde848c41104d2415ee8f0a57d2__1713435960 URL1:https://arc.ask3.ru/arc/aa/a6/d2/a6601fde848c41104d2415ee8f0a57d2.html Заголовок, (Title) документа по адресу, URL1: Jacobi method - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)