проблемы с решением систем уравнений с помощью Ryacas
мне нужно решить
xQ = 0
куда
x = (x1, x2, 1-x1-x2)
.
исходная матрица Q:
> Q
[,1] [,2] [,3]
[1,] -0.5982703 0.3528923 0.2453780
[2,] 0.2888467 -0.5776933 0.2888467
[3,] 0.4156334 0.2453780 -0.6610114
> eq1 <- x1 * (Q[1,1]) + x2 * Q[2,1] + (1-x1-x2) * Q[3,1]
> eq2 <- x1 * (Q[1,2]) + x2 * Q[2,2] + (1-x1-x2) * Q[3,2]
> eq3 <- x1 * (Q[1,3]) + x2 * Q[2,3] + (1-x1-x2) * Q[3,3]
> tt <- paste0("OldSolve({",eq1,"==0, ", eq2,"==0, ",eq3,"==0}, {x1, x2})")
> tt <- yacas(tt)
> tt
Yacas matrix:
[,1] [,2]
[1,] x1 == (-0.1267867438 * x2 + 0.4156334028)/1.0139036847 x2 == NaN
Если бы я использовал исходную матрицу Q для системы уравнений, решение было бы неопределенным. (Почему?)
Пришлось сначала округлить, а потом использовать
oldSolve
в
Ryacas
пакет для решения системы:
> Q <- round(Q, 3)
> Q
[,1] [,2] [,3]
[1,] -0.598 0.353 0.245
[2,] 0.289 -0.578 0.289
[3,] 0.416 0.245 -0.661
eq1 <- x1 * (Q[1,1]) + x2 * Q[2,1] + (1-x1-x2) * Q[3,1]
eq2 <- x1 * (Q[1,2]) + x2 * Q[2,2] + (1-x1-x2) * Q[3,2]
eq3 <- x1 * (Q[1,3]) + x2 * Q[2,3] + (1-x1-x2) * Q[3,3]
tt <- paste0("OldSolve({",eq1,"==0, ", eq2,"==0, ",eq3,"==0}, {x1, x2})")
tt <- yacas(tt)
> tt
Yacas matrix:
[,1] [,2]
[1,] x1 == (-0.127 * x2 + 0.416)/1.014 x2 == 0
Ответ очень странный. Но если я использую другие онлайн-калькуляторы, например, wolfram, чтобы решить это, решение =
(0.3669, 0.3458, 0.2872)
, несмотря на то что
xQ=(0,0,0.07)
из-за округления.
Как решить проблему Рякаса?
Другие команды, которые я пробовал:
> b <- c(0,0,0)
> solve(Q, b)
Error in solve.default(Q, b) :
system is computationally singular: reciprocal condition number = 1.33844e-17
> A <- yacas("{{-.598,.353,.245}, {.289,-.578,.289}, {.416,.245,-.661}}")
> yacas("MatrixSolve(A, b)")
Error in yacas_evaluate(x) : Yacas returned this error: The predicate
IsDiagonal(matrix)
evaluated to
IsDiagonal(A)
CommandLine(1) : Max evaluation stack depth reached.
Please use MaxEvalDepth to increase the stack size as needed.