C++第12周项目6——太乐了!
来源:互联网 发布:h1z1辅助源码 编辑:程序博客网 时间:2024/05/11 02:07
课程首页地址: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)为验证求解是否正确,可以调用数学库中相应的函数,输出结果以对比。
先听故事,再编程序。故事是这样的:话说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和cosusing 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
- C++第12周项目6——太乐了!
- 第4周项目2—太乐了
- C++第12周项目2——太乐了
- C++第12周项目3——太乐了多文件版
- 第12周项目2--太乐了
- 第12周项目5-太乐了
- 第四周项目2——太乐了
- 第四周项目二—太乐了
- 第12周项目6-太乐了多文件版
- 第12周项目6-太乐了多文件版(修正)
- 第11周上机实践项目7——太乐了
- 第11周项目7-太乐了
- 第11周项目7-太乐了
- 第11周项目七 太乐(泰勒)了
- 第11 周 项目7-太乐了(1)
- 第11周 项目7-太乐了(2)
- 第4周项目2-太乐了
- 第4周-项目2-太乐了
- STL 排序算法
- 【Boost】boost::timer库用法与实例
- Android Intent调用大全,Android自带Intent
- Web.config中配置上传文件大小与判断上传文件的类型等一系列规则的方法
- 11 栈与编译器(一):后缀表达式
- C++第12周项目6——太乐了!
- 【集合】收集一些文章,以后慢慢看
- Mysql 5.5.28修改系统默认字符集 Linux环境中
- java.net.SocketException:Permission denied
- 关于ListActivity
- HTML 的空格写法
- R文件中没有出现相应的变量
- Transformation XML(TCODE-STRANS)
- Linux Shell 通配符、元字符、转义符使用实例介绍