全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
28796 8
2013-08-27
哪位大神帮下忙,用牛顿法或Gauss-Seidel法求非线性函数的极值。跪谢了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-8-27 21:35:04
如果不是特别复杂的话,用optim就行了,参数method用来选择方法,一般用BFGS和CG多一点吧,不过简单的函数的话效果基本上都差不多的。
希望对lz有用
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-8 20:09:22
求证1加1 发表于 2013-8-27 21:35
如果不是特别复杂的话,用optim就行了,参数method用来选择方法,一般用BFGS和CG多一点吧,不过简单的函数的 ...
想问下,假如函数f有2个变量,即f(x,y),现在y=1,f(x,1)怎么实现?
f=function(x){sin(sqrt((x[1] - 5)^2 + (x[2] - 5)^2))/sqrt((x[1] - 5)^2 +(x[2]- 5)^2)}
想把x[2]用一些可变的常数给替换掉,变二元为动态的一元。

进而,更宽泛的问题是:给多变量,赋一个带有参数的值,怎么实现?不过这应该可以从上面例子推广。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-8 21:46:15
qimuxiaoyao 发表于 2013-9-8 20:09
想问下,假如函数f有2个变量,即f(x,y),现在y=1,f(x,1)怎么实现?
f=function(x){sin(sqrt((x[1] - 5)^ ...
R 的非线性优化程序一般式optim()、nlm()和nlminb()。

例如
min f(x)=100(x[2]-x[1]^2)^2+(1-x[1])^2
#写出目标函数
obj<-function(x){
f<-c(10*(x[2]-x[1]^2), 1-x[1])
sum(f^2)
}
# 初 始 值 设 置
x0=c(-1.2,1)
# 求 解
nlm(obj,x0)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-8 22:08:19
qimuxiaoyao 发表于 2013-9-8 20:09
想问下,假如函数f有2个变量,即f(x,y),现在y=1,f(x,1)怎么实现?
f=function(x){sin(sqrt((x[1] - 5)^ ...
首先,所谓动态的一元并不需要你想的这么复杂,不妨看的简单一点。一个一个来,关于f(x,1)的实现问题,这个你只需要在function里加一句x[2]<-1就可以了,其他依次类推,至于后面说的多个取值的优化问题,提供一个最简单也最直接打的思路,如果y取值不多的话,不妨全做一下,然后加个判断语句就ok了。

事实上你所提到的这个问题相当于一个有约束的优化问题,而optim当然也包括ls说的这些基本都是用来做无约束优化,所以要想直接完全有难度。但是也并不是完全没有办法,CRAN有专门关于优化的Task View,你可以去参考下,因为我对优化并不是很专业所以也不便发表意见,希望对你有用。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-9 00:22:11
求证1加1 发表于 2013-9-8 22:08
首先,所谓动态的一元并不需要你想的这么复杂,不妨看的简单一点。一个一个来,关于f(x,1)的实现问题,这 ...
已经很好了。

4楼里说的nlm(),nlminb()函数,第一次见,help了下,功能不错。以后应该会常用

不过我现在最需要的就是“只需要在function里加一句x[2]<-1”,之前完全没想到,然后程序就做不下去了。
因为现在要对Gauss-Seidel迭代编程,而G-S要求其他向量固定,每次只动一个向量,所以需要用到这样的想法。而且x[2]还可以赋一个(已经被赋了值的变量),这样就太有用了。while再加几个循环赋值,应该够用了。
多谢。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群