数值方法求π和π的x次方

  • 求π
  • 求lnπ
  • 求π的x次方
  • 重中之重:误差分析

学习了数值分析这门课,老师留了一个作业是设计数值方法求π的x次方(x范围为1到10)
具体步骤如下(老师要求的,就是想让你多用用几种数值方法,让你多解几步)

  1. 求π
  2. 利用上一步的π求lnπ
  3. 利用上一步的lnπ求π的x次方
  4. 误差分析
    不难
    但是误差分析很麻烦,因为要考虑每一步的误差对下一步的影响,还需要考虑舍入误差和方法误差,误差分析在文章的末尾

求π

求解π的方法有很多,现在只讨论用计算机怎么求π。一般有下面这三种求法
1.泰勒展开
2.BBP公式
3.高斯勒让德算法(最好的一种)
这三种方法具体可以参考https://blog.csdn.net/xfxyy_sxfancy/article/details/48378121
这个博文很详细我就不再废话了,下面给出泰勒展开求π的C++代码,展开40项即可得到很精确的结果

    int h1,i,t;double dsqrt3=2*sqrt(3);//dsqrt为2倍的根号3,是一个常量pi=dsqrt3;h1=1; //h1为正1或负1for(i=1;i<40;i++)//采用泰勒展开方法求π{t=2*i+1;h1=-h1;pi=pi+h1*dsqrt3/t/pow(3,i);}cout << "π的值:";cout << fixed << setprecision(15)<< pi << endl;

求lnπ

可以用数值积分的方式求

注意:上式中的π用的是第一步求出的π
数值积分有很多方法,比如梯形公式,辛普森公式等等
我采用的是复合辛普森公式(可能不是最好的),原理如下

C++代码如下

    double h=(pi-1)/500;//pi即为上一步求的πlnpi=1+1/pi;//设定初值for(i=1;i<500;i++)//采用复合辛普森公式求数值积分{x2=1+i*h;x1=1+i*h-h/2;lnpi=lnpi+4/x1+2/x2;}lnpi=lnpi+4/(pi-h/2);lnpi=lnpi/6*h;cout << "lnπ的值:";cout << fixed << setprecision(15)<< lnpi << endl;

求π的x次方

要求用到前两步的结果,我采用求解常微分方程的方法

求解常微分方程也有很多方法,如各种欧拉法,龙格库塔,等等
我采用的是四阶龙格库塔公式,如下

C++代码如下,给了个龙格库塔的函数,该函数输入
x:几次方
n:区间分为几份,份数越多越精确
输出:pix,即结果,表示π的x次方

double RungKutta(double x,double n)//四阶龙格-库塔公式
{double pix,K1,K2,K3,K4,h;pix = 1.0;h=x/n;for(int i=0;i<n;i++){K1 = derivative(pix);K2 = derivative(pix+0.5*h*K1);K3 = derivative(pix+0.5*h*K2);K4 = derivative(pix+h*K3);pix = pix+h*(K1+2*K2+2*K3+K4)/6;}return pix;
}
double derivative(double y)//y(x)的导数,用于微分方程求解
{return (lnpi*y);//lnpi即自己求出的lnπ
}

重中之重:误差分析

这一部分的分析很多,足足有四页,因此在这里就不放了,详情请见评论区我给的链接,点开就是

数值方法求π和π的x次方相关推荐

  1. 我想知道怎么求N的N次方

    我想知道怎么求N的N次方,这个数据是很大的,但是我要的是这个数据的最高位的数,应该有什么好的方法吧! 请大侠们帮帮忙吧!!(N <1000000000) 这个问题提出后,fallening同学便 ...

  2. a的n次方的最后三位数c语言,求13的n次方(12n≤130000000000)的最后三位数,用c++编程...

    #include intmain() { longlonginti,x,y,last;/*变量last保存求X的Y次方过程中的部分乘积的后三位*/ //输入 while(scanf("%ll ...

  3. c语言学习-编写函数求x的n次方的值

    编写函数求x的n次方的值 程序流程图: 代码: #include<stdio.h> long mul(int j ,int k) {int i; long mu=1; for(i=0;i& ...

  4. (c语言)求x的y次方

    (c语言)求x的y次方,输入x和y的值,y为整数 #include<stdio.h> #include<stdlib.h> #include<math.h>//注意 ...

  5. 求次方的c语言程序,C语言编程求13的13次方的最后三位数

    求13的13次方的最后三位数 *问题分析与算法设计 解本题最直接的方法是:将13累乘13次方截取最后三位即可. 但是由于计算机所能表示的整数范围有限,用这种"正确"的算法不可能得到 ...

  6. 【算法】求n的m次方(快速幂取模)

    题目 求n的m次方,n,m均为自然数. 解析 看似简单的题目,但是要想写的高效还不是那么容易想出来. 实现 unsigned int power(unsigned int a, unsigned in ...

  7. java语言不用pow函数求x的n次方_X的N次方求解——pow(x,n)实现

    最近看到这样的一个题目求X的N次方,自己想了一些解决办法,记录一下留作日后参考. 求X的N次方,首先暴力求解: int exp(int x, int n) { int ret = 1; for(int ...

  8. 递归算法之求x的n次方

    求x的n次方–递归算法 #include<stdio.h> int power(int x,int n) {int y;if(n==0) y=1;else {y=power(x,n/2); ...

  9. python 求x的 n次方

    1.求x的 n次方 def power(x, n): #如def power (x,n=2) 设置了n的默认值为2 s = 1 while n > 0: n = n - 1 s = s * x ...

最新文章

  1. python pycharm 包 安装问题
  2. 通过组策略禁用U盘执行病毒文件
  3. 互联网时代大数据的核心价值
  4. [JZOJ6075]【GDOI2019模拟2019.3.20】桥【DP】【线段树】
  5. 优化缩短关中断的时间
  6. 51nod 1525 重组公司
  7. SVM原理以及Tensorflow 实现SVM分类(附代码讲了一下原理)
  8. PTA学生成绩排序-C语言详解
  9. 基于python技术的自动化运维是干嘛的_《Python自动化运维 技术与最佳实践》.pdf...
  10. 分布式资本沈波:未来区块链杀手级应用将出现在“+区块链”
  11. uva-465(overflow)
  12. 解决PyInstaller打包程序exe在win7运行异常问题(OSError: [WinError 87] 参数错误、Error loading Python DLL python39.dll等)
  13. 戴毅茹同济matlab,Stateflow系统建模(全)解读.pptx
  14. 充一次电使用一年的手机_超级手机电池:充一次电用一年多?
  15. surface simplification using quadratic error metrics
  16. NOIP2018普及T2暨洛谷P5016 龙虎斗
  17. python 拓扑排序_python拓扑排序算法实现
  18. 新员工入职表_舞钢农商银行:组织新招录员工开展反假币培训
  19. win10系统中如何查看wifi密码
  20. 长沙银行“三重奏”:“生态银行”的新玩法

热门文章

  1. 工作室课题—质数的后代
  2. 一文了解Cortex-M中断向量表对齐原则
  3. 春节期间共同饮酒,导致死亡的注意事项
  4. ACM准备之路(蓝桥杯5)杨辉三角公式解法
  5. 分布式资本宣布孵化成立Hashgard项目
  6. python实现美空图片抓取机器人
  7. html视频播放 禁止播放进度条
  8. OpenI启智社区开源算法框架推荐——新一代工业视觉无监督异常检测框架“READ”
  9. 洛谷P1197 星球大战
  10. G711编解码(G711与PCM类型互转)