| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 801 人关注过本帖
标题:一个数学函数题,想不明白?
只看楼主 加入收藏
席卷天下
Rank: 1
等 级:新手上路
帖 子:29
专家分:6
注 册:2010-10-24
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:12 
一个数学函数题,想不明白?
已知y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)),其中f(x,n)=1-x*x/2!+x*x*x*x/4!...+(-1)的n次方*x的2n次方/(2n)!   (n>=0)
当x=5.6,n=7时,求y的值。 题目给出y=-0.074521, 但是运行结果却是y=-0.182564
#include<stdio.h>
double f(double x,unsigned n)
{ unsigned i,j,k;
  double p,s,sum,flag;
  flag=-1.0;
  if(n>0) {
    sum=p=s=1.0;
    for(k=1;k<=n;k++){
      for(j=1;j<=2*k;j++)
        s*=x;
      for(i=1;i<=2*k;i++)
        p*=i;
      sum+=flag*s/p;
      flag=-flag;
    }
    return sum;
  }
  else return 1;
}
int main()
{ double x,y;
  unsigned n;
  printf("input x=");
  scanf("%f",&x);
  printf("input n=");
  scanf("%u",&n);
  y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3));
  printf("y=%.6f\n",y);
  return 0;
}
哪位大侠知道是为什么么?
搜索更多相关主题的帖子: double include return 数学 
2011-02-28 11:44
席卷天下
Rank: 1
等 级:新手上路
帖 子:29
专家分:6
注 册:2010-10-24
收藏
得分:0 
代码是我写的
2011-02-28 12:07
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:4 
可能与运行的环境有关吧,你的程序应该没有错。因为结果太小了,我的根本就显示不出来结果!如下图:
图片附件: 游客没有浏览图片的权限,请 登录注册

   唯实惟新 至诚致志
2011-02-28 12:13
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:4 
楼主,把s=p=1.0移到for(k=1;...)循环的内部去。
你再试试。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-28 13:10
席卷天下
Rank: 1
等 级:新手上路
帖 子:29
专家分:6
注 册:2010-10-24
收藏
得分:0 
移进去了,还不是y=-0.182564这个结果
2011-02-28 13:20
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:0 
把改过的程序贴上来。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-28 13:39
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:4 
楼主的公式能不再做个可读性高点的?实在读不太明白……
2011-02-28 19:05
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦,看明白了。原来是文字夹杂在一起的。

那个 f(x, n) 不就是 cos(x) 的 2n 阶泰勒展式。
那当 n 比较大的时候(比如取 7 我觉得就应该誤差不是很明显了), y 就约等于 cos(x) / (cos(x+2.3) + cos(x-3.2)) 这个当 x = 5.6 时的值是 -0.990005。
不管是你说的答案还是你的結果,都和这个差距比较大。怎么会这样……


[ 本帖最后由 pangding 于 2011-2-28 19:25 编辑 ]
2011-02-28 19:20
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
我写了一个,和你说的那个答案是一样的。主要是第二项和 cos 的誤差比较大。
程序代码:
#include <stdio.h>
#include <math.h>

double f(double x, double n)
{
    int i; double x2 = x*x;
    double res = 1.0, term = 1.0;
    for (i = 0; i < n; i++) {
        term *= (-1) * x2 / ((2*i+1) * (2*i+2));
        res += term;
    }

    // printf("f(%lf, %lf) = %lf; cos(%lf) = %lf\n", x, n, res, x, cos(x));

    return res;
}

int main(int argc, const char *argv[])
{
    double x = 5.6, n = 7;
    double y = f(x, n) / ( f(x+2.3, n) + f(x-3.2, n+3) );

    printf("y = %lf\n", y);

    return 0;
}

代码里的 n 用 int 更好一点,大家自行改一下吧。


[ 本帖最后由 pangding 于 2011-2-28 19:52 编辑 ]
2011-02-28 19:45
席卷天下
Rank: 1
等 级:新手上路
帖 子:29
专家分:6
注 册:2010-10-24
收藏
得分:0 
楼主你说的泰勒我不懂,记得好像是高等数学的内容吧,不过高等数学几年没有用过,不记得了。
先前贴出的代码有点误,函数double f(double x,unsigned n)稍做修改。
#include<stdio.h>
double f(double x,unsigned n)   /*此为f(x,n)前n项之和*/
{ unsigned i,j,k;
  double p,s,sum,flag;
  flag=-1.0;
  if(n>0) {
    sum=1.0;                  
    for(k=1;k<=n;k++){
      p=s=1.0;
      for(j=1;j<=2*k;j++)
        s*=x;
      for(i=1;i<=2*k;i++)
        p*=i;
      sum+=flag*s/p;
      flag=-flag;
    }
    return sum;
  }
  else return 1;
}
int main()
{ double x,y;
  unsigned n;
  printf("input x=");
  scanf("%f",&x);
  printf("input n=");
  scanf("%u",&n);
  y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3));
  printf("y=%.6f\n",y);
  return 0;
}
不过运行后结果为y=-0.600755   与题目给出的y值不一样
2011-03-01 00:34
快速回复:一个数学函数题,想不明白?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027805 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved