声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1911|回复: 5

[编程技巧] 非线性方程求根,初值未知。

[复制链接]
发表于 2012-9-10 14:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
非线性方程求根,(方程代数式部分是一个概率密度函数表达式,定义域是R)。 在无法确定初值的情况下,怎么求解方程的根?
一般的数值方法,像牛顿法,弦截法这些都需要设定初值。         matlab自带的fsolve函数需要设定初值,而此处初值未知。    直接用solve可解,但有时效率很低。  解方程这步需要在程序中循环进行,所有请教哪位老师指点有没更好的方法。   十分感谢!
回复
分享到:

使用道具 举报

发表于 2012-9-10 15:55 | 显示全部楼层
初值的确定需要有与问题相关的背景知识及物理意义外加运气来猜,一般很难搞定。如果单独求的话,1stOpt是很好的选择,不用管初值,相关非常好,但缺点是很难嵌入到你自己的代码中去。
 楼主| 发表于 2012-9-10 19:36 | 显示全部楼层
谢谢!能说具体点吗,我再去看看1stOpt,很难嵌套是不是这个函数类似matlab自带的积分函数quadgk之类的,必须已知具体的函数表达式、自变量,才可解。
 楼主| 发表于 2012-9-11 10:09 | 显示全部楼层
回复 2 # dingd 的帖子

谢谢,我搞懂1stopt是啥了,其实我用matlab求得的把表达式复制出来单独求的话很快,但是嵌在matlab程序里,计算就很慢。   这个问题单独求解就没有意义了,这个非线性方程只是程序里的很小的问题。  还是很感谢!   
发表于 2012-9-11 10:21 | 显示全部楼层
用最基本的二分法试试应该可以先找出初值,再用牛顿法或其它求非线性方程方法计算。

评分

1

查看全部评分

 楼主| 发表于 2012-9-11 16:20 | 显示全部楼层
回复 5 # inthesky 的帖子

我最初是这么想的;面向的对象是个一维概率密度函数,其表达式(未归一化)是根据一种理论求出来的,非线性方程就是令这个表达式=0.01(近似),希望求得函数的两个端点作为定义域来积分归一化并求均值;    你说的二分法之类的线性逼近的方法都是需要合理的初值的,如果初值给的太远计算量会很大。   最后整个问题是要求改善算法效率,所以收敛速度是关键。  暂时没想到什么更好的方法,谢谢!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-5 11:24 , Processed in 0.062924 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表