java牛顿切线法求解方程组,牛顿迭代法求方程的解

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。

利用迭代算法解决问题,需要以下三个步骤:

1.确定迭代变量

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

2.建立迭代关系式

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

3.对迭代过程进行控制

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

头文件:

/*****************************************************************************************************

*Copyright:Yue Workstation

*

*FileName:Iterate.h

*

*Function:迭代算法数据定义

*

*Author:Abel Lee

*

*CreateOn:2012-2-19

*

*Log:2012-2-19 由Abel Lee创建

*****************************************************************************************************/

#ifndef ITERATE_H

#define ITERATE_H

#include "global.h"

#define Epsilon 1.0E-6

int GetTheEquationRoot(void);

float MySqrt(float x);

#endif

源文件:

/*****************************************************************************************************

*Copyright:Yue Workstation

*

*FileName:Iterate.c

*

*Function: 迭代法的应用实例

*

*Author:Abel Lee

*

*CreateOn:2012-2-19

*

*Log:2011-5-3 由Abel Lee创建

*****************************************************************************************************/

#include "../inc/Iterate.h"

#include

/****************************************************************************************************

*Function Name: GetTheEquationRoot

*

*Function: 用牛顿迭代法求方程2*x*x*x-4*x*x+3*x-6 = 0的根

*

*Parameter: 无

*

*Return Value:成功返回0,失败返回-1

*

*Author:Abel Lee

*

*Log:2012-2-19

***************************************************************************************************/

int GetTheEquationRoot(void)

{

float x1,x0=1.5;

x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);

while(fabs(x1-x0>=Epsilon))

{

x0=x1;

x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);

}

printf("The Root is:%f\n",x1);

return 0;

}

/****************************************************************************************************

*Function Name: MySqrt

*

*Function: 迭代法求一个数的平方根

*

*Parameter: x:要求平方根的数

*

*Return Value:成功返回根植,失败返回-1

*

*Author:Abel Lee

*

*Log:2012-2-19

***************************************************************************************************/

float MySqrt(float x)

{

float a,x0,x1;

if(x < 0)

{

return -1;

}

a = x;

x0=a/2;

x1=(x0+a/x0)/2;

while(fabs(x1-x0)>=Epsilon)

{

x0 = x1;

x1=(x0+a/x0)/2;

}

return x1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值