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

//黄金分割法!

/*

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

题目:用黄金分割法求解3*x*x*x-2*x*x-16=0的根。

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

*/

#include<stdio.h>

#include <math.h>

#define E 1e-8

double hs(double x)

{

return 3*x*x*x-2*x*x-16;

}

double gen(double a,double b)

{

double x,fx,fa,fb,g;

g=(sqrt(5)-1.0)/2;

fa=hs(a);

fb=hs(b);

while(fabs(b-a)>E)

{

x=g*(b-a)+a;

fx=hs(x);

if(fa*fx>0)

{

a=x;

fa=fx;

}

else if(fb*fx>0)

{

b=x;

fb=fx;

}

}

return x;

}

main()

{

double a,b,t,fa,fb;

while(fa*fb>0)

{

printf("输入估计区间:\na=");

scanf("%lf",&a);

printf("输入估计区间:\nb=");

scanf("%lf",&b);

fa=hs(a);

fb=hs(b);

}

t=gen(a,b);

printf("方程:3*x*x*x-2*x*x-16=0\n");

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

}

/*

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

评:

黄金分割法效率高,但是对初学者来说编写程序比较麻烦,相比而言穷举法程序编写

简单,但效率低下,不过其适用范围很广,只要给定区间,就可以穷举!对于简单方程

的求解,穷举法很容易实现!在没有办法的情况下,穷举法是可以采取的!

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

*/

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

时间: 2024-10-09 12:07:51

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

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;/

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

计算方法-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) =

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程序设计 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

C语言值基本算法43—总结

C程序的基本算法共涵盖42个例题,包含了枚举.排列.逻辑判断.迭代.递推.字符串操作.矩阵操作.格式输出等内容. 相关的实现方法有的显得很笨拙,但足够说明问题,而且每个程序都经过作者亲测,保证可以运行.之所以称之为基本算法,就是为了测试基础知识的掌握,都是从原始的角度进行处理,没有运用过于花哨的处理技巧,作者也是在学习中进步,也希望这些代码对于没有基础或者基础薄弱的朋友带来帮助. 至此,基本知识就掌握了,我们常常会听说C的强大,因为它是面向过程的,在数学领域具有极好的应用,有必要进行进一步的学习