打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
R语言非线性方程组求解dfsane,nleqslv
                          首先,dfsane属于BB包,使用时应首先载入library("BB")

nleqslv 属于nleqslve包,同样使用时应载入 library("nleqslve")

Description

Derivative-Free Spectral Approach for solving nonlinear systems of equations

求解非线性方程组法


Usage

dfsane(par, fn, method=2, control=list(),         quiet=FALSE, alertConvergence=TRUE, ...)


看这个公式很多人都头疼,不知道你们是不是,反正我是,那么就那代码样例说话:

library(BB)fun <- function(x) {   f <- numeric(length(x)) 					  f[1] <-  x[1]/(1+exp(x[2]*0.215+x[3]))-134.03  f[2] <-  x[1]/(1+exp(x[2]*5.06+x[3]))-80.2  f[3] <-  x[1]/(1+exp(x[2]*9.85+x[3]))-13.4			  f } startx <- c(132,0.5,0.5)result = dfsane(startx,fun,control=list(maxit=2500,trace = FALSE))theta = result$par


fun函数就是 fn,公式中第二个,你的非线性方程组的公式比如,在本例中 y = a/(1+exp(bx+c)

在本方程中x,y为已知坐标点,求a,b,c的值

在fun中,参数只为x,此x并非自变量x,而是一个list,也就是向量即你要求的参数值(a,b,c的值)的表示,也即用dfsane的求得的解,x[1]表示a,x[2]表示b,x[3]表示c。

由于0 = a/(1+exp(bx+c) - y, 所以即求 f [b]= a/(1+exp(bx+c) - y由于要求a,b,c,在原方程中x,y已知,带入。[/b]

[b]求解三个参数最少需要三个方程组联立,f[1],f[2],f[3]即为三个数组联立,用dfsane求解,求得的解即为要求a,b,c的值[/b]

startx即为参数par,公式中第一个,即为你要求解公式使用方法的初始值,因为求解公式本质是用搜索方法求最优解,比如高斯-牛顿法,所以得有起始点(即初始值)。基本随便写,或要求解肯定会有一个估计值都可以

control=list(maxit=2500,trace = FALSE),maxit,搜索的迭代次数,一般100,200,trace默认值为true,把每一步迭代的结果都给列出事,事实上,我们用不到知道每一步的解,只要一个最终结果就行了,所以设置为false, control 里一般使用这两个参数

method说的使用那种搜索方法,除非题目要求,一般没差,可以不写,其他的就更可以不写了 ,啊哈哈哈


运行结果:






par就是要求的a,b,c的解,即为向量(list)x的值,可以用如下获取:

result = dfsane(startx,fun,control=list(maxit=2500,trace = FALSE))theta = result$par


theta即为向量x的值

在此例中a = theta[1],b= theta[2],c=theta[3]
http://www.inside-r.org/packages/cran/bb/docs/dfsane 点击打开链接

再来一个例子

#y ~ a +(b*exp(c*x^d))tempFunction1 <- function(modelParams){  F = numeric(length(modelParams))  F[1] = modelParams[1]+(modelParams[2]*exp(modelParams[3]*(exp(2.751514))^modelParams[4])) - 107.20561  F[2] = modelParams[1]+(modelParams[2]*exp(modelParams[3]*(exp(5.509109))^modelParams[4])) - 70.53738  F[3] = modelParams[1]+(modelParams[2]*exp(modelParams[3]*(exp(6.779219))^modelParams[4])) - 42.44393  F[4] = modelParams[1]+(modelParams[2]*exp(modelParams[3]*(exp(8.542089))^modelParams[4])) - 17.10280  F  }theta = dfsane(par= c(100 + 50*runif(1),runif(1),-runif(1),runif(1)), fn=tempFunction1,control = list(maxit = 2500,trace = FALSE))theta$par#那么a = theta$par[1] b = theta$par[2] c = theta$par[3] d= theta$par[4]






博主微博:文二十口
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Matlab图形绘制经典案例
120种UG表达式曲线画法(阿基米德螺旋线、数学方程式)
MATLAB中scatter函数的用法(绘制散点图)
97种曲线
matlab中特殊符号的写法
R语言多项式线性模型:最大似然估计二次曲线
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服