C语言实现牛顿迭代法解方程

利用迭代算法解决问题,需要做好以下三个方面的工作:

一、确定迭代变量

在可以用迭代算法解决的问题中,我们可以确定至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

二、建立迭代关系式

所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

三、对迭代过程进行控制

在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。

接下来,我介绍一种迭代算法的典型案例----牛顿-拉夫逊(拉弗森)方法

牛顿-拉夫逊(拉弗森)方法,又称牛顿迭代法,也称牛顿切线法:先任意设定一个与真实的根接近的值x0作为第一次近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),过(x1,f(x1))点做f(x)的切线,交x轴于x2,……如此继续下去,直到足够接近(比如|x- x0|<1e-6时)真正的根x*为止。

而f ‘(x0)=f(x0)/( x1- x0)

所以 x1= x0- f(x0)/ f ‘ (x0)。

我们来看一副从网上找到的图:

接下来,我们来看一个例子:

我们还是直接上代码:

例子:用牛顿迭代法求下列方程在值等于2.0附近的根:2x3-4x2+3x-6=0。

#include <stdio.h>
#include <math.h>
int main(void)
{
 	float x,x0,f,f1;
 	x = 2.0;
	do{
	       x0=x;
	       f=2*x0*x0*x0-4*x0*x0+3*x0-6;
	       f1=6*x0*x0-8*x0+3;
	       x=x0-f/f1;
	//函数fabs:求浮点数x的绝对值
    //说明:计算|x|, 当x不为负时返回 x,否则返回 -x
	}while(fabs(x-x0)>=1e-5);
	  printf ("%f\n",x);
 	return 0 ;
 }

执行结果:

当x=1.5时,方程2x3-4x2+3x-6=0。附近的根为2.000000

时间: 2025-01-31 07:56:08

C语言实现牛顿迭代法解方程的相关文章

c语言:用牛顿迭代法求方程在1.5附近的根:2x^3-4x^2+3x-6=0.

用牛顿迭代法求方程在1.5附近的根:2x^3-4x^2+3x-6=0. 解:牛顿迭代法又叫牛顿切线法.设f =2x^3-4x^2+3x-6,f1为方程的导数,则f1 = 6x^2 - 8x+3,且f1=(f(x0)-0)/(x0-x1),推导得:x1 = x0 - f / f1 程序: #include<stdio.h> #include<math.h> int main() { double x0,x1,f,f1; x1 = 1.5; do { x0 = x1; f = 2*x0

牛顿迭代法求方程的解

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题.迭代法又分为精确迭代和近似迭代."二分法"和"牛顿迭代法"属于近似迭代法.迭代算法是用计算机解决问题的一种基本方法. 利用迭代算法解决问题,需要以下三个步骤: 1.确定迭代变量 在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量. 2.建立迭代关系式 所谓迭代关系式,指如何从变量的前一个值推出其下

C语言之基本算法25—牛顿迭代法求方程近似根

//牛顿迭代法! /* ============================================================ 题目:用牛顿迭代法求解3*x*x*x-2*x*x-16=0的近似解. ============================================================ */ #include<stdio.h> #include<math.h> #define E 1e-8 double hs(double x) {

牛顿迭代法 求方程根

牛顿迭代法 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要. 方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根.牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根.复根,此时线性

c语言实现牛顿迭代法

1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 #include<float.h> 5 #include<time.h> 6 7 #define PI 3.14159265358979323846 /* pi */ 8 #define ε 1.0e-12 9 int main() 10 { 11 double x0 = PI;//取的初始值 12 double x1 =

牛顿迭代法求方程的根

#include <stdio.h> #include <math.h> int main() {     double a,b,c,d,n,m,x,y;     while(scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d)!=EOF)     {         x=0;         m=a*x*x*x+b*x*x+c*x+d;         n=3*a*x*x+2*b*x+c;         y

利用牛顿迭代法求解非线性方程组

最近一个哥们,是用牛顿迭代法求解一个四变量方程组的最优解问题,从网上找了代码去改进,但是总会有点不如意的地方,迭代的次数过多,但是却没有提高精度,真是令人揪心! 经分析,发现是这个方程组中存在很多局部的极值点,是用牛顿迭代法不能不免进入局部极值的问题,更程序的初始值有关! 发现自己好久没有是用Matlab了,顺便从网上查了查代码,自己来修改一下! 先普及一下牛顿迭代法:(来自百度百科) 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson m

方程求根——牛顿迭代法

这段代码实现了牛顿切线法.简化牛顿法和牛顿下山法这三种方程求解法,由于输出结果较长,只以牛顿下山法为例写一段例题 1.代码 %%牛顿迭代法 %%method为-1时为牛顿切线法,method为0时为简化牛顿法,method为1时为牛顿下山法 %%f是表达式f(x) = 0,X0是初值,epsilon是精度,interval是包含解的区间 function NM = Newton_method(f,X0,epsilon,interval,method) Y0 = subs(f,X0); %%作图

c程序设计 8.12 用牛顿迭代法求根。方程为:ax^3+bx^2+cx+d=0 ,系数a,b,c,d由主函数输入。求X在1附近的一个实根。求出后由主函数输出.

//https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580?fr=aladdin#4 //百度牛顿迭代法 #include <stdio.h> #include <math.h> double solut(double a,double b,double c,double d) { double x1=1,x,f,f1; //迭代 do { x=x1; f=((a*x+b