泰勒展开式
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
——————————————————————————————————
*/