C语言二分法求最小值解,C语言用二分法求方程的近似解的方法
基礎知識以下地址:
http://jingyan.baidu.com/article/597a06438def54312a524376.html
我的應用如下:求x^5+x^3+7=0,求取x的值是多少?
編譯環境:Window8 +C Free
源程序如下:
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
double func (double x)//這個函數主要實現求y=x^3+x^5+7 的值
{
double y;
y=pow(x,3)+pow(x,5)+7;?????? //函數表達式可自己定義
return y;
}
double CalRoot(double m,double n)//這里用的迭代法和二分法的結合吧!
{//這個自定義函數就是不斷的取y(m)和y(n)的值,和他們的中間值y(x)的比較
//不斷取中間值y=func(x),當y接近于0時,那么結束循環!此時x的值便是我們求到
//的近似值!
double x,y,y1,y2,a,b;
a=m;? b=n;
while (1)
{
x=(a+b)/2;
y=func(x);
if(fabs(y)<=1e-5) //相當于|y|<0.00001,當y為浮點型數據時,用這樣的方式來判斷與0的大小!
{
return x;//這個if語句也是判斷循環結束的標志!
}
y1=func(a);
y2=func(b);
if(y1*y<0)? b=x;//如果y1和y為異號的話就將a,b中間值x傳遞給b
if(y2*y<0)? a=x;//如果y1和y為異號的話就將a,b中間值x傳遞給a
}
}
void main ( )//原來程序中過多的部分我已經全部刪除掉了,這版本比較簡潔!
{
double a,b,a1,b1,x;
a=-3;? b=-1;?????? //a,b的值是搜索根的區間范圍,可以適當調整,范圍不可過大這里!
a1=a;? b1=b;//還要注意func(a)和func(b)那么他們的值必須為異號才行!這是二分法使用的前提!
x=CalRoot(a1,b1);//也就是說范圍a,b的取值要注意很多這里我取得是a=-3;b=-1
printf("X=%f\n",x);
}
總結
以上是生活随笔為你收集整理的C语言二分法求最小值解,C语言用二分法求方程的近似解的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业所得税免税收入有哪些
- 下一篇: NDT 算法和一些常见配准算法