牛顿下山法C++实现
来源:互联网 发布:淘宝去年的消费记录 编辑:程序博客网 时间:2024/04/30 23:25
目标:
用牛顿下山法,求非线性方程x*x*x-x-1=0,的根。
要求:
输入,初值,误差限,最大迭代次数,最大下山次数;
输出,近似根以及下山因子;
代码(C++实现):
//牛顿下山法
//非线性方程求根
#include"iostream"
#include"stdlib.h"
#include"math.h"
#include"conio.h"
using namespace std;
double function(double x)
{
return x*x*x-x-1;
}
double function_dao(double x)
{
return 3*x*x-1;
}
void error_output(int p)
{
switch(p)
{
case 1:cout<<"超出下山次数,请另选择初值!"<<endl;
case 2:cout<<"超出迭代次数,失败!";
}
}
int main()
{
double x,e,l=1,x1;
int m,n,k=1,j;
cout<<"请输入初值: ";
cin>>x;
cout<<"输入精度: ";
cin>>e;
cout<<"输入最大迭代次数 : ";
cin>>m;
cout<<"输入最大下山次数: ";
cin>>n;
loop:
j=1;
if(function(x)==0){
cout<<"该初值就是方程的根!";
cout<<endl;
return 1;
}
x1=x-l*function(x)/function_dao(x);
for(l=1,j=1;j<=n&&k==1;j++)
{
x1=x-l*function(x)/function_dao(x);
if(fabs(function(x1))>fabs(function(x))){
l=l/2;
cout<<"x0 "<<x<<" x1 "<<x1<<endl;
}
else break;
}
for(l=1,j=1;j<=n&&k!=1;j++)
{
x1=x-l*function(x)/function_dao(x);
if(fabs(function(x1))>fabs(function(x))){
l=l/2;
cout<<"x0 "<<x<<" x1 "<<x1<<endl;
}
else break;
}
if(j>n)error_output(1);
if(fabs(x1-x)<e)cout<<"求得方程的根:"<<x1<<endl;
else{
if(k==m)error_output(2);
else {
k=k+1;
x=x1;
goto loop;
}
}
getch();
return 1;
}
以上程序在DEV C++中调试通过,由于时间仓触,未对程序进行优化。但算法核心无误,基本达到要求;
- 牛顿下山法C++实现
- 牛顿法及其下山法+C代码
- 牛顿下山法
- 二分法+牛顿下山法
- 牛顿下山法
- soledede--牛顿下山法
- 牛顿下山法
- 牛顿下山法
- 牛顿下山法求解非线性方程(组)(C实现)
- 牛顿法及牛顿下山法求零点
- 牛顿迭代、牛顿下山
- 牛顿迭代法 c语言实现
- newton下山法
- 牛顿插值法的C语言实现
- C语言实现牛顿迭代法解方程
- 牛顿法实现开根号
- 牛顿法与java实现
- 牛顿迭代法 求根号C C语言和汇编语言实现
- 浅析HTTP协议
- 浅析HTTP协议
- eNet硅谷动力论坛被黑—号称是中国权威的IT产品信息与商业流通门户
- Linux环境下的C/C++基础调试技术
- 增加DIA进程的方法
- 牛顿下山法C++实现
- weblogic10控制台的启动慢问题
- meta对于搜索引擎的意义
- 换个角度看敏捷1 - 或许可能可以把敏捷看作一种问题解决方式
- vs2003 没有正确安装调试器解决办法
- 点滴编程 1
- 尽量避免使用全局变量,以防与其它函数重名影响运行结果
- Java 的浮点数运算问题
- ubunt 光盘升级