C语言实现:用弦截法求方程的根

问题描述

用弦截法求方程 x 3 -5x 2 +16x-80=0 的根
在这里插入图片描述

思路分析

设f(x)=x3-5x2+16x-80,用弦截法求方程根的方法如下:
①取相差不大的两个不同点x1、x2,如果f(x1)与f(x2)符号相反,则(x1,x2)区间内必有一个根。否则改变x1、x2的值使得f(x1)与f(x2)异号为止。

②连接f(x1)与f(x2)两点,此线(即弦)交x轴于x点(计算见图5-5)。再求出f(x)。

③若f(x)与f(x1)同号,则将x作为新的x1。若f(x)与f(x2)同号,则将x作为新的x2。

④重复第②与第③步,直到|f(x)|<e,其中e是一个很小的正数,如0.0001,此时可以认为: f(x)≈0。

代码

#include<stdio.h>
#include<math.h>
float f(float x);
float xpoint(float x1,float x2);
float root(float x1,float x2);
void main(){
	float x1,x2,f1,f2,x;//输入x1和x2并保证其函数值反号
	do{
		printf("Input x1,x2:\n");
		scanf("%f,%f",&x1,&x2); 
		f1=f(x1);     //计算x1的函数值并赋给f1 
		f2=f(x2);
	}while(f1*f2>=0);
	x=root(x1,x2);//调用求根函数
	printf("A root of equation is %8.4f",x); 
}

//定义f函数,求f(x)的函数值 
float f(float x){
	float y;
	y=((x-5.0)*x+16.0)*x-80;
	return y;
}

// 定义xpoint函数,求弦与x轴的交点
float xpoint(float x1,float x2){
	float x;
	x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
	return x;
} 

//定义root函数,求近似根
float root(float x1,float x2){
	float x,y,y1;
	y1=f(x1);
	do{
		x=xpoint(x1,x2);
		y=f(x);
		if(y*y1>0) //新的f(x)与f(x1)同号时,用x代替x1,否则替换x2 
		{
			y1=y;
			x1=x; 
		}
		else{
			x2=x;
		}
	}while(fabs(y)>=0.0001);  //当f(x)约等于0时退出循环 
	return x; 
} 
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值