西安交大 数学实验五 matlab计算圆周率pi-课件·PPT
- 格式:ppt
- 大小:1.48 MB
- 文档页数:25
这里是一个示例课件的简要概述,用于介绍如何使用计算机来计算圆周率:
1. 引言:介绍圆周率的概念和重要性,以及计算圆周率的方法。
2. 数学公式:讲解数学公式中圆周率的含义和计算方法,如利用圆的周长和直径的比值。
3. 近似方法:介绍一些近似计算圆周率的方法,如阿基米德法、蒙特卡洛方法和无穷级数法。
4. 计算机的角色:讨论计算机在计算圆周率中的作用,包括高精度计算、并行计算和分布式计算。
5. 编程语言和软件工具:介绍一些常用的编程语言和软件工具,如Python、MATLAB和Mathematica,用于编写计算圆周率的程序。
6. 编程实例:提供一个简单的编程实例,演示如何使用编程语言计算圆周率的近似值。
7. 程序优化:讨论如何优化计算圆周率的程序,提高计算速度和精度,如使用多线程、并行计算和算法优化。
8. 应用领域:讨论计算圆周率在实际应用中的重要性,如在科学计算、密码学和通信领域的应用。
9. 结论和总结:总结课程内容,强调计算圆周率的重要性和应用前景。
这只是一个简要的概述,您可以根据具体需要和时间安排,进一步展开和深入讲解各个部分。
在课件中可以添加图表、示意图和实例代码等辅助材料,以帮助学生更好地理解和应用计算圆周率的方法。
Matlab圆周率1. 引言圆周率(π)是数学中的一个重要常数,表示圆的周长与直径之间的比值。
圆周率的精确值是一个无限不循环的小数,被广泛应用于数学、物理和工程等领域。
在本文中,我们将使用Matlab来计算圆周率,并探讨一些与圆周率相关的数值计算方法和应用。
2. 圆周率的定义与计算方法2.1 定义圆周率可以通过圆的周长与直径的比值来定义,即π = C/d,其中C表示圆的周长,d表示圆的直径。
2.2 常用计算方法2.2.1 几何法几何法是最直观的计算圆周率的方法之一。
它基于圆的定义,将一个正方形内切于一个圆,并通过计算正方形的边长与圆的直径的比值来逼近圆周率。
几何法的思想简单易懂,但精度较低,随着划分的正方形数量增加,计算结果会逼近真实值。
2.2.2 随机法随机法是一种通过生成随机点,并统计这些点落在圆内的比例来估计圆周率的方法。
随机法利用概率统计的思想,通过大量的随机模拟来逼近圆周率。
使用Matlab可以方便地生成随机数,并进行统计计算,从而得到较为准确的圆周率估计值。
2.2.3 数列法数列法是通过一些特定公式或数列来逼近圆周率的方法。
其中最著名的数列是莱布尼兹级数和无穷乘积法。
莱布尼兹级数是一个交替级数,通过逐项相加可以逼近圆周率的值。
无穷乘积法则是使用无穷乘积的形式来逼近圆周率,其中最著名的是狄利克雷(Dirichlet)级数。
这些数列法适用于在计算机中进行快速近似计算,但对于精确值的计算效果较差。
3. Matlab中的圆周率计算函数Matlab提供了多种计算圆周率的函数,方便了用户进行圆周率的计算和应用。
下面介绍几个常用的Matlab函数。
### 3.1 pi pi是Matlab内置的常量,表示圆周率的值。
使用pi函数可以直接获得圆周率的近似值,具有较高的精度。
3.2 montecarlo_pimontecarlo_pi是一个基于随机法的圆周率计算函数。
它通过生成随机点,并统计这些点落在圆内的比例来估计圆周率。
编写M 文件,用公式 +-+-≈7
1513114π
求π的近似值,计算到第n 项,n 由用户输入 【代码】:n=input('n=');
sum=0;
for i=1:n;
sum=sum+(-1)^(i+1)/(2*i-1);
end
※ input 有两种用法(1). 在命令窗口中输入Val=input('请输入一个整数'),这样在命
令窗口中便会显示“请输入一个整数”提示用户进行输入操作,当用户输入一个整数后,便会被赋给Val 。
(2). 当你在命令窗口输入str=input('Please input', 's')然后
从键盘输入:1+2+3,这样str 实际得到的是:'1+2+3'而不是6。
值得注意的是:需要注意的是,如果执行本函数时,用户敲了回车而不是输入了一个数,则该函数返回一个空矩阵。
可以用MATLAB 中的isempty 函数判断输入的是否为空。
※ for i=a:b; end MATLAB 中的循环语句,i=a 开始第一次计算从for 的下一行计算到end
截止,之后开始计算a+1,a+2…….b
※ a=a+b 在MATLAB 中表示将a+b 的值赋予a 通常在循环语句中出现
※ a=b 表示将b 的值赋给a
※ a= =b 表示判断a b 的值是否相等。
实验报告(五)完成人:L.W.Yohann注:本次实验主要学习了用MATLAB求解开普勒方程和方程求根的问题,了解学习了用fzero命令、二分法、Newton迭代法、一般迭代法求解方程,以及学习了非线性方程组的求解问题,完成后,小组对第90页的上级练习题进行了程序编辑和运行。
1.绘图并观察函数零点的分布.解:在编辑窗口输入:f=inline('x-0.5*sin(x)-1');fplot(f,[0,1])grid存盘后运行得2. 利用fzero 命令求解方程.解:在编辑窗口输入:f=inline('x-0.5*sin(x)-1');c=fzero(f,[1,2])存盘后运行得c =1.49873. 用二分法求解方程.求解(1)方程x^2-2=0在(0,2)内的近似根;(2)圆x^2+y^2=2与曲线y=e^-x 的两个交点;(3)方程∫t 21+t 2x 0dt =12的近似根. (1)解:在编辑窗口输入:00.10.20.30.40.50.60.70.80.91-1-0.9-0.8-0.7-0.6-0.5-0.4-0.3f=inline('x^2-2');x1=0;x2=2;while abs(x1-x2)>10^(-5)x3=(x1+x2)/2;if f(x3)==0break;elseif f(x1)*f(x3)>0x1=x3;else f(x2)*f(x3)>0;x2=x3;endendx0=x3存盘后运行得x0 =1.4142(2)解:在编辑窗口输入:f=inline('(x^2)*exp(2*x)+1-2*exp(2*x)');x1=0;x2=2;x5=-2;x6=0;while abs(x1-x2)>10^(-5)x3=(x1+x2)/2;if f(x3)==0break;elseif f(x1)*f(x3)>0x1=x3;else f(x2)*f(x3)>0;x2=x3;endendwhile abs(x5-x6)>10^(-5)x7=(x5+x6)/2;if f(x7)==0break;elseif f(x5)*f(x7)>0x5=x7;else f(x6)*f(x7)>0;x6=x7;endendx0=x3x4=x7存盘后运行得x0 =1.3922x4 =-0.3203(3)解:在编辑窗口输入:clear;clc;syms t xf1=(t^2)/(1+t^2);f2=int(f1,t,0,x);%¼ÆËã²»¶¨»ý·Öf=inline('x - atan(x)-0.5');x1=-5;x2=5;while abs(x1-x2)>10^(-5)x3=(x1+x2)/2;if f(x3)==0break;elseif f(x1)*f(x3)>0x1=x3;else f(x2)*f(x3)>0;x2=x3;endendx0=x3存盘后运行得x0 =1.47504.用Newton迭代法求解方程求解:x=0.5sinx+1的近似根;解:在编辑窗口输入:f=inline('x-0.5*sin(x)-1');df=inline('1-0.5*cos(x)');d2f=inline('0.5*sin(x)');a=1;b=2;dlt=1.0e-5;if f(a)*d2f(a)>0x0=a;elsex0=b;endm=min(abs(df(a)),abs(df(b)));k=0;while abs(f(x0))>m*dltk=k+1;x1=x0-f(x0)/df(x0);x0=x1;fprintf('k=%d x=%.5f\n',k,x0); end存盘后运行得k=1 x=1.54858k=2 x=1.49933k=3 x=1.498705.求解非线性方程组.试求非线性方程组{2x12−x1x2−5x1+1=0x1+3lgx1−x22=0的解,初值如下:(1)x0=[1.4,−1.5](2)x0=[3.7,2.7]解:在编辑窗口输入:function f=group5(x)f=[2*x(1)^2-x(1)*x(2)-5*x(1)+1;x(1)+3*log10(x(1))-x(2)^2];(1):输入:[f,fval]=fsolve('group2',[1.4,-1.5]) 运行得f =1.4589 -1.3968fval =1.0e-011 *0.0759-0.6178(2):输入:[f,fval]=fsolve('group2',[3.7,2.7])运行得f =3.4874 2.2616fval =1.0e-006 *0.0059-0.20126.解决实际问题.为了在海岛I与某城市C之间铺设一条地下光缆,每千米光缆铺设成本在水下部分使C1万元,在地下部分使C2万元,为使得该光缆的总成本最低,光缆的转折点P(海岸线上)应该取在何处?如果实际测得海岛I与城市C之间的水平距离l=30km,海岛距海岸线垂直距离h1=15km,城市距海岸线垂直距离h=10km,C1=3000万元/km,C2=1500万元/km,求P点的坐标(误差<10−3km).解:在编辑窗口输入:f=inline('(3000*x)/(x^2 + 225)^(1/2) + (750*(2*x - 60))/((x - 30)^2 + 100)^(1/2)'); x1=5;x2=10;while abs(x1-x2)>10^(-3)x3=(x1+x2)/2;if f(x3)==0break;elseif f(x1)*f(x3)>0x1=x3;else f(x2)*f(x3)>0;x2=x3;endendfprintf('x=%.5f',x3) 存盘后运行得x=7.69104>>。
matlab圆周率计算方法及实现Matlab是一种强大的数学软件,可以用它来进行各种复杂的计算和数据分析。
其中,计算圆周率也是Matlab中常见的问题之一。
本文将介绍几种常见的计算圆周率的方法,并提供相应的Matlab代码实现。
一、Leibniz公式Leibniz公式是一种最简单的计算圆周率的方法。
该公式由德国数学家莱布尼兹在17世纪提出,其基本思想是利用无穷级数逼近圆周率。
具体公式如下:$\pi=4\sum_{n=0}^{\infty}\frac{(-1)^{n}}{2n+1}$根据该公式,我们可以编写如下代码:function pi = leibniz(n)pi = 0;for i = 0:npi = pi + (-1)^i/(2*i+1);endpi = 4*pi;end其中,n为迭代次数。
二、Monte Carlo方法Monte Carlo方法是一种随机模拟方法,可以用于估计各种复杂问题的解。
在计算圆周率时,我们可以利用Monte Carlo方法来模拟投掷点落在圆内或者圆外的概率,并通过比值来估计圆周率。
具体实现过程如下:- 在一个正方形内随机生成n个点;- 统计落在圆内的点的个数m;- 通过比值$\frac{m}{n}$来估计圆周率,即$\pi\approx4\frac{m}{n}$。
根据该方法,我们可以编写如下代码:function pi = monte_carlo(n)x = rand(1,n);y = rand(1,n);d = sqrt(x.^2 + y.^2);m = sum(d <= 1);pi = 4*m/n;end其中,n为生成点的个数。
三、Bailey-Borwein-Plouffe公式Bailey-Borwein-Plouffe公式是一种快速计算圆周率的方法。
该公式由Jonathan M. Borwein、Peter B. Borwein和Simon Plouffe在1995年提出,其基本思想是利用二进制数位上的特殊性质来逼近圆周率。