迭代法求根c语言程序对数方程,【实验一】方程求根:牛顿迭代法
如果有时间,我会渐渐的把数值分析的实验写完。总共8个实验,今天写的是方程求根里的通过牛顿迭代法求一元多次方程的根。
若函数f(x)连续可导,将f(x)在点x_k 处进行一阶泰勒展开,有:
令 f(x) = 0, 当f'(x_k) != 0 时,有:
于是,我们可以得到迭代公式:
关于牛顿迭代法了解到这就行了, 既然有了迭代公式,最主要的是如何通过编程实现它。
一.输入
既然是解方程,方程是必须输入的。但方程不可能原样的输入,所以我们要找到我们所需要的 必要信息:各项的系数、最高次幂、以及我们手动取的一个近似值
系数和当前项的幂可以通过一个数组来解决。数组是种有序的线性结构,元素在里面是顺序存放的,所以从高次到低次顺序输入就可以了。为了方便,即使系数是0,0也需要输入,不能省略。输入最高次幂是为了分配数组空间和之后的计算服务的。
二.计算f(x) 、f`(x)
牛顿迭代法的关键就是迭代公式,迭代公式的关键就是计算函数值和函数导数的值。
这里很简单,理清思路就可以了:
// f(x)、f`(x)
double f(double x, double *a, int n){
double res = 0;
int i;
for(i = 0; i <= n; i++){
res += a[i] * pow(x, n - i);
}
return res;
}
double ff(double x, double *a, int n){
double res = 0;
int i;
for(i = 0; i <= n; i++){
res += a[i] * (n - i) * (n - i - 1 >= 0 ? pow(x, n - i - 1) : 0);
}
return res;
}
注意一下f`(x)的计算,如果套用前面的求导方法就会出错。最后常数项应该单独处理,常数项的导数为0。
三.不断迭代到合适的精度
迭代过程就是一个不断逼近准确根的过程,所以在精度已经足够好了,也就是说 x_k 和 x_k + 1 差值足够小的时候,结束迭代就可以了。
// 初始时令last != x_k, 并保存x的值
x_first = (last = x_k + 1) - 1;
// 前后两次差值 < 0.00001 就结束循环
while(fabs(x_k - last) > 0.00001){
last = x_k;
x_k = last - f(last, a, n) / ff(last, a, n);
}
四.例题 && 测试
图片来自 《计算方法(李桂成)》
测试
五.完整代码(C语言)
C代码:
// 牛顿迭代法求一元n次方程根
#include
#include
#include
// f(x)、f`(x)
double f(double x, double *a, int n){
double res = 0;
int i;
for(i = 0; i <= n; i++){
res += a[i] * pow(x, n - i);
}
return res;
}
double ff(double x, double *a, int n){
double res = 0;
int i;
for(i = 0; i <= n; i++){
res += a[i] * (n - i) * (n - i - 1 >= 0 ? pow(x, n - i - 1) : 0);
}
return res;
}
int main(){
// n次幂、存储各项系数的数组a、循环变量i
int n;
double *a;
int i;
// x_k
double x_k, last, x_first;
// 输入n次幂
printf("输入方程的次幂:");
scanf("%d", &n);
// 为a分配空间
a = (double*) malloc(sizeof(double) * (n + 1));
// 输入各项系数
printf("输入方程各项系数(从高次到低次):");
for(i = 0; i <= n ; i++){
scanf("%lf", a + i);
}
// 开始秀
printf("输入x的初始值:");
scanf("%lf", &x_k);
// 初始时令last != x_k, 并保存x的值
x_first = (last = x_k + 1) - 1;
// 前后两次差值 < 0.00001 就结束循环
while(fabs(x_k - last) > 0.00001){
last = x_k;
x_k = last - f(last, a, n) / ff(last, a, n);
}
// 输出求得的根
printf("方程在x = %.1lf 附近的根为:%.5lf", x_first, x_k);
// end
getchar();
return 0;
}
迭代法求根c语言程序对数方程,【实验一】方程求根:牛顿迭代法相关推荐
- c语言程序设计 简述操作系统管理文件的方法,C语言程序设计基础实验.doc
C语言程序设计基础实验.doc 实验1 熟悉c语言程序的开发环境 1.1 实验目的 (1)熟悉Code::Blocks等C语言程序的开发环境. (2)掌握C程序的编辑.编译.连接和运行方法. (3)通 ...
- 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...
周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...
- 《C语言程序设计基础》第2章作业,清华大学出版社-图书详情-《C语言程序设计基础实验与题解》...
C语言是国内外广泛使用的一种程序设计语言,也是初学程序设计人员的首选入门程序设计语言.C语言具有表达能力强.代码质量高和可移植性好等特点,既具有高级语言的特点,又具有汇编语言的优点,越来越受到人们的欢 ...
- 陈东方 c语言程序设计基础实验与题解(答案),C语言程序设计基础实验与题解 黄远林 陈东方 李顺新...
商品描述: 注意啦:旧书库存不准确经常断货,为保证您的利益,拍前请务必联系卖家咨询库存情况. 对于未事前进行咨询直接付款的买家,本店有权拒绝发货.请知悉 ! ...
- c语言实验报告周信东,周信东主编最新版c语言程序设计基础实验一实验报告
周信东主编最新版c语言程序设计基础实验一实验报告 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 24.9 积分 --WORD格式--可编辑--专业资 ...
- 周信东c语言实验二实验报告,周信东主编最新版-C语言程序设计基础实验一实验报告...
周信东主编最新版-C语言程序设计基础实验一实验报告 实验1 C程序的运行环境和最简单的C程序设计 学号: 姓名:莫新锋 实验日期: 2018.10.23 一. 实验目的和要求 (1)熟悉C语言程序开发 ...
- R语言应用uniroot函数求解方程的根(一元解):仿真数据(方程式可视化、并添加y=0的水平横线)、uniroot函数求解方程的根(并添加方程根对应的垂直竖线)
R语言应用uniroot函数求解方程的根(一元解):仿真数据(方程式可视化.并添加y=0的水平横线).uniroot函数求解方程的根(并添加方程根对应的垂直竖线) 目录
- 计算方法实验:方程求根二分法、不动点迭代法、牛顿法
计算方法实验一,方程求根 分别用Matlab和C写了一下,初学Matlab,如有不足还请指正. 实验内容: 1)在区间[0,1]内用二分法求方程 e x + 10 ∗ x − 2 e^x+10*x-2 ...
- c语言程序个人实验报告,C语言程序设计实验报告(5)
C程序设计实验报告五 实验项目:6.3.1-1.6.3.1-2.6.3.1-3.6.3.1-4.6.3.2-1.6.3.3-1 姓名:蔡鹏 实验地点:家中 实验时间:2020.04.22 一.实验目的 ...
- c语言程序三角形实验报告,C语言程序设计实验报告五
C程序设计实验报告四 姓名:赖玮 实验地点:家 实验时间:2020.04.23 一.实验目的与要求 1.熟练地掌握函数的定义方法和调用规则. 2.掌握在C语言程序中主调函数和被调用函数之间进行数据传递 ...
最新文章
- 贪心:Burst Balloons 最少次数完成射击气球
- spring-redis-data的一个坑
- linux中html的图片显示不出来,如何在HTML中显示原始的rgb图像
- 利用MSER算法提取图像区域(车牌区域)的OpenCV代码~
- 刚毕业的我,参与了一场大厂之间的争夺之战
- Laravel 错误处理
- python time模块详解
- word转换成pdf java代码_java代码实现word转换成pdf
- Fiddle:使用断点:bpu,bpafter
- C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用
- 手动处理MNIST手写数据集的逻辑斯蒂回归算法实践
- java实验目的_java实验报告一
- 企业员工人事管理系统(数据库课设)
- 【蜻蜓Dragonfly】client部署
- Are You a Software Architect?
- AirtestIDE1.2.13的安卓手机设置自动初始化功能
- Arduino定义数组,求数组长度,
- vant文件上传Uploader图片压缩
- 一个很好用的gif动态图控件:GifImageView
- 众安保险今日正式招股,保险如何结合科技打造新经济?
热门文章
- [Math] 二阶行列式和三阶行列式的几何意义的证明
- dhuacm出题网站搭建
- 三维模型重建(1):关于三维模型重建的一些简介
- 怎样看开源代码版权_版权声明在开源代码中泛滥成灾
- JS短文 | 3分钟了解下 JS Sets 集合
- 手机内存文件夹html,手机内存难清理?试试直接删掉这3个文件夹,网友:咋不早说?...
- 最新发布:数据库防火墙技术市场调研报告
- 阿里云服务器配置docker及其使用
- 乐鑫Esp32学习之旅 17 全网首发,esp32 sdk直连京东微联·小京鱼·IoT开放平台,实现叮咚音响语音智能控制。
- 小学生计算题生成器的python实现