2013-09-24 3 views
0

Я начал использовать R для решения сложного уравнения. После создания уравнения я попытался его решить, используя Ryacas. К сожалению, вместо того, чтобы дать мне результат, Ryacas возвращает следующее:Ryacas и MaxEvalDepth

CommandLine (1): Достигнута максимальная глубина стека оценки. Используйте MaxEvalDepth для увеличения размера стека по мере необходимости.
CommandLine (1): Достигнута максимальная глубина стека оценки. Используйте MaxEvalDepth для увеличения размера стека по мере необходимости.

Не могли бы вы рассказать мне, как увеличить размер стека до Ryacas? Я пытался сделать это разными способами, но я действительно не знаю, как использовать совет, который дал мне Ryacas.

===== Редактировать =======

Так вот код, который приводит к генерации уравнение, которое я хочу решить.

#define net and gross values 
net=10000 
gross=12563.49 

#construct an array for cash flows 
flows=matrix(nrow=1, ncol=60) 

#populate the array with cash flows 
flows[c(1:60)]=c(-297.21) 

#generate the equation 
#flows 
eq1=NULL 
for (i in 1:60) { 
    eq1=paste(eq1," + ", toString(flows[i]),"/((1 + x)^(",i, "/60)", ") ", collapse="") 
} 
#complete 
equation=paste(toString(net), eq1, " == ", toString(gross), collapse="") 

тогда я пытаюсь решить с помощью Solve(equation, "x").

+0

Вы должны указать код, приводящий к этой ошибке. Если ваша единственная цель - решить уравнение с яками, может быть проще использовать яки напрямую (а не через Ryacas). –

+0

Хорошо, я добавил код в свой первоначальный пост. – MartinUKPL

+1

Почему вы погружаетесь в новый язык ('R'), чтобы сделать что-то, что связано с совершенно другим инструментом (' yacas')? Вы делаете вещи вдвойне жесткими на себя - просто используйте приложение напрямую. О, и BTW «комплексное уравнение» имеет очень специфическое значение в математике. Ваше уравнение может быть сложным, но оно находится в Реалах. –

ответ

1

Это выглядит как уравнение для АТР. Попробуйте простую итерацию, как эта вместо:

#inputs 
instalments=60 
net=12800 
monthly=387.63 
interest=0.1890 

#function 
CalculateAPR <- function(InitialPayout, InterestRate, N, MonthlyRepayment) { 
    i <- InterestRate 
    repeat{ 
    DF <- sapply(1:N, function(N) { MonthlyRepayment/((1+i)^(N/12)) }) 
    if(InitialPayout>=sum(DF)) break() 
    i <- i + 0.00001 
    } 
return(i) 
} 

#output 
ans=CalculateAPR(net, interest, instalments, monthly) 
rm(list = c('instalments', 'interest', 'monthly', 'net')) 
print(ans) 

Вы могли бы хотеть попробовать более эффективный алгоритм, чем этот, который просто добавляет 0,001% на каждую итерацию.

+0

Отлично. Благодарю. Ваш код работает отлично. Я только реорганизовал его, чтобы он выглядел немного яснее и переместил раздел ввода вверх. Я попытаюсь немного настроить его для удаления инкремента и заменить его на разделение диапазонов одинакового размера возможного APR. – MartinUKPL

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