计算函数曲线与x轴包围的面积
描述
计算函数曲线在区间(a,b)与x轴包围的面积,可将这个区域平行于y轴切分成相等宽度的小梯形,每个梯形的面积可近似求出,所有梯形面积的和就是函数曲线与x轴包围的面积,也就是函数在给定区间的积分值,dx越小,梯形近似度越高,计算结果越精确,也就是说区间切分段的越多,结果越精确。
参考下图,计算函数sin(x)在区间(a,b)与x轴包围的面积,a,b由用户输入,区间切分多少段也由用户输入。
输入格式
输入包括两行
第一行是由空格分隔的两个实数,代表积分区间
第二行是一个正整数,代表切分数量
输出格式
积分值,结果保留2位小数
解析
- 在同一行内输入两个实数,可以用input().split()将输入切分两个,然后用同步赋值 a, b = input().split() 分别赋值给两个变量
- 浮点数 float()
- 1和2可以一次完成,用 a, b = map(float, input().split()) 将切分的两个浮点数字符串映射为浮点数,然后同步赋值
- dx 计算后要保证是正值
- 积分本质是计算曲线包围的面积,分成小块后,每块近似看成梯形(也可以近似看成矩形,本题要求按梯形计算),总面积就是把每块的面积累加起来
- 总面积只输出一个,在循环结束后输出
- 结果保留2位小数
常见问题
在循环内输出会输出很多个
import math
a=input().split()
n=int(input())
dx=(f'(b-a)/n') # 外面的括号没有用处,这样结果是字符串,
for i in range(n):
A=math.sin(i*dx)
B=math.sin((i+1)*dx)
s=(({abs(A)}+{abs(B)})*{dx}/2)
sum(s) # 没有命名也没有输出,结果不可见
print(s) # 输出放循环里,会输出n次
import math
a, b = map(float, input().split())
c = int(input())
d = (b - a) / c # 保证正值
s = 0
for i in range(c): # 循环体语句需缩进
x = math.fabs(math.sin(a))
a += d
y = math.fabs(math.sin(a))
z = (x + y)*d/2
s += z
print('{:.2f}'.format(s))
import math
a, b = map(float, input().split())
m = int(input())
c = (b - a) / m
x = 0
for i in range(a, b, c):
z = (abs(math.sin(a)) + abs(math.sin(a + c))) * c * 0.5
x = x + z
print(f'{x:.2f}')
变量错
- 语句块缩进错误
- 数字不能做变量名
- 循环语句块缩进,不是循环控制语句缩进
- 计算未放在循环中 ```python import math
m, n = map(eval, input().split()) a = int(input()) dx = abs(n - m) / a i = m
q 需放在循环中计算
q = (abs(math.sin(i)) + abs(math.sin(i + dx))) * dx/2 s=0 while i < n: i = i + dx s = s + q print(f’{s:.2f}’)
7. 错抄答案
```python
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0,1,0.001)
y = np.sqrt(1-x**2)
plt.close('all')
plt.plot(x, y)
plt.show()
range()三个参数都必须为整数
a,b= map(float,input().split()) d = int(input()) g=int(a) k=int(b) h=(b-a)/d from math import sin for i in range(g,k,h): # range的参数必须是整数 j=i+h s=(1/2)*(sin(i)+sin(j))*h S=S+s # 大写S未定义 print(f'{S:.2f}')
f-string格式为f’字符串{变量或值}’
- dx变成字符串,无法参与数值运算