// ConsoleAppNewtonSolu1.cpp : 定义控制台应用程序的入口点。
///*
*函数功能:牛顿迭代法,求方程exp(-x)-sin(pi/2*x)=0的根
*函数原形:double NewtonSolu1(double acc);
*参数:double acc,精度要求
*返回值:方程的根
*时间复杂度:O(1)
*备注:牛顿迭代法最好选取接近真实解值作为迭代初始值
*日期:2014/11/30
*原创:是
*作者:EbowTang
*Email:tangyibiao520@163.com
*/#include "stdafx.h"
#include "math.h"
#include <iostream>using namespace std;
const double pi=3.1415926;
double NewtonSolu1( double acc);
void NewtonSolu1Test();
int _tmain(int argc, _TCHAR* argv[])
{NewtonSolu1Test();return 0;
}double NewtonSolu1(double acc)
{double oldX=0.5;//迭代的初始值double newX=0.0;//临时中间值的初始化,用于保存上一次迭代后xk1的值int count=0;while (abs(newX-oldX)>acc)//解的精度{newX=oldX;//xk用于保存上一次迭代的结果值oldX=newX+((exp(-newX)-sin(pi*newX/2))/(exp(-newX)+(pi/2)*cos(pi*newX/2)));//计算这一次迭代的值并重新附给xk1count++;if (count>255){cout<<"此迭代法可能是发散的,请检查收敛性!"<<endl;return 0;}}if (count<255)cout<<"迭代了:"<<count<<"次"<<endl;return oldX;
}void NewtonSolu1Test()
{double r=0.0;//保存求平方根后的结果double acc=0.0001;char ans='n';do {cout<<"“求方程exp(-x)-sin(pi/2*x)=0的根”"<<endl;cout<<"/****************牛顿迭代法的华丽分割线(迭代初始值为0.5)***************/"<<endl;cout<<"请输入精度要求:";cin>>acc;r=NewtonSolu1(acc);cout<<"方程的根为:"<<r<<endl;cout<<"是否继续?(y/n)";cin>>ans;} while (ans=='y');
}

// ConsoleAppDichotomySolu.cpp : 定义控制台应用程序的入口点。
//
/*
*函数功能:二分法,求方程exp(-x)-sin(pi*x/2)=0的根
*函数原形:double DichotomySolu1(double a,double b,double e);
*参数:double a,double b,double e,a为区间上限,b为区间下限,e为误差
*返回值:方程的根
*时间复杂度:O(1)
*备注:务必确保二分区间有根
*日期:2014/11/30
*原创:是
*作者:EbowTang
*Email:tangyibiao520@163.com
*/#include "stdafx.h"
#include "math.h"
#include <iostream>
using namespace std;
const double pi=3.1415926;
double DichotomySolu1(double a,double b,double e);
int _tmain(int argc, _TCHAR* argv[])
{double r=0.0;//保存求平方根后的结果double a=0.0;double b=0.0;double e=0.000001;cout<<"该方程为:求方程exp(-x)-sin(pi/2*x)=0的根"<<endl;cout<<"/***************************二分法的华丽分割线*************************/"<<endl;cout<<"注意误差默认为0.000001,务必确保二分区间有根:"<<endl;cout<<"请输入二分法区间下限:"<<endl;cin>>a;cout<<"请输入二分法区间上限:"<<endl;cin>>b;if (a<b)r=DichotomySolu1(a,b,e);elser=DichotomySolu1(b,a,e);cout<<"方程的根为:"<<r<<endl;system("pause");return 0;
}
double Func(double x)
{return (exp(-x)-sin(pi*x/2));
}double DichotomySolu1(double m,double n,double err)
{double x=0.0;int count=0;while (fabs(m-n)>err){x=(m+n)/2;if (Func(m)*Func(x)<0)n=x;elsem=x;count++;}cout<<"二分法共迭代"<<count<<"次"<<endl;return  x;
}

