2013-03-25 6 views
0

Я пытаюсь решитьфункция для решения уравнения R

$\sum_{j=1}^{180} x^{a_j} = 1$ 

enter image description here

Я создал две функции:

f1 <- function(x){c(rep(x,180))} 
f2 <- function(x){sum(f1(x)^vec) - 1} 

где VEC является моим $ a_j $ вектора.

Uniroot не работает. Какую функцию я должен использовать?

PS: Есть ли лучший синтаксис?

Благодаря

+0

, пожалуйста, отредактируйте свой вопрос, чтобы сохранить согласованность с ответом. – agstudy

ответ

3

Почему uniroot не работает, на самом деле? Пока вы правильно определяете свою функцию и интервал ее поиска должен работать:

aj <- c(-4,-5,-3,-4,-2,-3,-1,-2,-7,-6,-5,-8,-7,-6,-6,-7,-5,-6, 
     -4,-5,-3,-4,-9,-8,-7,-10,-9,-8,-1,-2,rep(-1,150)) 
f <- function(x,vec){sum(x^vec)-1} 
uniroot(f, interval=c(-100,100), vec=aj) 
$root 
[1] -0.518658 

$f.root 
[1] -0.009276057 

$iter 
[1] 21 

$estim.prec 
[1] 6.103516e-05 
+0

Ну, это проще. Спасибо. – user1627466

+0

Я только что понял, что существует решение за пределами интервала c (-100,100), но я не могу получить его с помощью uniroot, потому что значения «f» в конечных точках не имеют противоположного знака « – user1627466

+0

Вот что я имел в виду под «Пока вы правильно определяете интервал поиска». Я просто использовал c (-100,100) в качестве примера. Если есть несколько решений, ничто не мешает вам запускать функцию несколько раз с разными интервалами. – plannapus

2

Вы можете использовать polyroot, например

polyroot(c(-1,rep(1,180))) 

здесь

p(x) = -1 + 1 * x + … + 1 * x^180 

EDIT Чтобы использовать ваш вектор Aj

Не ясно, что ваш вектор vec, я думаю, вы хотите что-то вроде этого:

polyroot(c(-1,vec)) 

Где VEC

vec = (a1,a2,..............,a180) 

EDIT после OP осветления:

ОП хочет найти корни полинома с отрицательными показателями. Решение состоит в том, чтобы разделить на макс экспоненты, чтобы применить polyroot.

vec <- c(-4,-5,-3,-4,-2,-3,-1,-2,-7,-6,-5,-8,-7,-6,-6,-7,-5,-6, 
     -4,-5,-3,-4,-9,-8,-7,-10,-9,-8,-1,-2,rep(-1,150)) 
ma <- max(abs(vec)) 
vec <- sort(ma+vec) 
polyroot(as.data.frame(table(vec))$Freq) 
+0

Но если у него на самом деле есть куча экспонентов 'a_j', он должен будет их перечислить. Его функция 'f1' не соответствует изображению, которое он опубликовал. –

+0

polyroot (c (-1, vec)) не решает мою проблему. Я попробовал это с vec = 2, и я получаю 0.5 вместо 1. vec - список не упорядоченных показателей – user1627466

+0

Это просто не то, что я хочу. В этом примере я хотел бы решить -1 + x^2 = 0 – user1627466

Смежные вопросы