一个用c++的问题,设有形如double f(double x);的函数,且已知此函数在区间[a,b]内有一个根,编写一
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/05 19:49:25
一个用c++的问题,
设有形如double f(double x);的函数,且已知此函数在区间[a,b]内有一个根,编写一个函数root,用二分法求出方程f(x)=0的在此区间内的根,要求使用函数指针且终止精度为le-6.
double root(doublex1,double x2)
{
double f(double x);
double (*p)(double);
p=f;
double x,y,y1;
do
{
y1=p(x1);
x=(x1+x2)/2;
y=p(x);
if(y*y1>0)
x1=x;
else x2=x;
}while(fabs(x1-x2)>=1e-6);
return x;
}
请问什么是二分法?我看不懂这个程序...
设有形如double f(double x);的函数,且已知此函数在区间[a,b]内有一个根,编写一个函数root,用二分法求出方程f(x)=0的在此区间内的根,要求使用函数指针且终止精度为le-6.
double root(doublex1,double x2)
{
double f(double x);
double (*p)(double);
p=f;
double x,y,y1;
do
{
y1=p(x1);
x=(x1+x2)/2;
y=p(x);
if(y*y1>0)
x1=x;
else x2=x;
}while(fabs(x1-x2)>=1e-6);
return x;
}
请问什么是二分法?我看不懂这个程序...
#include<math.h>
double root(double x1,double x2)
{
double f(double x);
double (*p)(double);
p=f;
double x,y,y1;
do
{
y1=p(x1);/**/
x=(x1+x2)/2;
y=p(x);
if(y*y1>0)
x1=x;
else x2=x;
}while(fabs(x1-x2)>=1e-6);
return x;
}
double f(double x)
{
/*这里是一些处理,我假设如下:*/
return x -3;
/*这是个正比例函数(y=x-3),对吧?你可以
在草稿纸上画出它的坐标轴的图像.
*/
}
/*区间:
*--------------*----------------*
| | |
x1 x x2
刚开始,可以看成这样,x1在左,x2在右.语句:
x=(x1+x2)/2;说明x在二者之间,先判断一半.
将x1的值带入计算,得到y1的值,再将x的
值带入计算,得到y,
然后比较y和y1是否同符号(都为正或都为负数).其中
那个:if(y*y1>0) 的判断就是在判断是否同符号.
试想:如果y和y1异号,说明一个值在x轴上方,一个在下方,区间内肯定就
有y=f(x)=0的解了,是吧?所以就将区间[x1,x2]减半为[x,x2].
否则解就在另一半[x1,x].所以那个if-else语句就是来做这段工作的.
如此循环,直到区间精确到 10^-6为之.
明白了吧?
*/
再问: double(*p)(double); p=f; 这两句是什么意思呢?假如这道题不要求用指针,是不是就不需要这两句话,然后把后面的p都换成f就好了??
再答: double(*p)(double);这句话是声明一个函数指针p,指定它有一个double类型的形参。返回值为double。p=f;给p赋值,将函数f的地址赋值给p。
double root(double x1,double x2)
{
double f(double x);
double (*p)(double);
p=f;
double x,y,y1;
do
{
y1=p(x1);/**/
x=(x1+x2)/2;
y=p(x);
if(y*y1>0)
x1=x;
else x2=x;
}while(fabs(x1-x2)>=1e-6);
return x;
}
double f(double x)
{
/*这里是一些处理,我假设如下:*/
return x -3;
/*这是个正比例函数(y=x-3),对吧?你可以
在草稿纸上画出它的坐标轴的图像.
*/
}
/*区间:
*--------------*----------------*
| | |
x1 x x2
刚开始,可以看成这样,x1在左,x2在右.语句:
x=(x1+x2)/2;说明x在二者之间,先判断一半.
将x1的值带入计算,得到y1的值,再将x的
值带入计算,得到y,
然后比较y和y1是否同符号(都为正或都为负数).其中
那个:if(y*y1>0) 的判断就是在判断是否同符号.
试想:如果y和y1异号,说明一个值在x轴上方,一个在下方,区间内肯定就
有y=f(x)=0的解了,是吧?所以就将区间[x1,x2]减半为[x,x2].
否则解就在另一半[x1,x].所以那个if-else语句就是来做这段工作的.
如此循环,直到区间精确到 10^-6为之.
明白了吧?
*/
再问: double(*p)(double); p=f; 这两句是什么意思呢?假如这道题不要求用指针,是不是就不需要这两句话,然后把后面的p都换成f就好了??
再答: double(*p)(double);这句话是声明一个函数指针p,指定它有一个double类型的形参。返回值为double。p=f;给p赋值,将函数f的地址赋值给p。
一个用c++的问题,设有形如double f(double x);的函数,且已知此函数在区间[a,b]内有一个根,编写一
定义一个函数void f(double a,double b,double& s,double& m)该函数实现将s=a
设函数f(x)在闭区间[a,b]上连续,且f(a)b,证明在开区间(a,b)内至少有一个点x,使得f(x)=x
编一个类,有个方法double area (double a double b double c);求面积用海伦公式,再
设函数f(x)=ax^+bx+c(a>0且c≠0),且f(1)=-a\2,求证;函数f(x)在区间(0,2)内至少有一个
用C语言编程,已知f(x)=(1+x^2),编写函数用梯形法计算f(x)在区间[a,b]上的定积分
设函数f(x)在[a,b]上连续,且f(a)=f(b),证明:对于任意的正整数n,存在一个区间[
设数列f(x)=ax^2+bx+c,且f(1)=-a/2.3a>2c>2b,求证 函数f(x)在区间(0,2)内至少有一
已知函数f(x)=ax2+bx-1(a,b∈R且a>0)有两个零点,其中一个零点在区间(1,2)内,则a-b的取值范围是
编写函数 double fun(double x,double y),计算两参数平方差的绝对值,做为函数返回值.
二次函数区间最值题1.若函数f(x)在区间(a ,b)内函数的导数为正,且f(b)≤0,则函数f(x)在(a,b)内有(
设函数为f(X)=ax2+bx+c,且f(1)=-a÷2 若a大于0,求证:函数在区间(0,2)内至少有一个零点