文章目录
太棒了!第22天我们将探索数学中一个非常基础和强大的概念:线性方程(y = mx + b
),并用Python把它直观地画出来。这对理解变量关系、图形和数据趋势至关重要,也是后续学习更复杂数学和编程的基础。
核心概念:线性方程 y = mx + b
- 这是什么? 这是一个描述直线的数学公式。它告诉我们,对于直线上的任何一个点
(x, y)
,它的y
值是怎么根据x
值计算出来的。 - 字母代表什么?
x
:自变量。这是我们自己选择的输入值(比如:时间、数量、距离)。y
:因变量。这是我们想要计算或预测的输出值(比如:花费的总钱数、跑过的总路程、温度)。y
的值依赖于我们选择的x
。m
:斜率。它告诉我们这条直线有多“陡峭”。m > 0
:直线向上倾斜(x增加,y也增加)。m < 0
:直线向下倾斜(x增加,y减少)。m = 0
:一条水平线(无论x怎么变,y都不变)。- 数值大小:
|m|
越大,直线越陡峭;|m|
越小,直线越平缓。 - 怎么算斜率?
m = (y2 - y1) / (x2 - x1)
(取直线上任意两点(x1, y1)
和(x2, y2)
,计算y的变化量除以x的变化量)。
b
:截距。它告诉我们当x = 0
时,直线与y
轴相交的位置。- 例如,如果
b = 3
,那么直线会穿过点(0, 3)
。
- 例如,如果
为什么它很重要?
- 描述现实世界:很多简单的关系是线性的(比如恒定速度下的距离-时间关系、固定单价下的总价-数量关系)。
- 预测:知道一条直线的方程,我们可以预测任意
x
值对应的y
值。 - 基础:它是学习更复杂函数(如抛物线、指数函数)和更高阶数学(代数、微积分)的基石。
Python实践:用代码画出直线!
我们将使用 matplotlib
这个强大的绘图库来可视化直线方程。
代码详解:
# 【第22天:线性方程 y = mx + b】 - Python 绘制直线
# 目标:理解线性方程概念,并用Python画出不同斜率和截距的直线
# 1. 引入必要的帮手 (库)
import matplotlib.pyplot as plt # 绘图库
import numpy as np # 数值计算库,用来生成一组x值
# 2. 定义我们的直线方程函数
def linear_equation(x, m, b):
"""
计算线性方程 y = m*x + b 的结果
参数:
x (数字或数组): 输入的自变量值
m (数字): 直线的斜率
b (数字): 直线的y轴截距
返回:
y (数字或数组): 计算得到的y值
"""
y = m * x + b # 这就是方程的核心!
return y
# 3. 创建一组x值 (比如从 -10 到 10)
x_values = np.linspace(-10, 10, 100) # 在-10和10之间均匀生成100个点
# 4. 定义不同的斜率和截距组合 (试试看效果!)
# 组合1: 平缓上升线 (m=0.5, b=2)
m1 = 0.5
b1 = 2
y_values1 = linear_equation(x_values, m1, b1) # 计算对应的y值
# 组合2: 陡峭下降线 (m=-2, b=0)
m2 = -2
b2 = 0
y_values2 = linear_equation(x_values, m2, b2)
# 组合3: 水平线 (m=0, b=4)
m3 = 0
b3 = 4
y_values3 = linear_equation(x_values, m3, b3)
# 组合4: 通过原点快速上升 (m=1.8, b=0)
m4 = 1.8
b4 = 0
y_values4 = linear_equation(x_values, m4, b4)
# 5. 创建图形和坐标轴
plt.figure(figsize=(10, 6)) # 设置图形大小 (可选)
plt.xlabel('x - 自变量') # 给x轴加标签
plt.ylabel('y - 因变量') # 给y轴加标签
plt.title('探索线性方程: y = mx + b') # 给图加标题
plt.grid(True, linestyle='--', alpha=0.7) # 添加网格线 (更好看)
plt.axhline(y=0, color='k', linewidth=0.8) # 画出x轴 (黑色细线)
plt.axvline(x=0, color='k', linewidth=0.8) # 画出y轴 (黑色细线)
# 6. 绘制多条直线 (用不同颜色和标签)
plt.plot(x_values, y_values1, label=f'y = {m1}x + {b1}', color='blue')
plt.plot(x_values, y_values2, label=f'y = {m2}x + {b2}', color='red')
plt.plot(x_values, y_values3, label=f'y = {m3}x + {b3}', color='green')
plt.plot(x_values, y_values4, label=f'y = {m4}x + {b4}', color='purple')
# 7. 添加图例 (说明每条线是谁)
plt.legend()
# 8. 显示图形!
plt.show()
运行这段代码,你会看到什么?
你会看到一个坐标系,上面画着四条不同颜色、不同斜率和截距的直线!观察:
- 蓝线 (
y = 0.5x + 2
):- 斜率
m = 0.5 > 0
,向右上方倾斜。 - 截距
b = 2
,穿过点(0, 2)
。相对平缓。
- 斜率
- 红线 (
y = -2x + 0
):- 斜率
m = -2 < 0
,向右下方倾斜,相当陡峭。 - 截距
b = 0
,穿过原点(0, 0)
。
- 斜率
- 绿线 (
y = 0*x + 4
即y = 4
):- 斜率
m = 0
,是一条完美的水平线。 - 无论
x
是多少,y
始终等于截距b = 4
。
- 斜率
- 紫线 (
y = 1.8x + 0
):- 斜率
m = 1.8 > 0
,向右上方倾斜,比蓝线陡峭 (1.8 > 0.5
)。 - 截距
b = 0
,穿过原点(0, 0)
。
- 斜率
动手实验 & 思考题 (作业):
- 修改参数: 在代码中找到定义
m1
,b1
,m2
,b2
等的地方。试着改成你喜欢的数字(比如m1 = 3
,b1 = -1
,m2 = 0.2
,b2 = 5
)。重新运行代码,观察直线如何变化。斜率m
变大变小会怎样?截距b
变大变小会怎样? - 添加新直线: 尝试在代码中添加第5条直线(模仿组合4的写法)。给它一个负的斜率和一个正的截距(比如
m5 = -1.5
,b5 = 3
)。记得计算y_values5
并把它画出来 (plt.plot
)。这条线会是什么样子? - 生活应用:
- 想象你每周存
5
块钱零花钱。设x
代表周数,y
代表总存款。- 你能写出描述存款 (
y
) 和周数 (x
) 关系的线性方程吗?(提示:斜率m
就是每周存的钱,截距b
是你一开始有多少钱(比如0))。 - 用Python画出这条线(x范围0到10周)。第8周结束时你有多少钱?
- 你能写出描述存款 (
- 一辆小车以每小时
60
公里的速度匀速行驶。设x
代表时间(小时),y
代表行驶的总距离(公里)。- 写出距离 (
y
) 和时间 (x
) 关系的方程。 - 画出这条线(x范围0到5小时)。3.5小时后车开了多远?
- 写出距离 (
- 想象你每周存
- 挑战: 你能修改代码,让用户输入斜率和截距 (
m
和b
),然后只画出用户指定的那一条直线吗?(提示:用input()
获取用户输入,记得把输入转换成数字float()
)。
总结:
今天你学到了:
- 线性方程
y = mx + b
描述了所有直线的数学关系。 - 斜率
m
控制直线的陡峭程度和方向(向上还是向下倾斜)。 - 截距
b
控制直线在y
轴上的起始位置。 - 如何用Python(
numpy
生成数据,matplotlib
绘图)直观地可视化不同m
和b
组合下的直线。
理解 y = mx + b
是数学和编程中一个超级重要的里程碑!通过动手画图,你能真切感受到 m
和 b
是如何影响直线的形状的。多做实验,多联系生活中的例子,这个方程会变得越来越清晰!明天我们可以继续探索直线相关的有趣问题!加油!
代码修正
# 【第22天:线性方程 y = mx + b】 - Python 绘制直线
# 目标:理解线性方程概念,并用Python画出不同斜率和截距的直线
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
# 修复PyCharm显示中文问题 - 第一步
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei', 'sans-serif']
mpl.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 定义直线方程函数
def linear_equation(x, m, b):
"""
计算线性方程 y = m*x + b 的结果
"""
return m * x + b
# 创建一组x值
x_values = np.linspace(-10, 10, 100)
# 定义不同的斜率和截距组合
slopes = [0.5, -2, 0, 1.8]
intercepts = [2, 0, 4, 0]
colors = ['blue', 'red', 'green', 'purple']
labels = [f'y = {m}x + {b}' for m, b in zip(slopes, intercepts)]
# 创建图形
plt.figure(figsize=(10, 6))
# 修复PyCharm显示问题 - 第二步
plt.rcParams['backend'] = 'TkAgg' # 切换后端避免PyCharm专有后端的bug
# 设置中文字体兼容的标签
plt.xlabel('x - 自变量')
plt.ylabel('y - 因变量')
plt.title('探索线性方程: y = mx + b')
# 添加坐标轴和网格
plt.grid(True, linestyle='--', alpha=0.7)
plt.axhline(y=0, color='k', linewidth=0.8)
plt.axvline(x=0, color='k', linewidth=0.8)
# 绘制所有直线
for i in range(len(slopes)):
y_values = linear_equation(x_values, slopes[i], intercepts[i])
plt.plot(x_values, y_values, label=labels[i], color=colors[i])
# 添加图例
plt.legend()
# 修复PyCharm显示问题 - 第三步
try:
plt.show()
except AttributeError:
# 如果仍然报错,保存为图片文件
plt.savefig('linear_equations.png')
print("由于兼容性问题,图形已保存为 'linear_equations.png'")