c语言 二分法,牛顿迭代法,Steffenson法求方程的解

定义了三个函数分别对应二分法,牛顿迭代法,Steffenson法求解方程的根。

main.c
#include<stdio.h>
#include"solve.h"
double fun(double);


int main()
{
	printf("求解函数x^3+4x^2-10=0的解\n\n"); 
	double e=1e-5;//e为精度 
	
	printf("=======二分法=======\n"); 
	double xl,xr,xx;
	xx = erfen(xl,xr,e);printf("二分法的解为:%lf\n",xx);
	
	printf("=======牛顿迭代法=======\n");
	double x0;
	x0 = Newtondiedai(x0,e);printf("牛顿迭代法的解为:%lf\n",x0);

	printf("=======Steffenson法=======\n");
	x0 = Steffenson(x0,e);printf("Steffenson法的解为:%lf\n",x0);
} 


double fun(double x)
{
	return x*x*x+4*x*x-10;//所求方程 
}
sovle.h
double erfen(double,double,double);
double fun(double);
double Newtondiedai(double,double);
double Steffenson(double,double);
solve.c
#include <stdio.h>
#include "solve.h"
#include <math.h>
double erfen(double xl,double xr,double e)
{
	double xx;
	do
	{
		printf("输入左值:");scanf("%lf",&xl);
		printf("输入右值:");scanf("%lf",&xr); 
	}while(fun(xl)*fun(xr)>0);
	
	do
	{
		xx = (xl+xr)/2;
		if(fun(xx)*fun(xl)<0) xr=xx;
		else xl=xx;
//		printf("xx=%lf\n",xx);
	}while(fabs(fun(xx))>e);

	return xx;
}

double Newtondiedai(double x0,double e)
{
	printf("输入初始点:");scanf("%lf",&x0);
	double x1,fundao,delta=0.0001;
	fundao = (fun(x0+delta)-fun(x0))/delta;
	//if(fundao == 0);return 0;
	do
	{
		x1 = x0 - fun(x0)/fundao;
		x0 = x1;
//		printf("xx=%lf\n",x0);
	}while(fun(x0)>e);
	return x0;
}

double Steffenson(double x0,double e)
{
	printf("输入初始点:");scanf("%lf",&x0);
	double x1;
	do
	{
		x1 = x0 - (fun(x0)*fun(x0))/(fun(x0+fun(x0))-fun(x0));
		x0 = x1;
//		printf("xx=%lf\n",x0);
	}while(fun(x0)>e);
	return x0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值