20、泰勒展开式

泰勒展开式

1、求出e^x某一项小于0.001

  源程序代码如下:

/*
    2017年6月9日11:07:45
    功能:求出e^x某一项小于0.001
*/
#include "stdio.h"

#define M 0.001

double e_Toly(int i, int Num);                     //声明与定义函数的格式一致,两则仅有一个分号的区别                            

int main()
{
    int count = 1, num;
    double sum = 0, temp;
    printf("please input a number : ");
    scanf("%d",&num);

    while(1)
    {
        temp = e_Toly(count, num );

        if(temp > M)
        {
            sum += temp;
            count++;                        
        }
        else
        {
            sum += temp;
            break;
        }
    }
    printf("请输出求和的最后结果:%f\n",sum);
    printf("请输出最后一项的值:%lf\n",temp);    
    printf("请输出总共计算了%d 项",count);
    printf("\n");

    return 0;
}
double e_Toly(int i, int Num )                  //输入的值,就是表达式中X元素
{                            
    double result = 1 , power = 1;              //power是进行幂运算的起始值,如果在一次中调用函数被多次调用,此时double result = 1 , power = 1;这样的定义需注意
    if(i == 1)
    return result;
    else if (i > 1)
    {
        for(int j = 1; j < i; j++)
        {
            result *= j; 
            power *= Num ;
        }
        result =power /result;
        return result;
    }
}
/*
    总结:
    在VC++6.0中显示的结果:
    ————————————————————————
    please input a number : 3
    请输出求和的最后结果:20.085469
    请输出最后一项的值:0.000256
    请输出总共计算了14 项

    ————————————————————————

*/

 

2、求出cosx某一项小于0.001 

   源程序代码如下:  

/*
    2017年6月10日06:52:21
    cosx的泰勒展开式某一项小于0.001
*/

#include "stdio.h"

#define M 0.001

double cosx_Toly(int i, double Num);
int main()
{
	int count = 1;
	double input_num;
	double sum = 0, temp;
	printf("please input a number: ");
	scanf("%lf",&input_num);

	while(true)
	{
		temp = cosx_Toly(count, input_num);

		if(temp > M)
		{
			if(count % 2 != 0)
			{
				sum += temp;
			}
			else
			{
				sum -= temp;
			}

			count++;
		}
		else
		{
			if(count % 2 != 0)
			{
				sum += temp;			//根据泰勒公式展开奇数项为正,偶数项为负
			}
			else
			{
				sum -= temp;
			}

			break;
		}
		
	}
	printf("please output the number of temp: %lf\n",temp);
	printf("please output the number of sum: %lf\n",sum);
	printf("please output the number of count: %d\n",count);

	return 0;
}

double cosx_Toly(int i, double Num)
{
	int j;
	double result = 1, power = 1;
	for(j = 1; j <= (2*i-2); j++)								//注意此处的是<=,不是<
	{
		result *= j;
		power *= Num;
	}
	result = power / result ;
	return result;
}

/*
	总结:
	在vc++6.0中的结果显示:
	——————————————————————————————
	please input a number: 3.14
	please output the number of temp: 0.000104
	please output the number of sum: -1.000003
	please output the number of count: 8

	——————————————————————————————
*/

 

3、求出sinx某一项小于0.001

 1、源程序代码如下:

/*
	2017年6月10日06:24:46
	功能:求sinx的某一项小于0.001
*/
#include "stdio.h"

#define M 0.001

double sinx_Toly(int i, double Num);

int main()
{
	int count = 1;
	double input_num;
	double sum = 0, temp;
	printf("please input a number:");
	scanf("%lf",&input_num);

	while(true)
	{
		temp = sinx_Toly(count, input_num);

		if(temp > M)
		{
			if(count % 2 != 0)
			{
				sum += temp;
			}
			else
			{
				sum -= temp;
			}

			count++;
		}
		else
		{
			if(count % 2 != 0)
			{
				sum += temp;
			}
			else
			{
				sum -= temp;
			}

			break;
		}

	}
	printf("please output the number of temp: %lf\n",temp);
	printf("please output the number of sum: %lf\n",sum);
	printf("please output the number of count: %d\n",count);
	return 0;
}

double sinx_Toly(int i, double Num)
{
	double power = 1;
	int j;
	double result = 1;  
	for(j = 1; j <= (2*i-1); j++)
	{
		power *= Num;
		result *= j; 
	}
	result = power / result;
	return result;
}
/*
	总结:
	在vc++6.0中显示的结果为:
	——————————————————————————————————
	please input a number:3
	please output the number of temp: 0.000256
	please output the number of sum: 0.141131
	please output the number of count: 7
	——————————————————————————————————
*/

 2、源程序代码如下:

