跪求C++大神帮忙编个程序!急需!!!感激不尽!!!
答案:3 悬赏:70 手机版
解决时间 2021-03-09 22:45
- 提问者网友:你给我的爱
- 2021-03-09 04:42
跪求C++大神帮忙编个程序!急需!!!感激不尽!!!
最佳答案
- 五星知识达人网友:行雁书
- 2021-03-09 05:46
说实话,比较简单。 我这会想休息一下,就简单给你写个框子吧。
typedef double (*Func) (double x); //定义一个函数指针,注意我只简单写一个参数的函数指针。double e_pow_x(double x) //e^x
{
return ......;// 自己找数学库中的函数
}
double sin_2_x(double x) //sin2x
{
return ...;//自己找数学库中的函数
}
//积分框架
double integral(Func f, double precision, double low, double high)
{
double step = 0.0000000001, result = 0;
for(double x = low; x < high; x += step){
result += f(x)
}
return result;
}//注意上面的积分框架并没有考虑传入的精度precision问题,这是因为精度本身是由step的大小来确定的。 积分从本质上来说是极限的求和。上面的求面积本质上可以转换为一个个的小的四边形的面积和。 step越小,越接近积分值。 至于这个接近到10^-7,就比较尴尬了。因为你并不知道step达到多小的时候,能达到这样的精度。 一个简单的方法是在外部包装一个函数。它给出一个积分的精确值,并比较这个精确值与我们积分框架得到的估计值做差。 如果精度达不到要求的精度,就继续减小step,直到达到精度为止。
double integral_real(Func f, double low, double high)
{
//根据函数的的不同,返回积分的真实值。
//这个需要调用积分公式,然后带入low和high得到积分的结果
return ....;
}
//积分框架,需要外部传入step
double integral(Func f, double step, double low, double high)
{
double result = 0;
for(double x = low; x < high; x += step){
result += f(x)
}
return result;
}
//此函数用循环减小step的方式不断的逼近真实值,直到达到要求的精度
double approachReal(Func f, double precision, double low, double high)
{
double step = 0.0001, real = 0.0, estimate = 0.0;
do
{
step /= 2; //每次step缩小一杯
real = integral_real(f, low, high); //真实值
estimate = integral(f, step, low, high); //估计值
}
while(fabs(real, estimate) > pow(10, -7)) ; //如果真实值与估计的差距比较大的时候,进一步缩小step。
return estimate;
}最后的最后,作为一个程序员,一定要重申, 纸上得来终觉浅,绝知此事要躬行!!!
祝所有的程序员们happy。
追问很感谢你的回答!真大神啊!话说可以写出完整可以运行出来的程序么?真的是急需,只要能解决就会采纳你的回答的,谢谢你!麻烦了!
typedef double (*Func) (double x); //定义一个函数指针,注意我只简单写一个参数的函数指针。double e_pow_x(double x) //e^x
{
return ......;// 自己找数学库中的函数
}
double sin_2_x(double x) //sin2x
{
return ...;//自己找数学库中的函数
}
//积分框架
double integral(Func f, double precision, double low, double high)
{
double step = 0.0000000001, result = 0;
for(double x = low; x < high; x += step){
result += f(x)
}
return result;
}//注意上面的积分框架并没有考虑传入的精度precision问题,这是因为精度本身是由step的大小来确定的。 积分从本质上来说是极限的求和。上面的求面积本质上可以转换为一个个的小的四边形的面积和。 step越小,越接近积分值。 至于这个接近到10^-7,就比较尴尬了。因为你并不知道step达到多小的时候,能达到这样的精度。 一个简单的方法是在外部包装一个函数。它给出一个积分的精确值,并比较这个精确值与我们积分框架得到的估计值做差。 如果精度达不到要求的精度,就继续减小step,直到达到精度为止。
double integral_real(Func f, double low, double high)
{
//根据函数的的不同,返回积分的真实值。
//这个需要调用积分公式,然后带入low和high得到积分的结果
return ....;
}
//积分框架,需要外部传入step
double integral(Func f, double step, double low, double high)
{
double result = 0;
for(double x = low; x < high; x += step){
result += f(x)
}
return result;
}
//此函数用循环减小step的方式不断的逼近真实值,直到达到要求的精度
double approachReal(Func f, double precision, double low, double high)
{
double step = 0.0001, real = 0.0, estimate = 0.0;
do
{
step /= 2; //每次step缩小一杯
real = integral_real(f, low, high); //真实值
estimate = integral(f, step, low, high); //估计值
}
while(fabs(real, estimate) > pow(10, -7)) ; //如果真实值与估计的差距比较大的时候,进一步缩小step。
return estimate;
}最后的最后,作为一个程序员,一定要重申, 纸上得来终觉浅,绝知此事要躬行!!!
祝所有的程序员们happy。
追问很感谢你的回答!真大神啊!话说可以写出完整可以运行出来的程序么?真的是急需,只要能解决就会采纳你的回答的,谢谢你!麻烦了!
全部回答
- 1楼网友:鱼忧
- 2021-03-09 06:20
这也太复杂了吧
- 2楼网友:山河有幸埋战骨
- 2021-03-09 06:15
简单是简单,但是大神肯定不愿意做如此无聊的事啊。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