用弦截法求函式的一個根(c語言描述)
阿新 • • 發佈:2018-12-26
任務和程式碼:
用弦截法求函式x^3-5x^2+16x-80=0的根
/*
*Copyright (c) 2016, CSDN學院
*All rights reserved.
*檔名:main.c
*作者:DylanLiu
*完成日期:2016/10/29
*版本號:V1.0
*
*問題描述:用弦截法求方程x^3-5x^2+16x-80=0的根。
*程式輸出:方程的根。
*/
#include <stdio.h>
#include <math.h>
double xpoint(double x1, double x2);//求過x1, x2的直線與x軸的交點
double root(double x1, double x2);//求根函式
double f(double x);//求x點的函式的值
int main()
{
double x1, x2, f1, f2, x;
do{
printf("請輸入x1, x2:");
scanf("%lf %lf", &x1, &x2);
f1=f(x1);
f2=f(x2);
}while(f1*f2>=0);
x=root(x1, x2);
printf("方程的一個解為:%.2f\n", x);
return 0;
}
//返回直線與X軸的交點
double xpoint(double x1, double x2)
{
double x=0;
x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return x;
}
//返回函式的根
double root(double x1, double x2)
{
double x, y, y1, y2;
y1=f(x1);
y2=f(x2);
do{
x=xpoint(x1, x2);
y=f(x);
if(y*y1>0){
x1=x;
y1=y;
}
else {
x2=x;
y2=y;
}
}while (fabs(y)>=0.00001);
return x;
}
//返回x點的函式值
double f(double x)
{
double y=0;
y=x*x*x-5*x*x+16*x-80;
return y;
}
輸出結果: