2017-04-13 87 views
0

我正在尝试在R中实现这个方程到非线性求解器中最困难的时候。我正在尝试nleqslvBB程序包,但到目前为止只能得到错误。我已经搜索并阅读文档,直到我的眼睛流血,但我无法将我的大脑包裹在它周围。公式本身是这样的:包含求和的非线性方程R

The Equation

s2 * sum(price^(2*x+2)) - s2.bar * sum(price^(2*x)) = 0

s2s2.bar,和price是已知的相等长度的向量。

BB尝试的最后一次尝试是这样的:

gamma = function(x){ 
     n = len(x) 
     f = numeric(n) 
     f[n] = s2*sum(price^(2*x[n]+2)) - s2.bar*sum(price^(2*x[n])) 
     f 
     } 

g0 = rnorm(length(price)) 
results = BBsolve(par=g0, fn=gamma) 

任何帮助是极大的赞赏

+0

f [n]是一个矢量的一个元素,但是你试图给它分配一个长度等于长度(s2)的整个矢量。你的意思是使用s2 [n]和s2.bar [n]而不是s2和s2.bar?价格不会引起问题,因为您在指数后对整个向量进行求和。 – psychometriko

+0

让我再试一次: 我可能会从一开始就错了。我试图解决的实际公式是这样的: http://i1330.photobucket.com/albums/w561/lompoc421/CodeCogsEqn%201_zpsrwocvotk.gif – Lompoc42

回答

0

从你你似乎已经糊涂了公式中的功能所使用的各种部件的描述。

你的功能gamma应该最有可能从你的描述写为

gamma <- function(x){ 
    f <- s2*sum(price^(2*x+2)) - s2.bar*sum(price^(2*x)) 
    f 
} 

s2prices2.bar是矢量,所以你给的公式将返回一个向量。

由于您尚未提供任何数据,因此我们无法测试。我曾尝试使用随机生成的s2price,s2.bar的值进行测试。有时候可以通过nleqslvBB获得解决方案,但并非总是如此。

在包nleqslv的情况下,默认方法不会总是工作。 由于软件包具有不同的方法,因此应使用软件包中的函数testnslv来查看提供的任何方法是否找到解决方案。

+0

我不能相信它最终是一样简单这个。这似乎工作,虽然不总是,但这完全是另一个问题。谢谢! – Lompoc42

+0

不要忘记测试'nleqslv'和'BBsolve'终止代码来检查是否找到解决方案。并给予upvote? – Bhas

+0

是的,我不得不在while循环中编写一个小测试,以确保它回退了收敛的解决方案。希望我在正确的轨道上。 试图upvote,但它不会让我没有至少15声望点。 – Lompoc42