2015-09-16 6 views
2

Я хочу найти решение:Можно ли решить алгебраическое уравнение в R?

-x^3+6*x^2+51*x+44=0 

но с R. Возможно ли это?

Я нашел пакет Ryacas, но никто, кажется, не может заставить его работать.

Может показаться тривиальным, но я не смог найти простой способ сделать это ...

У вас есть альтернатива?

Спасибо, ребята!

+0

Что вы подразумеваете под «никто, кажется, не может заставить его работать»? –

+1

Возможно, это возможно, но R предназначен для статистики, а не для математики. Попробуйте http://www.wolframalpha.com/input/?i=solve+-x%5E3%2B6*x%5E2%2B51*x%2B44%3D0 – Frank

+0

Да, вы используете 'uniroot',' f <- function (x) -x^3 + 6 * x^2 + 51 * x + 44; uniroot (f, interval = c (-100, 100)) ' – jenesaisquoi

ответ

7

Вы можете использовать polynom пакет:

library(polynom) 
p <- polynomial(c(44,51,6,-1)) 
# 44 + 51*x + 6*x^2 - x^3 
solve(p) 
# [1] -4 -1 11 

Но вы можете просто использовать функцию polyroot из base пакета:

polyroot(c(44,51,6,-1)) 
# [1] -1+0i -4+0i 11+0i 

Если вы держите действительную часть с Re:

Re(polyroot(c(44,51,6,-1))) 
# [1] -1 -4 11 
6

Здесь мы решаем корней, использующих соотношение между матрицей и ее характеристическим многочленом.

Учитывая полиномиальной a0 + a1*x^1 + a2*x^2 + x^3, определим матрицу:

0 0 -a0 
1 0 -a1 
0 1 -a2 

Собственные значения этой матрицы являются корни многочлена.

y = -x Подставив в вашем полиномиальное уравнение дает этот

y^3 + 6*y^2 - 51*y + 44=0 

И дает этот пример

> z <- matrix(c(0,1,0,0,0,1,-44,51,-6),3,3) 
> z 
    [,1] [,2] [,3] 
[1,] 0 0 -44 
[2,] 1 0 51 
[3,] 0 1 -6 
> eigen(z) 
$values 
[1] -11 4 1 

$vectors 
      [,1]  [,2]  [,3] 
[1,] 0.6172134 0.73827166 0.98733164 
[2,] -0.7715167 -0.67115606 -0.15707549 
[3,] 0.1543033 -0.06711561 -0.02243936 

Или, так как мы замещенные -y для x:

> eigen(-z)$values 
[1] 11 -4 -1 

См: http://www-math.mit.edu/~edelman/publications/polynomial_roots.pdf

+0

'polyroot' из пакета' base'. –

+0

Так что это я. Я был брошен путем включения в ваш ответ пакета 'polyom'. –

+0

Да, я понял, что после этого решения можно найти просто используя' base' пакет. –