牛顿迭代法java代码 牛顿迭代法编程代码

牛顿迭代方法

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的安吉网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

中文名

牛顿迭代法

外文名

Newton's method

别名

牛顿-拉夫逊(拉弗森)方法

提出时间

17世纪

快速

导航

牛顿迭代公式

其他迭代算法

C语言代码

C++代码

matlab代码

Python代码

Java代码

JavaScript代码

Fortran代码

产生背景

多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻找方程的近似根就显得特别重要。方法使用函数 的泰勒级数的前面几项来寻找方程 的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。

牛顿迭代公式

设 是 的根,选取 作为 的初始近似值,过点 做曲线 的切线 , ,则 与 轴交点的横坐标 ,称 为 的一次近似值。过点 做曲线 的切线,并求该切线与x轴交点的横坐标 ,称 为r的二次近似值。重复以上过程,得 的近似值序列,其中, 称为 的 次近似值,上式称为牛顿迭代公式。

用牛顿迭代法解非线性方程,是把非线性方程 线性化的一种近似方法。把 在点 的某邻域内展开成泰勒级数 ,取其线性部分(即泰勒展开的前两项),并令其等于0,即 ,以此作为非线性方程 的近似方程,若 ,则其解为 , 这样,得到牛顿迭代法的一个迭代关系式: 。

已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

利用迭代算法解决问题,需要做好以下三个方面的工作:

一、确定迭代变量

在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

二、建立迭代关系式

所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

三、对迭代过程进行控制

在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。

其他迭代算法

欧几里德算法

最经典的迭代算法是欧几里德算法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:

定理:gcd(a,b) = gcd(b,a mod b)

证明:a可以表示成a = kb + r,则r = a mod b。假设d是a,b的一个公约数,则有 a%d==0,b%d==0,而r = a - kb,因此r%d==0 ,因此d是(b,a mod b)的公约数

查看更多

编写java程序,使用命令行参数读取两个整数N和K,使用牛顿迭代法求N的K阶方根

package test;

import java.util.Scanner;

/**

* @author: 郑旭东

* @company:通广电子

* @time:2014年10月14日 下午3:03:35

*/

public class Newton {

static int n;

static int y;

static double res;

public static double func(double x){

double k = 1;

int i;

for(i = 0; i  n; i++){

k *= x;

}

return k-y;

}

public static double func1(double x){

double k = 1;

int i;

for(i = 0; in-1; i++){

k *=x;

}

return n*k;

}

public static int Newtonn(double x,double precision,int maxcyc){

double x1,x0;

int k;

x0 = x;

for(k = 0; kmaxcyc; k++){

if(func1(x0)==0.0){

System.out.println("迭代过程中导数为0!");

return 0;

}

x1 = x0 - func(x0)/func1(x0);

if(Math.abs(x1-x0)precision || Math.abs(func(x1))precision){

res = x1;

return 1;

}

else

x0 = x1;

}

System.out.println("迭代次数达到预期值!");

return 0;

}

@SuppressWarnings({ "resource" })

public static void main(String args[]){

double x,precision;

int maxcyc;

System.out.println("请输入被开方数:");

Scanner scanner = new Scanner(System.in);

y = scanner.nextInt();

System.out.println("请输入开方数:");

n = scanner.nextInt();

System.out.println("请输入初始迭代值:");

x = scanner.nextInt();

System.out.println("请输入最大迭代次数:");

maxcyc = scanner.nextInt();

System.out.println("请输入精度值(如0.00001):");

precision = scanner.nextDouble();

if(Newtonn(x,precision,maxcyc)==1){

System.out.println("结果为:"+res);

}

else

System.out.println("迭代失败!");

}

}

手打望采纳...

用迭代法怎么编写Java程序:牛顿迭代法

public static void main(String[] args) {

Test test = new Test();

test.addNum();

}

private int num = 0;

public void addNum() {

num++;

if(num==10){

System.exit(0);

}else{

System.out.println(num);

addNum();

}

} 一个 很简单的程序 ! 其实迭代很简单 就是 判断一些条件 然后 自己调用自身!就行了


文章名称:牛顿迭代法java代码 牛顿迭代法编程代码
浏览路径:http://hbruida.cn/article/doisigd.html