/*
	2017年3月16日09:08:58
	功能:求sin(x)的最后一项的绝对值小于10^(-5),并统计项数。
*/

#include<stdio.h>
#include<math.h>
#define M 0.000001

void main()
{
	int x, i, k, m = -1, count = -1;
	double j, result = 0;

	printf("please input the number x = ");
	scanf("%d",&x);

	for(i = 1;fabs(j) >= M;i += 2)
	{	
		j = 1;
		m=-m;											  //控制多项式符号的
		for(k = 1; k <= i; k++)                           //这是算阶乘的
			j *= k;	
		j = m*pow(x,i)/j;                                 //这是计算单个多项式的结果的
		count++;
		result += j;									  //累加多个多项式
	}

	printf("count= %d\n",count);						  //累计项数的次数
	printf("sin(x)= %lf\n",result);						  //测试结果的,调用的 sin(x)函数

	
}
/*
	总结:
	在VC++6.0中显示的结果:
	—————————————————————————
	please input the number x = 3
	count= 8
	sin(x)= 0.141120
	—————————————————————————
*/

  

4、求出(1+x)^m某一项小于0.001

 源程序代码如下:

/*
	2017年6月10日08:01:06
	功能:求(1+x)^m的某一项小于0.001
*/
#include "stdio.h"

#define M 0.001

double M_Toly(int i, double Num, int m);

int main()
{
	int count = 1, n;
	double input_num;
	double sum = 0, temp;
	printf("please input a number:");
	scanf("%lf",&input_num);
	printf("please input a power_number:");
	scanf("%d",&n);

	while(true)
	{
		temp = M_Toly(count, input_num, n);

		if(temp > M)
		{
			
			sum += temp;
			count++;
		}
		else
		{
			sum += temp;
			break;
		}

	}
	printf("please output the number of temp: %lf\n",temp);
	printf("please output the number of sum: %lf\n",sum);
	printf("please output the number of count: %d\n",count);
	return 0;
}

double M_Toly(int i, double Num, int m)
{
	double power = 1;
	int j, m_num = 1;
	double result = 1;  
	if(i == 1)
		return result;
	else if(i >1)
	{
		for(j = 1; j < i; j++)
		{
			result *= j;
			m_num *= (m-j+1);
			power *= Num;
		}
	}
	result =(power * m_num)/ result;
	return result;
}
/*
	总结:
	在vc++6.0中显示的结果为:
	——————————————————————————————————
	please input a number:2
	please input a power_number:3
	please output the number of temp: 0.000000
	please output the number of sum: 27.000000
	please output the number of count: 5

	——————————————————————————————————
*/

 

5、求出ln(1+x)某一项小于0.001

 源程序代码如下:

/*
	2017年6月10日09:11:06
	功能:求ln(1+x)的某一项小于0.001
*/
#include "stdio.h"

#define M 0.001

double ln_Toly(int i, double Num);

int main()
{
	int count = 1;
	double input_num;
	double sum = 0, temp;
	printf("please input a number:");
	scanf("%lf",&input_num);

	while(true)
	{
		temp = ln_Toly(count, input_num);

		if(temp > M)
		{
			
			if(count % 2 != 0)
			{
				sum += temp;
			}
			else
			{
				sum -= temp;
			}

			count++;
		}
		else
		{
			if(count % 2 != 0)
			{
				sum += temp;		//根据泰勒公式展开奇数项为正,偶数项为负
			}
			else
			{
				sum -= temp;
			}

			break;
		}

	}
	printf("please output the number of temp: %lf\n",temp);
	printf("please output the number of sum: %lf\n",sum);
	printf("please output the number of count: %d\n",count);
	return 0;
}

double ln_Toly(int i, double Num)
{
	double power = 1;
	int j;
	double result = 1;  
	for(j = 1; j <= i; j++)
	{
		power *= Num;
	}
	result =power / j;
	return result;
}
/*
	总结:
	在vc++6.0中显示的结果为:
	——————————————————————————————————
	please input a number:0.5
	please output the number of temp: 0.000977
	please output the number of sum: 0.189369
	please output the number of count: 7
	——————————————————————————————————
*/

  

  

posted @ 2017-06-09 11:16  樱桃挚爱丸子  阅读(934)  评论(0编辑  收藏  举报