【发布时间】:2018-06-14 01:13:06
【问题描述】:
我尝试使用 nleqslv 求解这些非线性方程。但是它不能很好地工作。我确实知道它不这样做的原因,因为我没有将两个未知数分开到等式的不同方面。
我的问题是:1,是否有其他软件包可以解决这种问题 方程? 2,R中是否有任何有效的方法可以帮助我重新排列 方程,使其满足封装的要求 nleqslv?
谢谢你们。
这是代码,p[1] 和 p[2] 是我要解决的两个未知数。
dslnex<-function(p){
p<-numeric(2)
0.015=sum(exp(Calib2$Median_Score*p[1]+p[2])*weight_pd_bad)
cum_dr<-0
for (i in 1:length(label)){
cum_dr[i]<-exp(Calib2$Median_Score*p[1]+p[2][1:i]*weight_pd_bad[1:i]/0.015
}
mid<-0
for (i in 1:length(label)){
mid[i]<-sum(cum_dr[1:i])/2
}
0.4=(sum(mid*weight_pd_bad)-0.5)/(0.5*(1-0.015))
}
pstart<-c(-0.000679354,-4.203065891)
z<- nleqslv(pstart, dslnex, jacobian=TRUE,control=list(btol=.01))
【问题讨论】:
-
无法重现,因为您没有提供自包含问题。当您想求解
A=B形式的方程时,请将方程写为y[..] <- A - B或y[..] <- B-A。将这两个方程重写为y[1]<- 0.015 - (...)和y[2]<-0.4 - (...)。将y声明为长度为 2 的向量。最后p是nleqslv传递的值。不要在函数开始时用p<-numeric(2)覆盖它。