计算函数曲线与x轴包围的面积
描述
计算函数曲线在区间(a,b)与x轴包围的面积,可将这个区域平行于y轴切分成相等宽度的小梯形,每个梯形的面积可近似求出,所有梯形面积的和就是函数曲线与x轴包围的面积,也就是函数在给定区间的积分值,dx越小,梯形近似度越高,计算结果越精确,也就是说区间切分段的越多,结果越精确。
参考下图,计算函数sin(x)在区间(a,b)与x轴包围的面积,a,b由用户输入,区间切分多少段也由用户输入。
image.png
输入格式
输入包括两行
第一行是由空格分隔的两个实数,代表积分区间
第二行是一个正整数,代表切分数量
输出格式
积分值,结果保留2位小数

解析

  1. 在同一行内输入两个实数,可以用input().split()将输入切分两个,然后用同步赋值 a, b = input().split() 分别赋值给两个变量
  2. 浮点数 float()
  3. 1和2可以一次完成,用 a, b = map(float, input().split()) 将切分的两个浮点数字符串映射为浮点数,然后同步赋值
  4. dx 计算后要保证是正值
  5. 积分本质是计算曲线包围的面积,分成小块后,每块近似看成梯形(也可以近似看成矩形,本题要求按梯形计算),总面积就是把每块的面积累加起来
  6. 总面积只输出一个,在循环结束后输出
  7. 结果保留2位小数

常见问题

  1. 在循环内输出会输出很多个

    1. import math
    2. a=input().split()
    3. n=int(input())
    4. dx=(f'(b-a)/n') # 外面的括号没有用处,这样结果是字符串,
    5. for i in range(n):
    6. A=math.sin(i*dx)
    7. B=math.sin((i+1)*dx)
    8. s=(({abs(A)}+{abs(B)})*{dx}/2)
    9. sum(s) # 没有命名也没有输出,结果不可见
    10. print(s) # 输出放循环里,会输出n次
    1. import math
    2. a, b = map(float, input().split())
    3. c = int(input())
    4. d = (b - a) / c # 保证正值
    5. s = 0
    6. for i in range(c): # 循环体语句需缩进
    7. x = math.fabs(math.sin(a))
    8. a += d
    9. y = math.fabs(math.sin(a))
    10. z = (x + y)*d/2
    11. s += z
    12. print('{:.2f}'.format(s))
    1. import math
    2. a, b = map(float, input().split())
    3. m = int(input())
    4. c = (b - a) / m
    5. x = 0
    6. for i in range(a, b, c):
    7. z = (abs(math.sin(a)) + abs(math.sin(a + c))) * c * 0.5
    8. x = x + z
    9. print(f'{x:.2f}')
  2. 变量错

image.png

  1. 语句块缩进错误

image.png

  1. 数字不能做变量名

image.png

  1. 循环语句块缩进,不是循环控制语句缩进

image.png
image.png

  1. 计算未放在循环中 ```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}’)

  1. 7. 错抄答案
  2. ```python
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. x = np.arange(0,1,0.001)
  6. y = np.sqrt(1-x**2)
  7. plt.close('all')
  8. plt.plot(x, y)
  9. plt.show()
  1. 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}')
    
  2. f-string格式为f’字符串{变量或值}’

image.png

  1. dx变成字符串,无法参与数值运算

image.png