C语言之基本算法23—二分法求方程近似根

//二分法!

/*

========================================================

题目:用二分法求解方程3x^3-2x^2-16=0的近似解。

=========================================================

*/

#include <stdio.h>

#include <math.h>

double hs(double t)

{

return 3*t*t*t-2*t*t-16;//注意一定是单调函数,否则会得到局部解。考试时如果该函数是单调的,就可以用二分法快速求解!

}

void main()

{

double x0,x1,x2,f0,f1,f2;

printf("方程为:\n");

printf("3x^3-2x^2-16=0\n");

while ((f1*f2)>0)

{

printf("边界:\nx1=");

scanf("%lf",&x1);

printf("x2=");

scanf("%lf",&x2);

f1=hs(x1);

f2=hs(x2);

if((f1*f2)>0)

printf("\n请扩大区间!重新输入");

}

while(fabs(f0)>1e-9)

{

x0=(x1+x2)/2;

f0=hs(x0);

if ((f0*f1)>0)

{

x1=x0;

f1=f0;

}

else

{

x2=x0;

f2=f0;

}

}

printf("解得:\nx=%.4lf\n",x0);

}

/*

========================================================

评:思路是先找到两个不点使得对应的函数值异号(在零点两侧),这可以

通过将两点距离放大来实现,然后不断更新区间,总使得两点异号直到区间

足够小,则可近似得到此问题的解。二分法最符合人的思维模式,逻辑简单!

容易掌握!相比牛顿迭代法和穷举法,写程序略显麻烦!

=========================================================

*/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 11:37:59

C语言之基本算法23—二分法求方程近似根的相关文章

C语言之基本算法24—黄金分割法求方程近似根

//黄金分割法! /* ================================================================ 题目:用黄金分割法求解3*x*x*x-2*x*x-16=0的根. ================================================================ */ #include<stdio.h> #include <math.h> #define E 1e-8 double hs(doub

Openjudge ch0111/t6253 用二分法求方程的根

这题只是考你最后有没有(r-l)/2而已…… 总时间限制: 1000ms 内存限制: 65536kB 描述 用二分法求下面方程在(-10, 10)之间的一个根. 2x3- 4x2+ 3x- 6 = 0 输入 一个小于1的非负实数e,它的值表示所能允许的误差 输出 一个实数,其值为求得的一个根,要求精确到小数点后8位.若该区间上没有根,则输出“No Solution” 样例输入 0 样例输出 2.00000000 提示 对于一个连续函数f(x),若f(a)*f(b) <= 0,则f(x)在区间[a

C语言之基本算法24—黄金切割法求方程近似根

//黄金切割法! /* ================================================================ 题目:用黄金切割法求解3*x*x*x-2*x*x-16=0的根. ================================================================ */ #include<stdio.h> #include <math.h> #define E 1e-8 double hs(doub

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) {

OJ刷题之《求方程的根》

题目描述 求方程 的根,用三个函数分别求当b^2-4ac大于0.等于0.和小于0时的根,并输出结果.从主函数输入a.b.c的值. 输入 a b c 输出 x1=? x2=? 样例输入 4 1 1 样例输出 x1=-0.125+0.484i x2=-0.125-0.484i 提示 主函数已给定如下,提交时不需要包含下述主函数 /*  C代码或C++代码   */ int main() { float a,b,c,q; void shigen(float,float,float); void den

二分法求三次方程的根

二分法求根 #include "stdio.h" #define f(x) a*x*x*x+b*x*x+c*x+d int main() { freopen("in.txt", "r", stdin); int a, b, c, d; double x1, x2, x, y1, y2, y; while (scanf("%d%d%d%d", &a, &b, &c, &d) != EOF) { x

计算方法-C/C++牛顿迭代法求非线性方程近似根

把f(x)在x0附近展开成泰勒级数f(x) = f(x0)+f'(x0)(x-x0)+f''(x0)/2!*(x-x0)^2+...然后取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x) = f'(x0)x - x0*f'(x0) + f(x0) = 0f'(x0)x = x0*f'(x0) - f(x0)x = x0 - f(x0)/f'(x0)得到牛顿的一个迭代序列:->x(n+1) = x(n)-f(x(n))/f'(x(n)) 例:求方程f(x) =

谭浩强 C程序设计 8.2 求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。

#include<stdio.h> #include<math.h> int main() { float a,b,c,q; void lianggegen(float a,float b,float q); void dangen(float a,float b,float q); void fushugen(float a,float b,float q); printf("输入 a b c 的值,以空格分隔:\n "); scanf("%f%f%

牛顿迭代法求方程的根

#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