欧几里德,斐波那契,牛顿迭代法java编程实现
2017-07-18 18:44
204 查看
数学中的欧几里德算法,斐波那契数列和牛顿迭代法求非线性方程的近视解。
1.欧几里德算法
最经典的迭代算法,用于计算两个整数a,b的最大公约数。
java代码实现算法:
2.斐波那契数列
斐波那契数列为:0、1、1、2、3、5、8、13、21、…,即 fib⑴=0; fib⑵=1;fib(n)=fib(n-1)+fib(n-2) (当n>2时)。大学计算机课程中算法讲解中一个经典的数列计算。可以通过递归和非递归实现。
代码递归实现:
代码非递归实现:
3.牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。该方法广泛用于计算机编程中。牛顿迭代关系式
代码实现:
计算结果
该值附近的根为2.648936536183 迭代次数 : 10
1.欧几里德算法
最经典的迭代算法,用于计算两个整数a,b的最大公约数。
java代码实现算法:
public static int Gcd(int a, int b){ if(a <= 0 || b <= 0){//预防错误 return 0; } int temp; if (a < b) { //交换a,b保证a大于b temp = a; a = b; b = a; } //迭代计算 while (b > 0) { //边界条件 temp = a % b; a = b; b = temp; } return a;//最大公约数 }
2.斐波那契数列
斐波那契数列为:0、1、1、2、3、5、8、13、21、…,即 fib⑴=0; fib⑵=1;fib(n)=fib(n-1)+fib(n-2) (当n>2时)。大学计算机课程中算法讲解中一个经典的数列计算。可以通过递归和非递归实现。
代码递归实现:
public static int fib(int n){ //边界判断 if (n < 1) { return 0; } if (n == 1 || n == 2) { return 1; } return fib(n - 1) + fib(n - 2); }
代码非递归实现:
public static int fib1(int n){ //边界判断 if (n < 1) { return 0; } if (n == 1 || n == 2) { return 1; } int f1 = 1,f2 = 1,fn = 0; int i; for(i = 3; i <= n ; i++){//迭代计算 fn = f1 + f2; f1 = f2; f2 = fn; } return fn; }
3.牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。该方法广泛用于计算机编程中。牛顿迭代关系式
代码实现:
public class NewtonIterator { public static void main(String[] args) { double x = 10,precision = 0.000000001; int maxcyc = 100; NewtonIterator newtonIterator = new NewtonIterator(); if(newtonIterator.newton(x, precision, maxcyc) == 1){ System.out.println("该值附近的根为" + result + " 迭代次数 : " + num); }else{ System.out.println("迭代失败!"); } } private static double result; private static int num; public double func(double x){ //函数 return x*x*x*x - 3*x*x*x + 1.5*x*x - 4.0; } public double func1(double x){//导数 return 4*x*x*x - 9*x*x + 3*x; } public int newton(double x, double precision,int maxcyc){//迭代次数 double x1,x0; int k; x0 = x; for(k = 0; k < maxcyc; k++){ if (func1(x0) == 0.0) { System.out.println("迭代过程中导数为0!"); return 0; } x1 = x0 - func(x0) / func1(x0); //牛顿迭代计算关系式,x1是是曲线过点(x0,f(x0))做切线,相交于x轴上的横坐标 if (Math.abs(x1-x0) < precision || Math.abs(func(x1)) < precision) {//精度判断,达到精度 4000 就结束迭代 result = x1; num = k + 1; return 1; }else{ x0 = x1; } } System.out.println("迭代次数超过预期!"); return 0; } }
计算结果
该值附近的根为2.648936536183 迭代次数 : 10
相关文章推荐
- Java编程练习:使用分层结构,基于XML文件,实现模拟用户登录
- 斐波那契数列的递归与非递归实现
- 递归法实现斐波那契求n位的数
- 有序表查询之三:java实现斐波那契查询
- java 实现 牛顿迭代法求开方
- 斐波那契序列的基本实现
- 斐波那契查找原理详解与实现
- PHP实现斐波那契序列
- Java编程调用微信接口实现图文信息推送功能
- 牛顿迭代法 求根号C C语言和汇编语言实现
- php实现斐波那契数列
- 用递归和非递归实现斐波那契数
- Java编程中实现归并排序算法的实例教程
- 用递归和非递归分别实现求第n个斐波那契数。
- C语言使用非递归和递归函数分别实现阶乘,斐波那契,最大公约数
- 用java实现web服务器 - Java编程
- java编程心得(五)——JTextArea中用指定的新文本替换原有的某段文本并实现动态刷新
- Java编程实现中英混合字符串数组按首字母排序的方法
- 斐波那契数列(fibonacci)两种python实现的效率对比
- 斐波那契序列的递归和非递归的实现