!!怎么用最快,或者比较快的方法把 y=0 时的 x 点找出来
不知道哪位前辈知道,怎么样用最快,或者比较快的方法把 y=0 时的 x 点找出来,如果我们有公式,那么可以用Newton_Vefahren,但是现在我们没有一个具体的公式,而是一个比较复杂的Modul就是Binomia_Modul,已经用程序写好了,只需要把 x 带入就可以得到 y,但是不能反过来,就是说只能通过 x 求 y,不能通过 y 求 x ,我现在要的是 y = 0 时那个 x 的值,其实就是整个图像与 X 轴 的交点,我目前是这么做的,也模仿 Newton_Verfahren 先给 Schätzwert,然后通过2点直线,求直线与 x轴 的交点,在带回程序把 y 求出看 y 是不是为0,不是就继续往下找 直到找到误差小过7位小数就可以了,但是我的这个程序每次都要找个13到15次,这就很浪费时间,我看有的人用其他编程语言写的差不多3到4次就可以找到,也是用直线的方法,但是我实在看不明白,是什么意思,还有什么中心点,所以想来这里问问前辈们!图片实在传不上大的来,赫赫!
[ 本帖最后由 xunuo83127 于 2007-8-14 12:25 编辑 ] 不是特别了解,不过想问一下,其他人的起始点和你的一样么? 关于这个问题我在国内学过 《计算方法 》这门课,好像属于数值计算问题吧。
你所用的是牛顿迭代法,这类通过逼近来求出方程的近似解的方法还有很多,他们的差异在于逼近速度,当然和函数本身也有关系。
他们的通用流程基本是:1,确定该区间至少有解:f(a)*f(b)<0
2,利用逼近方法缩小区间,牛顿法中通过判断,把引入的新点作为区间的一端,这个新的区间内包含零点。
3,在新区间内接着搜索。
去网上查查牛顿迭代法,应该就能找到相关的资料。好像还有个容格尔什么的方法,忘记了。其实这个方法还是很简单的。仔细多读两遍应该是能搞定的。 关于迭代次数的问题,如果方法一样,精度一样的话,应该不会有太大出入。
这里说一个关于值的验证的问题,你说在计算完之后把x再带入原函数来验证,其实这是没有必要的,因为方法是肯定正确的,理论上我们找到的值广义上讲都是函数根的近似值,只是他们的精度不一样而已,所以当你计算出来一个新的近似值后不需要把它代入原函数来验证,而是直接和你上一次逼近得到的近似根来作比较就可以了,如果X(n)-X(n-1)这两个近似根的差值小于你的要求的根的精度,目前是|X(n)-X(n-1)|<10^-7,那么你就可以认为他们是符合条件的根了,或许你的次数比人家多,就出在判断条件上的不同。 牛顿法应该不是稳定的方法,如果函数有多解,那么两个招到的是否是同一个呢? 你的问题我觉得没办法用netwon-raphson法解,因为你没有derivative。你可以采用bisection法。 至于收敛速度问题,和你的曲线的有关。当曲线和x轴相加,且在零点附近斜率很大时,收敛速度很快。斜率很小时收敛的很慢。至于不稳定,震荡,都是和曲线的形状有关。如果你对问题具体问题不了解,乱给一个初值的话,这点你是没有办法事先估计到的。 可以是可以,不过近似,和实际总还是有区别的,你的公式是不是写错了?什么意思可以稍微解释一下吗?是不是欧拉法的公式?
$frage$
页:
[1]
2