前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python课题:正弦函数 求圆形的阴影面积

python课题:正弦函数 求圆形的阴影面积

作者头像
用户1788308
发布2020-09-23 11:22:41
1.4K0
发布2020-09-23 11:22:41
举报
文章被收录于专栏:MyBlogs

今天上课老师布置了一道pthon的课题,关键是和数学有关数学又是我的弱项头有点小大

回到寝室立刻对问题进行构思,题目如下: y=sin(x)

题目
题目

计算图中阴影面积

是不是觉得很简单?没错,算出来的确简单 关键要用python做 思路:将椭圆形划分为若干个矩形

矩形
矩形

然后算矩形面积 最后把各个矩形一加 算得总面积 是不是觉得这样算的值不够准确?但是我们可以将矩形化为成千上万个然后计算就可以无限接近精确值不是吗?一系列的和室友沟通(争论)之后带着思路点开了Pycharm

于是很快就根据思路敲完了代码

代码语言:javascript
复制
#导入math函数
import math
#创建一个X1变量
x1=0
#循环一万次运算
for i in range(1,10000):
    #将π的值除以10000次赋值给x
    x=math.pi/10000
    #x1累加X的值用于计算Y值
    x1=x1+x
    #计算当前Y值
    y=math.sin(math.pi(x1))
    #计算矩形面积
    mj=x*y
    #计算面积总和
    sum=sum+mj
print(sum)

然后整个人就炸了 程序报错:Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/untitled2/TP.py", line 6, in

代码语言:javascript
复制
y=math.sin(math.pi(x1))

TypeError: 'float' object is not callable

于此同时收到了老师的短信提示要用到数组(和之前猜测的一样,因为今天讲的就是数组)ok,全删掉重来

重新整理思路 用两条数组表示X 和Y的值

代码语言:javascript
复制
listx=[]
listy=[]

题目中X的范围就到2π

取值
取值

将X的值划分为10000份计算并将值存入数组中然后在计算出Y值并存入数组 最后提取两个数组的值进行计算得出面积代码如下:

代码语言:javascript
复制
#导入math函数
import math
#定义两个数组用于表示X轴的值和Y轴的值 定义一个sum用于求和
listx=[]
listy=[]
sum=0
#计算X的值并存入数组
for i in range(0,10000):
    listx.append(2*math.pi/10000)
#根据X值求Y值
for z in listx:
    listy.append(math.sin(z))
#计算面积总和
for a in range(0,10000):
    mj=listx[a]*listy[a]
    sum=sum+mj
print(sum)

最后程序输出0.0039478415006773725 why???为啥这么小 一系列的思考之后发现了问题因为有的Y值计算为负数 需要将Y的值修改一下用到python的abs函数这个函数用于求绝对值

代码语言:javascript
复制
#导入math函数
import math
#定义两个数组用于表示X轴的值和Y轴的值 定义一个sum用于求和
listx=[]
listy=[]
sum=0
#计算X的值并存入数组
for i in range(0,10000):
    listx.append(2*math.pi/10000)
#根据X值求Y值
for z in listx:
    listy.append(abs(math.sin(z)))
#计算面积总和
for a in range(0,10000):
    mj=listx[a]*listy[a]
    sum=sum+mj
print(sum)

思路太乱了 算出来的值还是有问题明天再解决了 直接用积分算

代码语言:javascript
复制
import math
sumsin=0
n=10000
dn=2*math.pi/n
for i in range(n):
    sumsin+=abs(math.sin(i*dn))*dn
print(sumsin)

有思路的同学可以评论提供一下思路和指正一下逻辑错误

10.10日更新

重拾昨天的思路 之前如果将2π/10000的话值是固定相等的 由于Y的值是不断变化的 所以需要让X的值也能不断变化 代码如下:

代码语言:javascript
复制
import math
listx=[]
listy=[]
n=10000
width=2*math.pi/n
for i in range(n):
  listx.append(i*width)
for i in lsitx:
  listy.append(abs(math.sin(i)))
S=sum(listy)*width
print(S)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 10.10日更新
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档