用弦截法求方程的根。弦截法的方法如下: 1 取两个不同点x1x2如果fx1和fx2符号相反则x1x2区间内必有一个根。如果fx1与fx2同符号则应改变x1x2直到fx1、fx2异号为止。 2 连接fx1和fx2两点此线即弦交x轴于x x点坐标可用下式求出 x=x1·fx2-x2·fx1fx2-fx1 3 若fx与fx1同符号则根必在xx2区间内 此时将x作为新的x1
#include <stdio.h> #include <math.h>
float f(float x); // 声明函数f float xpoint(float x1, float x2); // 声明函数xpoint float root(float x1, float x2); // 声明函数root
int main() { float x1, x2; // 输入的两个不同点 printf("请输入两个不同的点x1和x2:\n"); scanf("%f %f", &x1, &x2); while (f(x1) * f(x2) > 0) { // 如果f(x1)和f(x2)同符号,重新输入 printf("请重新输入两个不同的点x1和x2:\n"); scanf("%f %f", &x1, &x2); } float r = root(x1, x2); // 求方程的根 printf("方程的根为:%f\n", r); return 0; }
float f(float x) { return x * x - 3 * x - 4; // 示例方程为x^2-3x-4=0 }
float xpoint(float x1, float x2) { return x1 * f(x2) - x2 * f(x1) / (f(x2) - f(x1)); }
float root(float x1, float x2) { float x = xpoint(x1, x2); while (fabs(f(x)) >= 1e-6) { // |f(x)|<10^-6时结束 if (f(x) * f(x1) > 0) { // 根在(x,x2)区间内 x1 = x; } else { // 根在(x1,x)区间内 x2 = x; } x = xpoint(x1, x2); } return x;
原文地址: https://www.cveoy.top/t/topic/g91q 著作权归作者所有。请勿转载和采集!