| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1596 人关注过本帖
标题:f=x/1!+x^3/3!+x^5/5!+x^7/7!+...+x^(2n+1)/(2n+1)!
只看楼主 加入收藏
小桥滴水
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2011-10-19
结帖率:90.91%
收藏
已结贴  问题点数:4 回复次数:6 
f=x/1!+x^3/3!+x^5/5!+x^7/7!+...+x^(2n+1)/(2n+1)!
buhuixie  bangmang xia!

[ 本帖最后由 小桥滴水 于 2011-11-24 11:02 编辑 ]
2011-11-24 10:43
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 
如果n大于7我也不会写....

                                         
===========深入<----------------->浅出============
2011-11-24 10:51
zy_space
Rank: 5Rank: 5
等 级:职业侠客
帖 子:163
专家分:364
注 册:2011-11-14
收藏
得分:0 
这是。。。。泰勒公式?

何必等待?梦在今朝
2011-11-24 11:55
comuslxl
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-11-25
收藏
得分:0 
C code:
#include <stdio.h>
#include <math.h>
float taylor(float,int);//最终结果
int factorial(int);//分母,阶乘
float singlecal(float,int);//通项
int main()
{
    float x;
    int n;
    printf("输入参数x=");
    scanf("%f",&x);
    printf("输入参数n=");
    scanf("%d",&n);
    printf("f(x,n)=%f\n",taylor(x,n));
    system("pause");
    return 0;
}
float taylor(float x,int n)
{
    float result=0;
    int i;
    for(i=0;i<=n;++i)
        result+=singlecal(x,i);
    return result;
}
float singlecal(float x,int n)
{
    return pow(x,2*n+1)/factorial(2*n+1);
}
int factorial(int n)
{
    int result;
    if(n==0||n==1)
        result=1;
    else
        result=factorial(n-1)*n;
    return result;
}
2011-11-25 22:46
compiler
Rank: 2
等 级:论坛游民
帖 子:25
专家分:46
注 册:2011-7-27
收藏
得分:0 
问LS
假如n=50呢?
辞职(2n+1)!=101!这个值longlong都装不下了,肯定溢出额
怎么解决?
2011-11-25 23:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
10月21号贴过的,现在找不到了,再贴一次。

程序代码:
/*
    SinX=X/1!-X^3/3!+X^5/5!-X^7/7!+……+(-1)n+1*X^(2n-1)/(2n-1)!
*/

#include <stdio.h>

double pow(const double x, const int n);
double factorial(const int n);

int main(int argc, char* argv[])
{
    double x;                    // 弧度
    int n;                       // 求值项数
    int sign = 0;                // 正负号标志
    double sin = 0.0;            // 计算结果
    double temp;
    int i;

    if (argc < 3)
    {
        printf_s("格式: %s x n\n", argv[0]);
        printf_s("其中,x是弧度制角度,n是多项式项数,n=0不计算,结果为零。\n");
        printf_s("举例 Sin 1.5 20\n");
        return -1;
    }

    sscanf_s(argv[1], "%lf", &x);
    sscanf_s(argv[2], "%d", &n);

    if (n < 0)
    {
        printf_s("错误:n = %d\n", n);
        return -2;
     }

    for (i = 1; i <= n; ++i)
    {
        sign = !sign;
        temp = pow(x, 2 * i - 1) / factorial(2 * i - 1);
        if (sign)
        {
            sin += temp;
        }
        else
        {
            sin -= temp;
        }
    }

    printf_s("Sin(%.2f) = %.16f\n", x, sin);

    return 0;
}

// 计算x^n
double pow(const double x, const int n)
{
    int i;
    double ret_value = 1.0;

    for (i = 0; i < n; ++i)
    {
        ret_value *= x;
    }

    return ret_value;
}

// 计算n!
double factorial(const int n)
{
    int i;
    double ret_value = 1.0;

    for (i = 1; i <= n; ++i)
    {
        ret_value *= (double)i;
    }

    return ret_value;
}

授人以渔,不授人以鱼。
2011-11-26 00:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
对double型,n>800都没问题,但不能超过900。到底是八百几不行,没测试过。不过这个泰勒级数逼近非常快,其实n=12就已经很精确了(16位有效值上从n=12开始就都是一样的),再求下去也没什么意义。

[ 本帖最后由 TonyDeng 于 2011-11-26 00:22 编辑 ]

授人以渔,不授人以鱼。
2011-11-26 00:20
快速回复:f=x/1!+x^3/3!+x^5/5!+x^7/7!+...+x^(2n+1)/(2n+1)!
数据加载中...
 
   



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

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