在R

时间:2018-02-23 16:07:03

标签: r

我想找到使用R的方程式的经验解。

我的功能如下,其中功率和流量是矢量:

get.yield.equation <-function(t, power, flow, PV){
sum(flow/((1+t)^power)) - PV # t is a parameter to be calculated
}

其中t是我想要找到解决方案和变量的参数:power,flow,PV是我将传递的参数

例如:

power<-c(0.01549014, 1.01549014)
flow<-c(0.5, 100.5)
PV<-67.07738

我找到的解决方案是使用uniroot功能。它有效,如果我有一个感兴趣的参数的功能,但它不适用于我的情况,我有其他参数定义方程。 例如,如果我在我的函数中将参数写为常量并仅传递我想要估计的感兴趣的参数,uniroot会给我一个正确的解决方案:

f.ytm<-function(t) {0.5/ (1+t)^(0.01549014)  + 100.5/ (1+t)^(1.01549014) - 67.07738 }
uniroot(f.ytm, interval=c(-1,1), tol= 0.000000000000000001)$root 
[1] 0.5

以下不起作用:

t<-uniroot(get.yield.equation(t, c(0.01549014, 1.01549014), c(0.5, 100.5), 67.07738), interval=c(-1,1), tol= 0.000000000000000001) 
Error in uniroot(get.yield.equation(t, c(0.01549014, 1.01549014), c(0.5,  : 
could not find function "f"

如果我没有通过t,我有以下错误:

uniroot(get.yield.equation(c(0.01549014, 1.01549014), c(0.5, 100.5), 67.07738), interval=c(-1,1), tol= 0.000000000000000001)
Error in get.yield.equation(c(0.01549014, 1.01549014), c(0.5, 100.5),  : 
argument "PV" is missing, with no default 

什么是一个解决方案,以获得方程的根,其中常量作为参数传递?

2 个答案:

答案 0 :(得分:1)

您可以编写函数,以便缺少固定参数在参数中:

get.yield.equation <-function(t, power=c(0.01549014, 1.01549014), flow=c(0.5, 100.5), 
   PV=67.07738){
      sum(flow/((1+t)^power)) - PV # t is a parameter to be calculated
                }
uniroot(get.yield.equation, interval=c(-1,1), tol= 0.000000000000000001)$root
#[1] 0.5

答案 1 :(得分:1)

函数ellipses中有uniroot,可以为您的函数提供更多参数:

> get.yield.equation <-function(t, power, flow, PV){
     sum(flow/((1+t)^power)) - PV # t is a parameter to be calculated
 }
> power<-c(0.01549014, 1.01549014)
> flow<-c(0.5, 100.5)
> PV<-67.07738
> uniroot(get.yield.equation, interval=c(-1,1),power=power,flow=flow,PV=PV,tol= 0.000000000000000001)$root 
[1] 0.5