方程求近似解方法Java实现

本文详细介绍了如何使用Java实现方程的近似解方法,包括二分法、不动点法、牛顿法和割线法,并提供了具体的代码实例。此外,还通过比较不同方法对两个方程求解的逼近速度,展示了它们的效率差异,指出牛顿法速度最快,割线法次之。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

********************************

鉴于在博客中写公式略显难看,有碍观瞻,博客中的内容我都事先用latex写了一个pdf的文档,可以在下链接下载 

http://download.youkuaiyun.com/detail/xue_haiyang/7640513

下面所写的难免有各种错误,还请留言批评指正(欢迎任意的批评交流)

********************************



上篇博客(http://blog.youkuaiyun.com/xue_haiyang/article/details/37960863

给出了关于单变量方程近似解的解法的四个方法,这里

给出Java的具体实现和两个方程 的根的实例

最后给出这几个方法逼近速度的比较



代码实例

二分法

方程 

public class BiSection {
	public static void main(String[] args)
	{
		double temp =(double)1.4142137222;
		System.out.print(temp+"\n");
		double y= (double)1.0;
		double a=1;
		double b=10;
		for (int i=2; i<300; i++){
		y=(a+b)/((double)2.0);
		if (y*y-(double)2.0>0)
		{
			b=y;
		} else
			a=y;
//		System.out.print(i+"\n");
		System.out.print(y+"\n");
//		System.out.print(temp*temp+"\n");
		}
	}

}


方程

//Xue Haiyang at 2014.7.19
public class Bisection {
	public static void main(String[] args)
	{
		double temp=1.0;
//		System.out.print(temp+"\n");
		double y= (double)1.0;
		double a=1;
		double b=10;
		for (int i=2; i<300; i++){
		y=(a+b)/((double)2.0);
		temp=y*y*y+4*y*y-9;
		System.out.print(a+"|");
		System.out.print(y+"|");
		System.out.print(b+"\n");
		if (temp>0)
		{
			b=y;
		} else
			a=y;

		}
	}

}





不动点


// Xue Haiyang at 2014.7.19
public class Fixpoint {
	
	
	public static void main(String[] args)
	{

		double y= (double)2.0;
	
		for (int i=2; i<300; i++){
			System.out.print(y+"\n");
			y=0.5*Math.sqrt(9-y*y*y);

	

		}
	}
	

}




牛顿法

方程 

//Xue Haiyang at 2014.7.19
public class NewtonRoot {
	public static void main(String[] args)
	{

		double y= (double)10.0;
		for (int i=2; i<300; i++){
		y=(y*y+(double)2.0)/((double)2.0*y);
		
//		System.out.print(i+"\n");
		System.out.print(y+"\n");
//		System.out.print(temp*temp+"\n");
		}
	}

}



方程

//Xue Haiyang at 2014.7.19
public class Newton {
	public static void main(String[] args)
	{

		double y= (double)10.0;
		for (int i=2; i<30; i++){
		y=y-(y*y*y+4*y*y-9)/((double)3.0*y*y+8*y);
		

		System.out.print(y+"\n");

		}
	}

}



割线法


方程

//Xue Haiyang at 2014.7.19
public class Secant {
	public static void main(String[] args)
	{
	
		double y= (double)10.0;
		double y1=y-(y*y*y+4*y*y-9)/((double)3.0*y*y+8*y);
		double y2= (double)1.0;
		for (int i=2; i<30; i++){
		y2=y1-(y1*y1*y1+4*y1*y1-9)/(y1*y1+y1*y+y*y+4*y+4*y);
		y=y1;
		y1=y2;
//		System.out.print(i+"\n");
		System.out.print(y1+"\n");
//		System.out.print(temp*temp+"\n");
		}
	}

}





逼近速度比较

方程 

其中牛顿法最快, 二分法最慢,二分法在第46轮才接近...237309.


下面是图形展示


方程

下面是几种方法的数据其中 B-a B_b 是二分法中的区间,B_y是中间值。 牛顿最快割线法次之。



下面是图形展示







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值