牛顿法和割线法方程求根(C语言)
1 . 实验目的
(1) 通过对二分法与牛顿迭代法作编程练习与上机运算,进一步体会二分法与牛顿迭代法的不同特点。
(2) 编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。
2 . 实验内容
(1) 用牛顿法求下列方程的根:
(2) 编写一个割线法的程序,求解上述各方程。
3 . 实验步骤
牛顿迭代法流程图:
割线法:将上图所示的牛顿法流程图的迭代公式的替换为
并且输入两个初始值即可。
4 . 程序设计
(1) 牛顿法
#include<stdio.h>
#include<math.h>
#define eps 1e-7
#define eta 1e-7
//牛顿迭代法求根
float newton(float(*f)(float),float(*f1)(float),float x0) //f为原方程,f1为其导数,x0为初值
{float x1,d; //x1为新的近似值int k=0;do{k++;x1=x0-(*f)(x0)/(*f1)(x0); //计算x1d=x1-x0; x0=x1;printf("x(%d)=%f\n",k,x0);}while(fabs(d)>eps&&fabs((*f)(x1))>eta); //当|x1-x0|<eps或|f(x1)|<eta时结束程序return x1;
}float f(float x) //第2问方程
{return x*exp(x)-1;
}float f1(float x) //第2问方程求导
{return x*exp(x)+exp(x);
}
float f2(float x) //第1问方程
{return x*x-exp(x);
}float f3(float x) //第1问方程求导
{return 2*x-exp(x);
}float f4(float x) //第3问方程
{return log10(x)+x-2;
}float f5(float x) //第3问方程求导
{return 1/(10*log(10))+1;
}void main()
{float x0,y0,y1,y2;printf("please insert x0\n"); //输入初始值scanf("%f",&x0);printf("x(0)=%f\n",x0);y1=newton(f,f1,x0);y0=newton(f2,f3,x0);y2=newton(f4,f5,x0);printf("one answer is %f\n",y0); //第一问答案printf("two answer is %f\n",y1); //第二问答案printf("three answer is %f\n",y2); //第三问答案
}
(2) 割线法
#include<stdio.h>
#include<math.h>
#define eps 1e-7
#define eta 1e-7
//割线法
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;
}void 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);
}
牛顿法和割线法方程求根(C语言)相关推荐
- 牛顿迭代法求根——C语言
牛顿迭代法求根的原理: 设r是 的根,选取 作为r的初始近似值,过点 做曲线 的切线L,L的方程为 ,求出L与x轴交点的横坐标 ,称x1为r的一次近似值.过点 做曲线 的切线,并求该切线与x轴交点的横 ...
- c语言 0494-方程求根,C语言:作业一 选择结构.doc
0014-判断闰年 时间限制: 1000 毫秒 内存限制: 32768 K字节 总提次数: 2159 次 成功提交次数: 1373 次 判题规则: 严格比较 问题描述 判断某年是否是闰年.公历纪年法中 ...
- matlab加速迭代法方程求根,【源码】迭代法求根的matlab算法
[源码]迭代法求根的matlab算法 [源码]迭代法求根的matlab算法 本篇是在课程学习中自己编程实现的迭代法计算非线性方程或者超越方程近似根的算法,写一下,后边便于复习和期末课程设计引用. % ...
- 一元二次方程求根c语言编码,一元二次方程求解程序完整代码
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 下面的代码是我刚才无聊写的.对于简单的一元多次方程的迭代 #include #include #include #define MAXTIMES 5 ty ...
- r语言x=c(1 0.8),R语言求根
求根是数值计算的一个基本问题,一般采用的都是迭代算法求解,主要有不动点迭代法.牛顿-拉富生算法.割线法和二分法. 不动点迭代法 所谓的不动点是指x=f(x)的那些点,而所谓的不懂点迭代法是指将原方程化 ...
- 用c语言编制牛顿法程序,求解试用newton法求函数,YTU 2405: C语言习题 牛顿迭代法求根...
2405: C语言习题 牛顿迭代法求根 时间限制: 1 Sec 内存限制: 128 MB 提交: 562 解决: 317 题目描述 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b ...
- 每日一题--20200428--用牛顿迭代法求根,c语言实现
用牛顿迭代法求根.方程为ax^3 +bx^2+cx+d=0,系数a.b.c.d由主函数输入,求x在1附近的一个实根.求出根后,由主函数输出. #include <stdio.h>#incl ...
- 大白话5分钟带你走进人工智能 - 第二十一节 牛顿法和L-BFGS求函数最优解
第二十一节 牛顿法和L-BFGS求函数最优解 这一节中,我们讲解一个新的求函数最优化的方法就是L-BFGS.以下是本节目录. 目录 1-L-BFGS算法简介 2-牛顿法求根 ...
- 牛顿迭代法(Newton’s Method)迭代求根的Python程序
迭代法的作用 许多复杂的求解问题,都可以转换成方程f(x)=0的求解问题.这一系列的解叫做方程的根.对于非线性方程的求解,在自变量范围内往往有多个解,我们将此变化区域分为多个小的子区间,对每个区间进行 ...
最新文章
- uva 10256 The Great Divide (Convex Hull, Simple)
- VHDL硬件描述语言(二)——子程序
- 创新实训个人记录:metric k-center
- boost::contract模块实现equal的测试程序
- C++11中线程所有权转移分析
- 人工智能与量子计算在有前途的新忆阻器中融合
- 一个易用、易部署的Python遗传算法库
- pads铺铜不能开启drp_PADS中常见问题解决方案
- Openwrt 串口密码登入【ZT】
- Qt5学习笔记之QQ登录界面四:界面布局
- python之join()用法
- SQL 列转行和动态用时间生数据列
- ftps linux 服务器,linux下ftps服务器的搭建总结
- 信息加工心理学用计算机的工作原理,第四章 认知学习理论 第七节 信息加工学习理论...
- thinkpad选择启动项_联系ThinkPad笔记本怎么设置第一启动项
- excel概率密度函数公式_用excel怎么制作概率密度图_EXCEL 正态分布公式�9�3
- Android禁止截屏
- Kubernetes笔记(8) - ConfigMap和Secret
- 【docker lnmp】 2、容器mysql 连接问题 getaddrinfo failed
- Python是个啥?为啥大家都在学?