проблемы с решением систем уравнений с помощью 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.

0 ответов

Другие вопросы по тегам