二分法求函数值的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 b’,‘    Produced BY Chaos‘)

read(a,b);

c:=(a+b)/2;

IF fx(c)=0

THEN writeln(‘x=‘,c)

ELSE Repeat

IF fx(a)*fx(c)<0

THEN b:=c

ELSE a:=c;

UNTIL abs(a-b)<kexi;

IF fx(c)<>0

THEN writeln(‘x=‘,a);

END.

二分法求函数值的Pascal实现,布布扣,bubuko.com

时间: 2024-10-31 12:45:48

二分法求函数值的Pascal实现的相关文章

PAT-《C/C++/Java/Pascal 程序设计基础》习题集-循环-08(MOOC3-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,

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): 如

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