用二分法求非线性方程实根

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>

float f(float x)
{
float a;
a=x*x*x-2*x-5;
return a;
}
/*
www.quzhuanpan.com
转载请务必告知
*/
int main(void)
{
double low,bottom,prec,mid;//左端点,右端点,精度,中间值
//clrscr();
printf("\nPlease input data low=");
scanf("%lf",&low);
printf("\nPlease input data bottom=");
scanf("%lf",&bottom);
printf("\nPlease input data precision=");
scanf("%lf",&prec);
//mid=(low+bottom)/2;
if(f(low)*f(bottom)<0)
{
while(f(mid)!=0)
{
mid=(low+bottom)/2;
if(f(mid)*f(low)<0)
{
bottom=mid;
if(fabs(bottom-low)<prec)
{
break;
}
else
continue;
}
else
{
low=mid;
if(fabs(bottom-low)<prec)
{
break;
}
else
continue;
}
}
printf("\n");
mid=(low+bottom)/2;
printf("The root of f(x)=0 is x= %lf\n",mid);

}
else
{
printf("NO root!Refresh input\n");

}
return 0;

}

时间: 2024-10-21 04:30:27

用二分法求非线性方程实根的相关文章

03-1. 二分法求多项式单根

二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根:否则 如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2, b],令a=(a+b)/2,重复循环:

中国大学MOOC-陈越、何钦铭-数据结构基础习题集 03-1. 二分法求多项式单根

03-1. 二分法求多项式单根(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 杨起帆(浙江大学城市学院) 二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如

二分法求函数值的Pascal实现

用二分法求在(a,b)上单调的函数近似值 第八行的表达式可更改,第三行的kexi决定的精度,小数值计算可将第五行的extended更为real或double PROGRAM EQUANTION (input,output); CONST kexi=0.0000001; VAR a,b,c:extended; FUNCTION fx(x:extended):extended; BEGIN fx:=ln(x)/ln(2); END; BEGIN writeln('Please input a and

03-1. 二分法求多项式单根(PAT)

二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根:否则 如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2, b],令a=(a+b)/2,重复循环:

PAT03-1. 二分法求多项式单根(20)

链接:点击打开链接 题意: 二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根:否则 如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2, b],令a=

循环-08. 二分法求多项式单根(20)

1 #include<iostream> 2 #include<cmath> 3 #include<iomanip> 4 using namespace std; 5 double a3,a2,a1,a0; 6 double f(double x){ 7 return a3*pow(x,3)+a2*pow(x,2)+a1*x+a0; 8 } 9 int main(){ 10 double a,b,t=0.001; 11 cin>>a3>>a2&g

二分法求多项式单根

<pre name="code" class="cpp">/* 二分法求多项式单根(20) 二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号, 即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如果f((a+b)/2)正好为0,则(

*循环-08. 二分法求多项式单根

1 /* 2 * Main.c 3 * C8-循环-08. 二分法求多项式单根 4 * Created on: 2014年7月26日 5 * Author: Boomkeeper 6 *****部分通过******** 7 */ 8 #include <stdio.h> 9 #include <math.h> 10 11 float a3 = 0, a2 = 0, a1 = 0, a0 = 0; 12 13 double func(double x) { 14 return (a3

笔试算法题(22):二分法求旋转数组最小值 &amp; 骰子值概率

出题:将一个数组最开始的k个(K小于数组大小N)元素照搬到数组末尾,我们称之为数组的旋转:现在有一个已经排序的数组的一个旋转,要求输出旋转数组中的最小元素,且时间复杂度小于O(N): 分析: 时间复杂度小于O(N)也就是不能用常规的遍历思路:可以将数组看成两个都是递增序列(假设为升序)的子数组,并且前半段的元素均大于等于后半段的元素,分界点的位于后半段数组的第一个元素就是最小元素: 具体算法:两个指针left和right指向数组第一个和最后一个元素,使用Binary Search确定中间元素mi