今天上课老师布置了一道pthon的课题,关键是和数学有关数学又是我的弱项头有点小大
回到寝室立刻对问题进行构思,题目如下: y=sin(x)
计算图中阴影面积
是不是觉得很简单?没错,算出来的确简单 关键要用python做 思路:将椭圆形划分为若干个矩形
然后算矩形面积 最后把各个矩形一加 算得总面积 是不是觉得这样算的值不够准确?但是我们可以将矩形化为成千上万个然后计算就可以无限接近精确值不是吗?一系列的和室友沟通(争论)之后带着思路点开了Pycharm
于是很快就根据思路敲完了代码
#导入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
y=math.sin(math.pi(x1))
TypeError: 'float' object is not callable
于此同时收到了老师的短信提示要用到数组(和之前猜测的一样,因为今天讲的就是数组)ok,全删掉重来
重新整理思路 用两条数组表示X 和Y的值
listx=[]
listy=[]
题目中X的范围就到2π
将X的值划分为10000份计算并将值存入数组中然后在计算出Y值并存入数组 最后提取两个数组的值进行计算得出面积代码如下:
#导入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函数这个函数用于求绝对值
#导入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)
思路太乱了 算出来的值还是有问题明天再解决了 直接用积分算
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)
有思路的同学可以评论提供一下思路和指正一下逻辑错误
重拾昨天的思路 之前如果将2π/10000的话值是固定相等的 由于Y的值是不断变化的 所以需要让X的值也能不断变化 代码如下:
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)