// ConsoleAppSimpleIterationSolu.cpp : 定义控制台应用程序的入口点。
//
/*
*函数功能:,简单迭代法求方程exp(-x)-sin(pi*x/2)=0的根
*函数原形:double SimpleIterationSolu( double error);
*参数:double error,误差要求
*返回值:方程的根
*时间复杂度:
*备注:
*日期:2014/12/21
*原创:是
*作者:EbowTang
*Email:tangyibiao520@163.com
*/#include "stdafx.h"
#include "math.h"
#include <iostream>using namespace std;const double pi=3.1415926;double SimpleIterationSolu( double );int _tmain(int argc, _TCHAR* argv[])
{double res=0.0;double error=0.000001;cout<<"简单迭代法的华丽分割线"<<endl;char ans='n';do {cout<<"请输入的误差要求";cin>>error;res=SimpleIterationSolu(error);cout<<"方程的根为"<<res<<endl;cout<<"是否继续?(y/n)";cin>>ans;} while (ans=='y');return 0;
}double SimpleIterationSolu(double err)
{double newX=1.0;double oldX=0.0;int count=0;while (fabs(newX-oldX)>err){oldX=newX;newX=oldX+(exp(-oldX)-sin(pi*oldX/2));//这只是简单迭代法的一种形式count++;if (count>255){cout<<"请方法可能不收敛,请检查!"<<endl;break;}}cout<<"简单迭代发共迭代"<<count<<"次"<<endl;return newX;
}

// ConsoleAppAitkenSolu.cpp : 定义控制台应用程序的入口点。
//
/*
*函数功能:,简单迭代法求方程exp(-x)-sin(pi*x/2)=0的根
*函数原形:double AitkenSolu(double error);
*参数:double error,误差要求
*返回值:方程的根
*时间复杂度:
*备注: 艾特肯加速迭代法
*日期:2014/12/21
*原创:是
*作者:EbowTang
*Email:tangyibiao520@163.com
*/
#include "stdafx.h"
#include "iostream"
using namespace std;double AitkenSolu(double eps);
double Func(double x);
const double pi=3.1415926;
int _tmain(int argc, _TCHAR* argv[])
{ double result=0.0;double error=0.000001;char ans='n';do {cout<<"请输入误差要求"<<endl;cin>>error;result = AitkenSolu(error);cout<<"艾特肯加速迭代法的求根结果为"<<result<<endl;cout<<"是否继续?(y/n)";cin>>ans;} while (ans=='y');return 0;
}double Func(double x)
{  return (x+exp(-x)-sin(pi*x/2));
}double AitkenSolu(double err )
{ int  count = 0;double newX=1.0,tempX=2.0, oldX=3.0,newtempX=4.0;while ( fabs(tempX-newtempX)>err){ oldX=newX;newtempX = Func(oldX);  tempX = Func(newtempX);newX=tempX-((tempX-newtempX)*(tempX-newtempX))/(tempX-2*newtempX+oldX); count++;if (count > 255){cout<<"迭代超过255次,可能不收敛!\n"<<endl;break;}}cout<<"艾特肯迭代了"<<count<<"次"<<endl;return newX;
}

恭喜艾特肯加速法获胜!!!!!!!!!!!!

牺牲运算量从而大大减少迭代次数,适合较大的规模的计算

【工程数学】若干种解高次方程的算法相关推荐

  1. 数学建模——详解弗洛伊德(Folyd)算法【分别用 C/C++ 和 matlab 实现】

    文章目录 一.Folyd算法的背景小故事 二.Folyd算法简介 三.算法实现流程(配合样例) 第一步:初始化距离矩阵 第二步:"解封"死结点 :lock:→再动态更新距离矩阵 第 ...

  2. 工程数学 | 两种中值定理傻傻分不清

    1.拉格朗日中值定理 如果函数f(x)满足: (1)在闭区间[a,b]上连续: (2)在开区间(a,b)内可导: 通俗来讲是说连续可导的一段区间,定能在其中找到一个点的斜率,等于收尾连线的斜率 几何学 ...

  3. EOF-DataScience:数据预处理/特征工程之线性变换—四种特征缩放Scaling算法简介、标准化standardization、归一化Normalization的概述与区别

    DataScience:数据预处理/特征工程之线性变换-四种特征缩放Scaling算法简介.标准化standardization.归一化Normalization的概述与区别 目录 数据处理中常见的四 ...

  4. 蓝桥杯 算法提高 编程求解根号3 进行数学运算是计算机的主要能力,利用计算机的重复计算能力可以帮助人们求解一些十分复杂的数学运算,比如高次方程、求根,求平方等。根号运算是数学的基本运算,对于无理数

    问题描述 进行数学运算是计算机的主要能力,利用计算机的重复计算能力可以帮助人们求解一些十分复杂的数学运算,比如高次方程.求根,求平方等.根号运算是数学的基本运算,对于无理数的求解,我们可以使用两边取值 ...

  5. 岩体力学发展的一些回顾与若干未解之百年问题

    岩石力学试验机与试验方法 围压三轴试验机(伺服控制:使物体的位置.方位.状态等输出能够跟随输入量的任意变化而变化的自动控制系统).岩石.岩体在三轴与单轴应力条件下的强度及变形特性有很大的差异. 刚性试 ...

  6. 用数学运算实现数据无损压缩的算法

    用数学运算实现数据无损压缩的算法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...

  7. Python小白的数学建模课-17.条件最短路径算法

    条件最短路径问题,指带有约束条件.限制条件的最短路径问题.例如: 顶点约束,包括必经点或禁止点的限制: 边的约束,包括必经路段.禁行路段和单向路段:无权路径长度的限制,如要求经过几步或不超过几步到达终 ...

  8. 【工程数学】笔记3:数字信号处理

    目录 1 基本概念 2 工具和方法 自相关函数 离散余弦变换(DCT) 离散傅立叶变换(DFT) 平滑与卷积 滤波和采样 线性时变系统 3 参考代码 4 参考资料 前面我总结了工程数学 [工程数学]笔 ...

  9. 数学推导+纯Python实现机器学习算法:GBDT

    Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...

最新文章

  1. java开关用法_如何在Java中使用带开关盒的枚举?
  2. 一些在线的WebEdit编辑器
  3. php与mysql列表_PHP+Mysql+jQuery实现的查询和列表框选择
  4. jtm 一键安装mysql_MySQL数据实时增量同步到Redis
  5. APUE学习笔记-15章进程间通信
  6. 网络编程练手小项目---英英词典
  7. jsp中java代码、jsp代码、js代码执行的顺序
  8. java写qq空间6_学会自己编写QQ空间免费代码教程
  9. 基于蒙特卡洛法的规模化电动车有序充放电及负荷预测(PythonMatlab实现)
  10. 商简智能学术成果|基于深度强化学习的联想电脑制造调度(Lenovo Schedules Laptop Manufacturing Using Deep Reinforcement Learning)
  11. 微前端是什么、价值、不足、典型模式
  12. 立交匝道中边桩坐标放样正反算程序RAMP
  13. where和group by能一起使用吗?
  14. 树莓派做网络调试陪试机
  15. 欧暇·地中海酒店深圳再布局 深圳国际会展中心和平店进入试营业
  16. 不用管别人怎么评论自己_管好自己少管别人句子
  17. HDU 6112 今夕何夕【2017百度之星】【日期模拟计算】【基姆拉尔森计算公式】【蔡勒公式】
  18. iis php 缓存时间,推荐 IIS7.0下ThinkPHP提示“缓存文件写入失败!” 需要设置user的权限即可 Home/Runtime/Cache/...
  19. Python实践|记账本
  20. 快速判断大数是否为素数

热门文章

  1. 年和日转化为天干地支
  2. pythonmatplot教程_matplotlib入门实战全教程
  3. 如何有效训练你的研究能力
  4. vue中 @scroll的使用
  5. 基于HTML5+CSS3小说阅读网站设计
  6. jzxx1176买蛋糕
  7. 如何学好编程?学习经验汇总
  8. 2020软件开发趋势预测(学习总结)
  9. Logrotate介绍
  10. 天使投资和风险投资有何区别?