Решение системы из 4 уравнений в 4 неизвестных с использованием R - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь решить следующие 4 уравнения в 4 неизвестных, используя R:

m_1 = 1 + p_ {11} m_1 + p_ {12} m_2 + p_ {13} m_3 + p_ {14} m_4,

m_2 = 1 + p_ {21} m_1 + p_ {22} m_2 + p_ {23} m_3 + p_ {24} m_4,

m_3 = 1 + p_ {31} m_1 + p_ {32} m_2 + p_ {33} m_3 + p_ {34} m_4,

m_4 = 1 + p_ {41} m_1 + p_ {42} m_2 + p_ {43} m_3 + p_ { 44} m_4.

Значения p_ {ij} известны, и я хочу найти значения m_i.

По-видимому, это можно решить рекурсивно.

Я был бы очень признателен, если бы кто-нибудь попытался показать мне, как это делается.

РЕДАКТИРОВАТЬ:

T <- matrix(c(1, 1, 1, 1, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 1), nrow = 4) solve(T, c(m_1, m_2, m_3, m_4))

I получить следующее сообщение об ошибке:

Error in solve.default(T, c(m_1, m_2, m_3, m_4)) : object 'm_1' not found

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Пример использования R base::solve:

solve(diag(4L) - P, rep(1, 4L))
#[1] 5.333333 3.333333 4.666667 2.000000

data:

P <- structure(c(0.5, 0, 0.5, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0.5, 0.5), 
    .Dim = c(4L, 4L))
P
#     [,1] [,2] [,3] [,4]
#[1,]  0.5  0.5  0.0  0.0
#[2,]  0.0  0.0  0.5  0.0
#[3,]  0.5  0.0  0.0  0.5
#[4,]  0.0  0.0  0.0  0.5
1 голос
/ 30 марта 2020

Python 3 (PyPy)

def solve(p, iterations = 16, m1 = 0.0, m2 = 0.0, m3 = 0.0, m4 = 0.0):
  for n in range(iterations):
    m1 = 1 + p[0][0]*m1 + p[0][1]*m2 + p[0][2]*m3 + p[0][3]*m4
    m2 = 1 + p[1][0]*m1 + p[1][1]*m2 + p[1][2]*m3 + p[1][3]*m4
    m3 = 1 + p[2][0]*m1 + p[2][1]*m2 + p[2][2]*m3 + p[2][3]*m4
    m4 = 1 + p[3][0]*m1 + p[3][1]*m2 + p[3][2]*m3 + p[3][3]*m4
  return m1, m2, m3, m4

Попробуйте онлайн!

Мы применяем Gauss-Seidal метод с 16 итерациями и начальными значениями всех нулей. Затем итеративно мы обновляем каждый m на основе предыдущих значений.

Обратите внимание, что конвергенция не гарантируется. Для теста, где он сходится, вы можете попробовать

p = [[0.3, 0.2 , 0.1 , 0.2],
     [0.2,-0.4 , 0.2 , 0.1],
     [0.1,-0.2 , 0.3 , 0.2],
     [0.0, 0.07, 0.03, 0.1]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...