C++第12周项目6——太乐了!

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565【项目6-泰勒展开】  先听故事,再编程序。故事是这样的:话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565


【项目6-泰勒展开】
  先听故事,再编程序。故事是这样的:话说sin和cos是一对夫妇。一天,sin去听相声了,cos在家。过了一会,有人敲门,cos开门一看,是一个不认识的多项式函数。cos问:你是谁啊?他说:我是你的老公sin啊。cos说:你不是去听相声了吗?怎么成这幅摸样了?他说:是啊,太乐了!故事讲完了。不懂吗?好好学高数。否则,挂了不冤。

  编程序求出sin(π/2)、sin(56°)、cos(87°)、cos(π/3)
  一点说明:数学库(#include<Cmath>)中已经提供了sin和cos函数,一般解题中我们直接调用即可,而本题要求自定义函数实现,为区别起见,分别起名为mysin和mycos。
  提示和要求:(1)要求自定义函数要写在main函数之后;(2)自定义函数中求解的效率问题必须考虑(用好迭代方法);(3)关于精度:当最后一项的绝对值小于0.00001时,累加结束(求绝对值的函数也可以自定义实现);(4)为验证求解是否正确,可以调用数学库中相应的函数,输出结果以对比。

参考解答:
#include <iostream> 
#include<Cmath>  //为便于对比结果,main函数中调用了Cmath中的库函数sin和cos
using namespace std;
const double pi=3.1415926;
double mysin(double);
double mycos(double);
double myabs(double);   //程序中需要求精度的绝对值,也用自定义函数完成吧
int main( )
{
	cout<<"sin(π/2)的值为"<<mysin(pi/2);
	cout<<",利用库函数求得sin(π/2)的值为"<<sin(pi/2)<<endl<<endl;
	
	cout<<"sin(56°)的值为"<<mysin((56.0/180)*pi);
	cout<<",利用库函数求得sin(56°)的值为"<<sin((56.0/180)*pi)<<endl<<endl;
	
	cout<<"cos(87°)的值为"<<mycos((87.0/180)*pi);
	cout<<",利用库函数求得cos(87°)的值为"<<cos((87.0/180)*pi)<<endl<<endl;
	   
	cout<<"cos(π/3)的值为"<<mycos(pi/3);
	cout<<",利用库函数求得cos(π/3)的值为"<<cos(pi/3)<<endl<<endl;
	
	return 0;
}
//下面定义mysin函数
double mysin(double x)
{
	double sum=x,x_pow=x,item;
	int n=1,fact=1,sign=1;     //定义变量时赋初值,已经将第一项考虑到累加和sum中
	do
	{
		fact=fact*(n+1)*(n+2);  //fact用于表示阶乘,在公式中作分母
		x_pow*=x*x;             //x_pow是分子中用于表示阶乘,在公式中作分母
		sign=-sign;             //确定即将要累加的这一项的符号
		item =x_pow/fact*sign; //计算出要累加的项
		sum+=item;              //将该项累加上去
		n+=2;
	}while(myabs(item)>1e-5);
	return sum;
}

//下面定义mycos函数
double mycos(double x)
{
	double sum=1,x_pow=1,item;
	int n=0,fact=1,sign=-1;
	do
	{
		fact=fact*(n+1)*(n+2);
		x_pow*=x*x;
		item =x_pow/fact*sign;
		sum+=item;
		sign=-sign;
		n+=2;
	}while(myabs(item)>0.00001);
	return sum;
}

//下面定义myabs函数
double myabs(double x)
{
	return ((x>=0)?x:-x);
}

  迷底揭晓:将任意函数展开为多项式,是计算机求解数值问题的一个重要手段。高等数学中的“泰勒定理”为我们解决这一大类问题提供了理论依据与方法指导。Sin听相声“太乐”了,变成了多项式,太太cos都不认识了。高等数学、线性代数等课程为我们提供解决各种问题的基础知识,是大学中最为实用的学科,学好,必须的。

和2011年同学玩时,有过故事,见: http://blog.csdn.net/sxhelijian/article/details/7058382





目录
相关文章
|
29天前
|
开发工具 C语言 C++
CMake构建大型C/C++项目:跨平台设计与高级应用(二)
CMake构建大型C/C++项目:跨平台设计与高级应用
41 0
|
30天前
|
设计模式 测试技术 编译器
C++项目中打破循环依赖的锁链:实用方法大全(一)
C++项目中打破循环依赖的锁链:实用方法大全
78 0
|
3月前
|
存储 机器学习/深度学习 算法
使用 OpenCV4 和 C++ 构建计算机视觉项目:1~5
使用 OpenCV4 和 C++ 构建计算机视觉项目:1~5
|
8天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
24 6
|
17天前
C/C++test两步完成CMake项目静态分析
通过将C/C++test集成到CMake项目中,并根据项目的需要进行配置,可以在两步内完成CMake项目的静态分析。这样可以帮助开发人员及时发现并修复潜在的代码问题,提高代码质量和可靠性。
8 0
|
24天前
|
IDE 算法 编译器
快速掌握陌生C++项目的科学与心理学策略
快速掌握陌生C++项目的科学与心理学策略
56 0
|
24天前
|
敏捷开发 安全 API
C/C++ 工程师面试:如何精彩展示你的项目经验并获得高分
C/C++ 工程师面试:如何精彩展示你的项目经验并获得高分
71 0
|
29天前
|
消息中间件 存储 算法
【C/C++ 泡沫精选面试题04】在实际项目中,多进程和多线程如何选择?
【C/C++ 泡沫精选面试题04】在实际项目中,多进程和多线程如何选择?
43 1
|
29天前
|
编译器 持续交付 项目管理
CMake构建大型C/C++项目:跨平台设计与高级应用(三)
CMake构建大型C/C++项目:跨平台设计与高级应用
37 0
|
29天前
|
编译器 Linux C语言
CMake构建大型C/C++项目:跨平台设计与高级应用(一)
CMake构建大型C/C++项目:跨平台设计与高级应用
66 0