牛顿迭代--高斯方程求解

y = alnx + x + x*x + x *x *x + Math.pow(x,0.021222) +  Math.exp(x) = 0

这个方程无法用常规的求导等方法求出,也没有固定的求解公式。

这个时候就需要算法来 求解、利用牛顿迭代能很好的求解。

 

具体公式可以百度下

x n+1  = x n + f(x n)/f(x n)'

依次迭代下去,知道 |x n+1 - x n| < 0.000001 (精确度值)   这个时候得到的X n+1 即为解

当然这里涉及到一个初始的x n  在此我们定义为 x 0

x 0的选取,理论上来讲应该是个随意的值。但是由于曲线的情况是各种各样的。

一个固定的x0 无法满足我们的需求,这个时候我们就需要根据具体的情况变动x0的值,迭代至一个固定的深度,仍然无解,这个时候我们更换x0,如果继续无解,继续更换。知道找到一个满足的解为止,当然这是在确定必然有解的情况下。为防死循环,我们还是要加一个总得迭代深度。

如下是项目的部分算法:

 

	double x0 = 2;
		if(B > 0) {
			x0 = 100000;
		} else {
			x0 = 0.000001;
		}
		double xx = 0.000000001;
		double x1 = diedai(x0, A, B, a, b);
		if((Double.isNaN(x1) || x1 < 0) && x0 == 100000) {
			x1 = 0.000001;
		} else if ((Double.isNaN(x1) || x1 < 0) && x0 == 0.000001) {
			x1 = 100000;
		}
		int i = 0;
;		double xvar = 1;
		while (Math.abs(x1 - x0) > xx) {
			i ++;
			if(i == 100000) {
				x1 = a;
				break;
			}
			double temp = x0;
			x0 = x1;
			x1 = diedai(x0, A, B, a, b);
			if(x1 < 0 || x1 == temp) {
				xvar ++;
				x1 = xvar;
			}
			
		}
		return x1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值