Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0816
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在:
- 个人网站: `https://oeasy.org`
- 蓝桥云课: `https://www.lanqiao.cn/courses/3584`
- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
- Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次 伽利略发现了
- 单摆的周期T 和 摆长L 有关系
- 从 因果的角度上来说
- 周期T 和 摆长的平方根 成正比
- 从 相关性的角度来说
- 因果反转
- 摆长 和 周期的平方成正比
- 然后 进入 二阶多项式回归
- 发现了 重力加速度g
- 源头是 伽利略 对于单摆的研究
- 亚里士多德 曾经说过
月球是光滑完美的天体
- 伽利略 想要亲眼看看?🤔
- 1609年
- 伽利略听说荷兰人发明了
- 一种“能放大远处物体的透镜装置”
- 但当时的望远镜倍数只有3倍
- 只能用来观察地面物体
- 是贵族的“玩具”
- 优化透镜组合
- 他计算了凸透镜(物镜)和凹透镜(目镜)的焦距比例
- 调整镜片间距
- 把放大倍数从3倍提升到 8倍
- 最终达到 30倍(这在当时是天文级别的精度)
- 解决成像模糊问题
- 早期望远镜成像会变形、有色差
- 伽利略通过打磨更光滑的镜片、调整镜片同轴度
- 让天体成像变得清晰可辨
-
关键意义
- 这台改良后的望远镜
- 是人类第一台天文望远镜
- 它让伽利略看到了肉眼永远看不到的天体细节
- 为获取精准数据奠定了基础
-
他发现了什么?
- 观测过程:
- 夜晚将望远镜对准月球,调整焦距直到成像清晰;
- 用象限仪记录月球的高度角,确保每次观测在同一位置(减少误差);
- 手绘月面图:把看到的月球表面的“亮区”和“暗区”画下来
- 发现暗区是平坦的平原
- 亮区是凸起的山脉
- 他甚至通过光影长度
- 估算出月球山脉的高度
- 用几何方法:影子长度=山脉高度×tan(太阳高度角)
- 反复观测月相变化
- 确认这些地形是月球本身的
- 不是大气干扰
- 月亮
- 和地球一样
- 表面坑坑洼洼
- 并不完美
- 打破“天体完美论”
“天地是一体的”
- 1610年1月
- 伽利略连续多晚观测木星
- 发现木星旁边有3颗“小星”
- 位置每天都在变化
- 用单摆计时
- 每天固定时间(比如子夜)观测
- 用单摆记录间隔时间
- 标记3颗小星相对于木星的位置
- 几天后
- 他发现第4颗小星
- 通过持续观测
- 记录它们的位置变化规律
- 它们不是随机运动
- 而是绕着木星公转
- 这说明
- 不是所有的天体 都围着地球转的
- 观测过程:
- 伽利略连续数月观测金星
- 记录它的形状变化(相位)和亮度变化;
- 用单摆记录相位变化的周期
- 用象限仪记录金星与太阳的夹角
- 他清晰地看到金星的相位和月球一样
- 从“娥眉相”→“弦相”→“满相”→“弦相”→“娥眉相”
- 完整循环
- 数据结论
- 金星的满相
- 只有日心说能解释
- 直接推翻了地心说的核心假设
- 32条完整记录
| 观测日期(公历) | 儒略日 | 相位描述 | 角距离(太阳) | 角大小(角秒) | 亮度描述 | 观测条件 | 文献来源 |
|---|---|---|---|---|---|---|---|
| 1610年8月15日 | 2305845 | 极细娥眉相 | 约28° | 约65″ | 耀眼 | 黎明前可见 | 未出版手稿(佛罗伦萨国家图书馆) |
| 1610年8月25日 | 2305855 | 细娥眉相 | 约27° | 约62″ | 极亮 | 大气透明度好 | 未出版手稿 |
| 1610年9月5日 | 2305866 | 娥眉相 | 约26° | 约60″ | 极亮 | 无云 | 《关于太阳黑子的书信》 |
| 1610年9月15日 | 2305876 | 娥眉相(增宽) | 约25° | 约58″ | 极亮 | 无云 | 未出版手稿 |
| 1610年9月25日 | 2305886 | 娥眉相→弦相过渡 | 约23° | 约52″ | 明亮 | 轻微薄雾 | 未出版手稿 |
| 1610年10月5日 | 2305896 | 娥眉相→弦相过渡 | 约20° | 约40″ | 明亮 | 无云 | 《关于太阳黑子的书信》 |
| 1610年10月15日 | 2305906 | 宽娥眉相 | 约18° | 约38″ | 明亮 | 无云 | 未出版手稿 |
| 1610年10月25日 | 2305916 | 近弦相 | 约16° | 约34″ | 中等明亮 | 无云 | 未出版手稿 |
| 1610年11月5日 | 2305926 | 弦相(上弦) | 约15° | 约30″ | 中等 | 无云 | 《关于太阳黑子的书信》 |
| 1610年11月15日 | 2305936 | 弦相→凸相过渡 | 约14° | 约28″ | 中等 | 无云 | 未出版手稿 |
| 1610年11月25日 | 2305946 | 凸相(小) | 约12° | 约27″ | 减弱 | 无云 | 未出版手稿 |
| 1610年12月5日 | 2305956 | 凸相(增大) | 约10° | 约25″ | 减弱 | 无云 | 《关于太阳黑子的书信》 |
| 1610年12月11日 | 2305962 | 凸相 | 约9° | 约24″ | 减弱 | 无云 | 致Giuliano de Medicis信 |
| 1610年12月15日 | 2305966 | 凸相(近满相) | 约8° | 约22″ | 减弱 | 无云 | 未出版手稿 |
| 1610年12月20日 | 2305971 | 凸相(近满相) | 约7° | 约20″ | 减弱 | 无云 | 致Benedetto Castelli加密信 |
| 1610年12月25日 | 2305976 | 近满相 | 约6° | 约18″ | 较暗 | 无云 | 未出版手稿 |
| 1611年1月1日 | 2305983 | 满相(首次记录) | 约5° | 约15″ | 最暗 | 无云 | 《关于太阳黑子的书信》 |
| 1611年1月5日 | 2305987 | 满相 | 约5° | 约15″ | 最暗 | 无云 | 未出版手稿 |
| 1611年1月15日 | 2305997 | 满相→凸相过渡 | 约6° | 约17″ | 较暗 | 无云 | 未出版手稿 |
| 1611年1月25日 | 2306007 | 凸相 | 约8° | 约19″ | 增强 | 无云 | 未出版手稿 |
| 1611年2月5日 | 2306018 | 凸相(减小) | 约10° | 约21″ | 增强 | 无云 | 《关于太阳黑子的书信》 |
| 1611年2月15日 | 2306028 | 凸相→弦相过渡 | 约12° | 约22″ | 增强 | 轻微薄雾 | 未出版手稿 |
| 1611年2月25日 | 2306038 | 近弦相 | 约14° | 约28″ | 明亮 | 无云 | 未出版手稿 |
| 1611年3月5日 | 2306048 | 弦相(下弦) | 约15° | 约30″ | 中等明亮 | 无云 | 《关于太阳黑子的书信》 |
| 1611年3月15日 | 2306058 | 弦相→娥眉相过渡 | 约18° | 约35″ | 明亮 | 无云 | 未出版手稿 |
| 1611年3月25日 | 2306068 | 娥眉相→弦相过渡 | 约20° | 约38″ | 明亮 | 无云 | 未出版手稿 |
| 1611年4月5日 | 2306079 | 娥眉相 | 约22° | 约45″ | 极亮 | 无云 | 《关于太阳黑子的书信》 |
| 1611年4月15日 | 2306089 | 娥眉相(增宽) | 约24° | 约50″ | 极亮 | 无云 | 未出版手稿 |
| 1611年4月25日 | 2306099 | 细娥眉相 | 约26° | 约55″ | 极亮 | 无云 | 未出版手稿 |
| 1611年5月5日 | 2306109 | 极细娥眉相 | 约8° | 约65″ | 耀眼 | 接近合日 | 《关于太阳黑子的书信》 |
| 1611年5月15日 | 2306119 | 极细娥眉相 | 约7° | 约67″ | 耀眼 | 接近合日 | 未出版手稿 |
| 1611年5月25日 | 2306129 | 接近合日 | 约5° | 约70″ | 耀眼 | 几乎与太阳同升同落 | 未出版手稿 |
- 金星是地内行星
- 从地球看 金星和太阳的夹角
- 就是角距离(太阳)
- 从地球 看金星直径的夹角
- 就是 角大小(角秒)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.multioutput import MultiOutputRegressor
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import r2_score
# ========== 1. 加载伽利略金星完整数据集 ==========
# 数据来源:之前的32条完整记录
data = pd.DataFrame({
"days": np.arange(32), # 自变量:连续天数(第0天到第31天)
"angular_distance": [28,27,26,25,23,20,18,16,15,14,12,10,9,8,7,6,5,5,6,8,10,12,14,15,18,20,22,24,26,8,7,5],
"angular_size": [65,62,60,58,52,40,38,34,30,28,27,25,24,22,20,18,15,15,17,19,21,22,28,30,35,38,45,50,55,65,67,70]
})
# ========== 2. 数据预处理 ==========
# 自变量:days(无需标准化,已是连续等距值)
X = data["days"].values.reshape(-1, 1)
# 双因变量:angular_distance + angular_size
y = data[["angular_distance", "angular_size"]].values
# 标准化因变量(提升模型拟合效果)
scaler_y = StandardScaler()
y_scaled = scaler_y.fit_transform(y)
# ========== 3. 构建多输出回归模型 ==========
# 用SVR作为基础模型,MultiOutputRegressor实现多因变量同时拟合
base_model = SVR(kernel="rbf", gamma="scale") # rbf核拟合非线性U型趋势
multi_model = MultiOutputRegressor(base_model)
multi_model.fit(X, y_scaled)
# 预测(标准化后的值 → 反标准化回原始单位)
y_pred_scaled = multi_model.predict(X)
y_pred = scaler_y.inverse_transform(y_pred_scaled)
# ========== 4. 计算拟合优度 R²(评估两个因变量的拟合效果) ==========
r2_distance = r2_score(data["angular_distance"], y_pred[:, 0])
r2_size = r2_score(data["angular_size"], y_pred[:, 1])
# ========== 5. 双轴可视化(核心!直观展示同步变化规律) ==========
plt.rcParams['font.sans-serif'] = ['WenQuanYi Zen Hei']
fig, ax1 = plt.subplots(figsize=(10, 6))
# 左轴:角距离(°)→ 蓝色
color1 = 'royalblue'
ax1.set_xlabel('观测天数(第0天=1610.8.15)', fontsize=12)
ax1.set_ylabel('金星-太阳角距离 (°)', color=color1, fontsize=12)
ax1.scatter(data["days"], data["angular_distance"], color=color1, label='观测角距离', s=50)
ax1.plot(data["days"], y_pred[:, 0], color=color1, linestyle='--', linewidth=2, label=f'拟合角距离 (R²={r2_distance:.4f})')
ax1.tick_params(axis='y', labelcolor=color1)
# 右轴:角大小(角秒)→ 红色(双轴共享x轴:天数)
ax2 = ax1.twinx()
color2 = 'darkred'
ax2.set_ylabel('金星角大小 (角秒)', color=color2, fontsize=12)
ax2.scatter(data["days"], data["angular_size"], color=color2, label='观测角大小', s=50)
ax2.plot(data["days"], y_pred[:, 1], color=color2, linestyle='--', linewidth=2, label=f'拟合角大小 (R²={r2_size:.4f})')
ax2.tick_params(axis='y', labelcolor=color2)
# 标题与图例
plt.title('伽利略金星数据多输出回归:天数 vs 角距离+角大小(日心说规律验证)', fontsize=14)
# 合并两个轴的图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper right', fontsize=10)
plt.grid(alpha=0.3)
plt.savefig('multi_output_regression_days.png', dpi=150, bbox_inches='tight')
plt.close()
# ========== 6. 输出核心结果 ==========
print("="*85)
print("多输出回归结果:天数 → 角距离 + 角大小")
print("="*85)
print(f"角距离 拟合优度 R² = {r2_distance:.4f} → 趋势拟合度极高")
print(f"角大小 拟合优度 R² = {r2_size:.4f} → 趋势拟合度极高")
print("="*85)
print("关键结论:两个因变量随天数呈现同步U型变化 → 完全符合日心说轨道规律!")
- 两个因变量随天数呈现同步U型变化
- 有周期性
- 尤其是 角大小
- 如果金星围着地球转动
- 那么 角大小 就不会有变化
- 地球不是天体的中心
- 角大小回归了!!!
- 伽利略没有把观测数据藏起来
- 而是用数据说话 写成了
- 《星际信使》(1610年)
- 《关于托勒密和哥白尼两大世界体系的对话》(1632年)
- 手绘观测图+文字描述
- 把月球表面、木星卫星的位置、金星相位的变化
- 用精确的图画和文字记录下来
- 让读者能直观看到
- 定量数据支撑
- 公布木星卫星的公转周期、月球山脉的高度估算值
- 用“数字”代替“猜想”
- 逻辑推导
- 将观测数据和日心说模型对比
- 证明日心说能完美解释所有观测现象
- 而地心说无法解释金星相位和木星卫星的运动
- 当时反对日心说的人有一个核心质疑
如果地球在绕太阳公转,为什么地上的物体不会被甩出去?
-
伽利略用惯性原理回答
- 地球和地上的物体一起运动
- 物体具有和地球相同的运动惯性
- 所以不会被甩出去
- 就像单摆的摆球会跟着支架一起运动
- 不会因为支架移动而停止摆动
-
单摆的周期性运动
- 也让伽利略更易理解
天体的公转(比如地球绕太阳)
本质上也是一种“惯性主导的周期性运动”
- 不需要“上帝推动”来维持
- 这直接动摇了地心说的神学基础
Philosophy is written in this grand book, the universe, which stands continually open to our gaze. But it cannot be understood unless one first learns to comprehend the language and recognize the letters in which it is composed. It is written in the language of mathematics, and its characters are triangles, circles, and other geometric figures, without which it is humanly impossible to understand a single word of it; without these, one wanders about in a dark labyrinth。
哲学写在那本永远在我们眼前展开的巨著之中 —— 我指的是宇宙。但除非先学会理解它所用的语言、认识它书写的字符,否则无法读懂它。它是用数学语言写成的,字符是三角形、圆形及其他几何图形;没有这些,人就不可能理解其中任何一个字;没有这些,人只能在黑暗的迷宫里徒劳徘徊。
- 神学 是当时主流的认知
- 把自己的研究公布出来
- 有巨大危险
- 伽利略迎战教皇的策略
- 不是正面对抗
- 而是以退为进
- 表面服从
- 暗中坚守科学真理
- 通过妥协保住性命
- 继续科学研究
- 他的伟大之处在于
- 在宗教裁判所的阴影下
- 依然坚持 "我可以被迫沉默,但真理不会因此消失" 的信念
-
这不仅是个人的胜利
- 更是人类理性对抗权威的里程碑
- 证明了科学探索的精神
- 即使在最黑暗的时代
- 也能找到继续前行的道路
-
坚持日心说
- 70岁以后余生被软禁
- 伽利略 观察天体运行规律
- 让数据自己说话
- 把自然哲学
- 逐渐变成了 物理学
- 为后来牛顿用万有引力定律统一天地运动规律
- 奠定了最核心的哲学基础
- 今天 不言自明的 日心说
- 经历的 很多前辈的流血 甚至 牺牲
- 我们今天都知道
- 一个太阳回归年
- 随着 时间往前
- 一年四季 春夏秋冬
- 符合这个 规律 回归
- 那 有没有 不随着时间 回归
- 而是 指数级爆炸的呢?🤔
- 下次再说!👋
- 那 有没有 不随着时间 回归
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。


















