Ich habe eine Matrix gegeben worden:Wie zu finden, wenn eine Matrix mit einer Schleife konvergiert
P <- matrix(c(0, 0, 0, 0.5, 0, 0.5, 0.1, 0.1, 0, 0.4, 0, 0.4, 0, 0.2, 0.2, 0.3, 0, 0.3, 0, 0, 0.3, 0.5, 0, 0.2, 0, 0, 0, 0.4, 0.6, 0, 0, 0, 0, 0, 0.4, 0.6), nrow = 6, ncol = 6, byrow = TRUE)
die Funktionen verwenden, mpow
, rows_equal
, matrices_equal
. Ich möchte herausfinden, wenn P^n
konvergiert, mit anderen Worten, was n ist, wenn alle Zeilen in der Matrix gleich sind und wenn P^n = P^(n+1)
.
Durch nur Blick auf die Funktionen i
haben es geschafft zu schließen, dass um n=19-21
die Matrix konvergieren wird.
Obwohl ich die richtige n mit einer Schleife finden wollen. Hier sind die Funktionen mpow
, rows_equal
und matrices_equal
. Ich weiß, dass sie anders geschrieben werden können, aber behalte sie so, wie sie sind.
mpow <- function(P, n, d=4) {
if (n == 0) diag(nrow(P)))
else if (n== 1) P
else P %*% mpow(P, n - 1))
}
rows_equal <- function(P, d = 4) {
P_new <- trunc(P * 10^d)
for (k in 2:nrow(P_new)) {
if (!all(P_new[1, ] == P_new[k, ])) {
return(FALSE)}
}
return(TRUE)
}
matrices_equal <- function(A, B, d = 4) {
A_new <- trunc(A * 10^d)
B_new <-trunc(B * 10^d)
if (all(A_new == B_new)) TRUE else FALSE
}
Nun, die Schleife zu schreiben, sollten wir es etwas entlang der Linien von tun:
Zuerst eine Funktion wie so erstellen:
when_converged <- function(P) {...}
und
for (n in 1:50)
Um zu versuchen, wenn t.ex n = 50.
Obwohl ich nicht weiß, wie man den Code richtig schreibt, kann mir dann jemand helfen?
Vielen Dank für das Lesen meiner Frage.
Nun, ich möchte herausfinden, wenn P konvergiert mit den Funktionen mpow, rows_equal und matrices_equal. Mein Lehrer gab den Ratschlag, dass wir eine Funktion machen könnten, die eine Matrix P als Eingabe nimmt und uns zeigt, für welches n, P^n = P^n + 1. Das sollten wir beispielsweise mit einer Schleife wie "for (n in 1:50)" machen. – PeterNiklas
Fügen Sie Ihrem Code Zeilenumbrüche hinzu. Es ist nicht lesbar. Ich nehme an, dass Sie "Konvergenz" als Gleichheit definieren bis zu der Genauigkeit, die durch "d" gesteuert wird? Sie wissen wahrscheinlich, dass Konvergenz bewiesen werden muss und nicht wirklich durch eine numerische Übung gezeigt werden kann. – Roland
Was wissen Sie über die Matrix? Ist es z.B. quadratisch und symmetrisch? Siehe [hier] (http://www.statmethods.net/advstats/matrix.html). – Christoph