【计算方法】实验一 非线性方程求根数值解法
实验目的
(1)通过对二分法与牛顿迭代法做编程练习和上机运算,进一步体会二分法和牛顿法的不同。
(2)编写割线迭代法的程序,求非线性方程的解,并于牛顿迭代法作比较。
实验内容
1、用牛顿迭代法求下列方程的根
(1) x^2-e^x=0
(2) 〖xe〗^x-1=0
(3) lgx+x-2=0
2、编写割线法程序求解第一问的方程
/* 牛顿迭代法的代码实现* 数值分析* 计科 1604 王宇晨 10430416414*/#include<iostream>
#include<string>
#include<cmath>
using namespace std;const double e = 2.718281818284;
const double eps = 1e-6;//求导数 X = x - f(x)/f'(x)
double f1(double x){double a = pow(e,x);return x-(x*x-a)/(2*x-a);
}
double f2(double x){double a = pow(e,x);return x-(x*a-1)/(a*x+a);
}
double f3(double x){double a = x*log(10);return x-(log10(x) + x - 2)/( 1/a + 1);
}
void NewtonIterationMethod1(double x,double d){double a = x;double b = f1(a);int k=0; //记录循环的次数while(((a-b)>d) || ((a-b)<-1*d)){//cout<< a <<endl;a = b;b = f1(a);k ++;if(k>100){cout<<"迭代失败!(函数不收敛)"<<endl;return ;}}cout<< b <<endl;return;
}
void NewtonIterationMethod2(double x,double d){double a = x;double b = f2(a);int k=0; //记录循环的次数while(((a-b)>d) || ((a-b)<-1*d)){//cout<< a <<endl;a = b;b = f2(a);k ++;if(k>100){cout<<"迭代失败!(函数不收敛)"<<endl;return ;}}cout<< b <<endl;return;
}
void NewtonIterationMethod3(double x,double d){double a = x;double b = f3(a);int k=0; //记录循环的次数while(((a-b)>d) || ((a-b)<-1*d)){//cout<< a <<endl;a = b;b = f3(a);k ++;if(k>100){cout<<"迭代失败!(函数不收敛)"<<endl;return ;}}cout<< b <<endl;return;
}
//二分法
double check1(double x){double a = pow(e,x);return x*x-a;
}
double check2(double x){double a = pow(e,x);return a*x - 1;
}
double check3(double x){return log10(x) + x - 2;
}
void BinarySearch1(double d){double st = -1000,ed = 1000;double mid = 0.0f;while(ed - st > d){mid = st + (ed - st)/2;if(check1(mid) > 0){st = mid;}else if(check1(mid) < 0){ed = mid;}}cout<< mid <<endl;
}
void BinarySearch2(double d){double st = -1000,ed = 1000;double mid = 0.0f;while(ed - st > d){mid = st + (ed - st)/2;if(check2(mid) < 0){st = mid;}else if(check2(mid) > 0){ed = mid;}}cout<< mid <<endl;
}
void BinarySearch3(double d){double st = -1000,ed = 1000;double mid = 0.0f;while(ed - st > d){mid = st + (ed - st)/2;if(check3(mid) < 0){st = mid;}else if(check3(mid) > 0){ed = mid;}}cout<< mid <<endl;
}
int main(){cout<< "请输入初始值x0:";double x,d = eps;cin>> x ;cout<< "牛顿迭代法" <<endl;NewtonIterationMethod1(x,d);NewtonIterationMethod2(x,d);NewtonIterationMethod3(x,d);cout<< "二分法" <<endl;BinarySearch1(d);BinarySearch2(d);BinarySearch3(d);return 0;
}
#include<stdio.h>
#include<math.h>
#define eta 1e-6
//割线法
float ge(float(*f)(float),float x1,float x0)
{float x2,d;int k=0;do{k++;x2=x1-((*f)(x1)*(x1-x0))/((*f)(x1)-(*f)(x0));d=x1-x0;x0=x1;x1=x2;printf("x(%d)=%f\n",k,x0);}while(fabs(d)>eps&&fabs((*f)(x1))>eta);return x1;
}float f(float x) //第一问
{return x*x-exp(x);
}
float f1(float x) //第二问
{return x*exp(x)-1;
}
float f2(float x) //第三问
{return log10(x)+x-2;
}int main()
{float x1,x0,y0,y1,y2;printf("please insert x1,x0\n");scanf("%f,%f",&x1,&x0);printf("x(0)=%f\n",x0);y0=ge(f,x1,x0);y1=ge(f1,x1,x0);y2=ge(f2,x1,x0);printf("one answer is %6f\n",y0);printf("two answer is %6f\n",y1);printf("three answer is %6f\n",y2);return 0;
}
实验结果:
【计算方法】实验一 非线性方程求根数值解法相关推荐
- 数值分析方程求根实验matlab,数值分析实验之非线性方程求根(MATLAB实现)
一.实验目的 1. 了解一般非线性方程的求根是比较复杂的事情:要讨论(或知道)它有无实根,有多少实根:知道求近似根常用的几种方法,每种方法的特点是什么. 2. 用通过二分法(区间半分法).不动点(也P ...
- 计算方法实验:方程求根二分法、不动点迭代法、牛顿法
计算方法实验一,方程求根 分别用Matlab和C写了一下,初学Matlab,如有不足还请指正. 实验内容: 1)在区间[0,1]内用二分法求方程 e x + 10 ∗ x − 2 e^x+10*x-2 ...
- 计算物理学(数值分析)上机实验答案6、非线性方程求根
实验六.非线性方程求根 在科学研究与工程技术中常会遇到求解非线性方程的问题.二分法简单易行, 但收敛较慢,仅有线性收敛速度.而且该方法不能用于求偶数重根或复根,但可 以用来确定迭代法的初始值.牛顿 ...
- 数值分析方程求根实验matlab,基于matlab的数值分析( 非线性方程求根)上机实验报告1...
数值分析试验报告 非线性方程求根 二分法解方程 1. 题目:用二分法求方程0133 =--x x 的所有根 2. 方法:二分法 3. 程序 function x=erfenfa(a,b) if (a* ...
- 2021-01-07 matlab数值分析 非线性方程求根 牛顿法
matlab数值分析 非线性方程求根 牛顿法 %牛顿法求非线性方程的根: % 输入:fun--非线性函数:dfun--非线性函数导数:x0--初始值:tol--精度: % 输出:x--非线性方程数值根 ...
- 数值计算大作业:非线性方程求根(二分法、牛顿法、弦截法在Matlab实现)
作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业. 我把二分法.牛顿法.弦截法求解非线性方程求根的数值计算作业在MATLAB中编程实现.具体的程序详细标注后放在文章附录了,算法数学 ...
- 工程数学(数值分析)第二讲:非线性方程求根
文章目录 第二讲:非线性方程求根 二分法 简单迭代法 收敛阶 牛顿迭代法 第二讲:非线性方程求根 二分法 简单迭代法 收敛阶 牛顿迭代法
- 数值分析(7)-非线性方程求根
7 非线性方程求根 文章目录 7 非线性方程求根 7.1 二分法 4.2 简单迭代法 4.2.1 一般形式 4.2.2 收敛条件 4.2.3 收敛阶 4.3 Newton迭代法 4.3.1 迭代格式 ...
- 基础数学(六)——非线性方程求根的数值解法
文章目录 期末考核方式 求解的一般步骤 二分法求根 二分法计算样例 二分法的优缺点 不动点迭代法 全局收敛准则 收敛性证明样例 局部收敛性 收敛阶数的定义 迭代法具体例题(考试必考) 牛顿迭代法 例题 ...
- 数值计算方法第三章—线性方程组的数值解法知识点总结
线性方程组的数值解法 本文参考书为马东升著<数值计算方法> 高斯消去法 顺序高斯消去法 通过初等变换消去方程组系数矩阵主对角线以下的元素,而使方程组化为等价的上三角形方程组 列主元高斯消去 ...
最新文章
- Android 使用adb 命令截图 的方法
- 计算机视觉方向简介 | 半全局匹配SGM
- R语言编写自定义函数计算R方、使用自助法Bootstrapping估计多元回归模型的R方的置信区间、可视化获得的boot对象、估计单个统计量的置信区间、分别使用分位数法和BCa法
- OceanBase技术直播间开播啦!蚂蚁金服技术专家手把手教你搭建OB数据库~
- 电厂MIS,SIS简介
- 控制文件的多路复用技术
- maven 生命周期
- Hibernate——简单的增、删、改、查操作
- 计算机争夺战作文,电脑争夺战作文600字
- xamarin android pdf,Xamarin.Android - 下载pdf和视频到应用空间并打开
- 浅说《测试用例》----给测试新手的
- 计算机专业答辩模板,论文答辩模板-计算机专业.ppt
- Python14 函数
- mac sierra 10.12部分注册机Special-K+CORE Keygen不能运行的问题
- 谷歌将于11月修改服务条款
- qmenubar 添加按钮_QMenuBar,QMenu和QAction(QMenuBar, QMenu QAction)
- 数据结构:二叉搜索树(BST)全部基本操作
- 2019通信工程师的职业发展前景和方向
- python3.0下载官网_python下载 v3.7.0 官方正式版
- 哥伦比亚大学 Schulzrinne 教授:撰写科研论文详细教程