微积分实验:Python数值计算与MATLAB对比,从原理到实践
2026/8/27 22:11:08 网站建设 项目流程

1. 项目缘起:为什么数学实验课需要“微积分实验”?

刚拿到“数学实验2:微积分实验”这门课的任务时,很多同学可能会有点懵。我们不是已经在《高等数学》或《数学分析》里学了一堆极限、导数、积分了吗?为什么还要专门开一门实验课,用计算机来“做”微积分?这恰恰是这门课最核心的价值所在,也是我作为过来人,想跟大家分享的第一个关键认知:理论学习和计算实践之间,存在一道巨大的鸿沟,而这道鸿沟,正是现代科学研究和工程应用中最常踩的坑。

回想我们学微积分的时候,大部分精力花在了什么上?花在了手算极限、求导、积分,以及背诵各种复杂的公式和技巧上。比如,一个稍微复杂点的有理函数积分,可能需要拆项、配方、三角换元等一系列操作,算上半天,最后还可能因为一个正负号出错而前功尽弃。这在学习阶段是必要的思维训练,但在真实世界中,我们面对的函数可能来自实验数据拟合、来自复杂的物理模型、来自金融市场的随机过程,它们往往没有“漂亮”的解析表达式,或者表达式复杂到人力根本无法处理。

这时,计算机的价值就凸显出来了。“微积分实验”这门课,本质上是一门“桥梁课”。它的目标不是教你新的微积分理论(那是理论课的任务),而是教你如何将你已经学过的微积分理论,转化为计算机可以理解和执行的计算任务,并学会解读计算机给出的结果。你会从“纸笔演算者”转变为“计算方案的设计者和结果的分析者”。这个转变,对于未来无论你是想从事算法研究、数据分析、量化金融,还是任何涉及建模的工程领域,都至关重要。

举个最简单的例子:理论告诉你,函数在某点的导数定义了切线斜率。但给你一个由成千上万个离散数据点构成的曲线(比如股票价格走势、传感器信号),你怎么求它在任意时刻的“变化率”?理论公式用不上了,你必须借助数值微分的方法。计算机算出来的“导数”和理论上的导数是一回事吗?在什么条件下可以近似?误差有多大?这些问题的答案,就是这门实验课要带你探索的。

所以,别把这门课当成是《高等数学》的附属或重复。它是你第一次系统性地,以解决实际问题为导向,去重新审视和运用微积分工具。接下来,我将结合常见的实验模块,拆解其中的核心环节、技术选型逻辑以及那些容易踩坑的细节。

2. 实验环境搭建:选Python还是MATLAB?这是个问题

几乎所有学校的数学实验课,都会面临一个首要的抉择:用什么工具?常见的选择集中在MATLAB和Python(科学计算栈)之间。这里没有绝对的好坏,只有适合与否。我结合自己的使用经验和工业界的趋势,给大家做一个深度的对比和选型分析,这本身就是一个重要的“实验前思考”。

2.1 MATLAB:为数学计算而生的“专业选手”

MATLAB(Matrix Laboratory)顾名思义,就是矩阵实验室。它的设计初衷就是为了方便进行矩阵运算和数值计算。

优势分析:

  1. 开箱即用,集成度高:安装一个MATLAB,你就拥有了一个强大的数值计算环境、一个还不错的编程语言(M语言)、一个可视化工具和一个简易的IDE。对于数学实验这种特定场景,你几乎不需要额外配置任何东西。它的语法非常贴近数学表达,比如解线性方程组A\b,求特征值eig(A),写起来直观。
  2. 工具箱生态强大:MATLAB拥有官方维护的、质量极高的各类工具箱(Toolbox)。对于微积分实验,Symbolic Math Toolbox(符号计算工具箱)Curve Fitting Toolbox(曲线拟合工具箱)几乎是神器。符号计算可以让你进行公式推导、求解析导数和积分,这对于验证数值计算的结果、理解理论非常有帮助。
  3. 文档和教学资源成熟:由于在高校和研究所历史悠久,MATLAB相关的教材、实验指导书、校内帮助文档非常丰富。很多实验的直接示例代码可能就是MATLAB写的,上手快。

劣势与考量:

  1. 商业软件与成本:这是最大的门槛。正版MATLAB价格昂贵,虽然学校通常会提供校园版授权,但一旦离开校园环境,个人使用成本很高。这会影响你未来技能的可持续性。
  2. 语言生态相对封闭:M语言的应用场景基本局限于MATLAB自身生态。虽然它能调用一些其他语言的库,但不如Python灵活。在当今数据科学、机器学习、Web开发融合的趋势下,MATLAB显得有些“专”但不够“广”。
  3. 社区与开源:虽然也有社区,但其活跃度和开源库的丰富性远不及Python。遇到复杂或小众的问题,寻找解决方案可能更困难。

2.2 Python + 科学计算栈:自由灵活的“全能战士”

Python本身是一门通用编程语言,但借助几个核心的科学计算库(NumPy, SciPy, Matplotlib, SymPy),它能构建起不输MATLAB的数学实验环境。

优势分析:

  1. 完全免费与开源:这是压倒性的优势。Anaconda发行版可以一键安装几乎所有你需要的科学计算库,没有任何授权费用。你的实验代码可以在任何装有Python的电脑上运行,便于分享和协作。
  2. 生态无限广阔:你学会了Python和这些科学计算库,等于打开了一扇通往数据科学(pandas, scikit-learn)、机器学习(TensorFlow, PyTorch)、网络爬虫、自动化脚本等无数领域的大门。技能的可迁移性极强。
  3. 强大的社区支持:任何你遇到的问题,几乎都能在Stack Overflow、GitHub或中文技术社区找到海量的讨论和解决方案。学习资源(如官方文档、博客、视频教程)也是爆炸式增长。
  4. 与现代工作流无缝集成:你可以用Jupyter Notebook进行交互式实验和报告撰写(类似MATLAB的Live Script),代码和图文混排,非常适合作为实验报告载体。也可以轻松地将计算模块集成到更大的软件项目中。

劣势与考量:

  1. 初始配置稍显复杂:虽然Anaconda简化了大部分工作,但比起MATLAB的一体化安装,仍需要了解“库”的概念。不同库的API需要单独学习(如NumPy的数组操作、SciPy的积分函数)。
  2. 符号计算能力:Python的SymPy库在符号计算上功能强大,但在一些极端复杂的符号运算、表达式化简方面,可能不如商业软件MATLAB的Symbolic Toolbox优化得那么好。但对于本科阶段的微积分实验,SymPy绝对绰绰有余。
  3. 性能“陷阱”:Python本身是解释型语言,在纯循环运算上较慢。但科学计算的核心(如矩阵运算)都是由底层C/Fortran实现的库(NumPy/SciPy)完成的,性能与MATLAB不相上下。关键是要避免用Python的for循环去处理大规模数组,一定要学会使用NumPy的向量化操作。

2.3 我的选择与实验建议

对于“电子科技大学数学实验2”这门课,我的核心建议是:如果课程没有强制规定,优先选择Python。

理由如下:

  1. 面向未来:你在这里花时间学习Python科学计算栈,是一项长期投资。这项技能在你后续的课程设计、科研训练、求职面试中都会持续发挥作用。
  2. 实验本质匹配:微积分实验的核心是“数值计算”和“结果可视化”,这正是NumPy、SciPy、Matplotlib的强项。SymPy足以应对符号计算验证的需求。
  3. 报告撰写友好:使用Jupyter Notebook,你可以将代码、计算结果(包括数据、图像)、文字分析全部整合在一个文件中,导出为PDF或HTML,这比在MATLAB里截图再粘贴到Word里要优雅和可复现得多。

注意:如果课程指导老师明确要求使用MATLAB,或者实验指导书是基于MATLAB编写的,那么请遵循课程要求。掌握MATLAB本身也是一项有价值的技能。理想情况下,你可以了解两者的基本操作,但深入精通其中一套。

环境搭建具体步骤(以Python为例):

  1. 安装Anaconda:访问Anaconda官网,下载并安装对应你操作系统的Python 3.x版本。Anaconda会自动安装Python、包管理器conda以及Jupyter Notebook等基础工具。
  2. 验证安装:打开终端(或Anaconda Prompt),输入python --versionjupyter notebook --version,确认安装成功。
  3. 创建实验专用环境(可选但推荐)conda create -n math_exp2 python=3.9创建一个名为math_exp2的纯净环境,然后激活它conda activate math_exp2。这可以避免不同项目间的库版本冲突。
  4. 安装核心库:在激活的环境中,运行pip install numpy scipy matplotlib sympy。如果需要更精美的绘图,可以再加pip install seaborn

至此,你的“微积分实验室”就搭建完毕了。

3. 核心实验模块深度拆解:从数值积分到微分方程

微积分实验的内容通常围绕几个核心模块展开。下面我将以Python科学计算栈为例,逐一拆解每个模块的实现原理、关键API、以及那些实验指导书上可能没写的“坑”

3.1 数值积分:如何让计算机“求面积”?

理论告诉我们,定积分是求曲边梯形的面积。计算机不会“求”,它只会“算”。数值积分的思想,就是用一系列容易计算面积的小图形(如矩形、梯形、抛物线形)去逼近那个曲边梯形。

3.1.1 常用方法对比与scipy.integrate选用指南

SciPy的integrate模块提供了多种积分器。选哪个?为什么?

  • quad:通用自适应积分(首选)

    • 原理:基于QUADPACK库,使用自适应辛普森法则或自适应高斯-克朗罗德法则。它会自动在函数变化剧烈的区间加密采样点,在平缓区间减少采样,在满足指定精度要求的同时,用最少的计算量得到结果。
    • 怎么用result, error = scipy.integrate.quad(func, a, b, args=(), full_output=0, ...)
    • 关键参数
      • epsabs:绝对误差容限。
      • epsrel:相对误差容限。默认是1.49e-8,对于大多数实验精度足够。
      • limit:子区间数量的上限,如果积分非常震荡或奇异,可能需要调高。
    • 何时用绝大多数情况下,这是你的第一选择。用于计算一维定积分,被积函数func需要是一个接受单个标量参数并返回标量的Python函数。
    import numpy as np from scipy import integrate def my_func(x): return np.exp(-x**2) # 高斯函数,其积分是sqrt(pi)/2 result, estimated_error = integrate.quad(my_func, -np.inf, np.inf) print(f"积分结果: {result}, 估计误差: {estimated_error}") print(f"理论值: {np.sqrt(np.pi)}")
  • fixed_quad:固定阶高斯求积

    • 原理:使用固定数量的高斯-勒让德积分节点和权重。精度由节点数n决定。
    • 特点:如果被积函数是光滑多项式,且阶数不超过2n-1,则可以精确积分。它不提供误差估计
    • 何时用:当你明确知道被积函数非常光滑,且需要快速、确定性的计算时。或者用于对比不同阶数下的精度变化。
  • trapz,simps:对离散数据的积分

    • 原理trapz是梯形法则,simps是辛普森法则。它们不对函数进行调用,而是直接对给定的离散数据点(x, y)进行积分。
    • 何时用:当你的被积函数不是解析式,而是一组实验测量或模拟得到的数据点(x_i, y_i)时,必须用这两个。
    • 坑点x可以是等间距或非等间距。对于非等间距,trapz可以直接用,simps则需要设置参数even='first''last',或者使用scipy.integrate.simpson(新版推荐)。
    # 假设我们有一组实验数据 x_data = np.linspace(0, 10, 100) # 可能非等间距 y_data = np.sin(x_data) + np.random.normal(0, 0.05, 100) # 带噪声的正弦 # 梯形法则积分 integral_trapz = np.trapz(y_data, x_data) # 辛普森法则积分 (SciPy 1.9+ 推荐用 simpson) integral_simps = integrate.simpson(y_data, x=x_data)

3.1.2 实操中的大坑:奇异积分与无穷限积分

这是实验报告里最容易出错的地方。

  1. 端点奇异性:比如积分∫_0^1 1/sqrt(x) dx,在x=0处函数值趋于无穷。直接调用quad(my_func, 0, 1)可能会失败或警告。

    • 解决方案:利用quadpoints参数,指明奇点位置。quad(func, 0, 1, points=[0])。实际上,对于幂律奇点x^a(a>-1),quad通常能自动处理,但显式声明更安全。
  2. 无穷限积分:如上面高斯积分的例子∫_{-∞}^{∞} e^{-x^2} dx

    • 解决方案quad直接支持无穷限,用np.inf-np.inf作为积分上下限即可。背后的原理是进行了变量变换。
  3. 震荡函数的积分:如∫_0^{∞} sin(x)/x dx(狄利克雷积分)。这类积分收敛很慢,直接算可能效率低或不准。

    • 解决方案:使用quad时,可以尝试增大limit参数。或者,利用数学知识将其转化为有限区间积分(例如通过变量替换)。更专业的工具是scipy.integrate.quad_vec(用于向量值函数)或考虑使用专门针对震荡积分的算法(如scipy.integrate.romb的变体,但不如quad通用)。

实验心得:每次进行数值积分后,务必关注quad返回的第二个值(误差估计)。如果误差估计值与你期望的精度相差甚远(比如你希望1e-6,但误差是1e-3),说明计算可能有问题,需要检查被积函数定义是否正确、是否存在奇点、或者是否需要调整积分参数。

3.2 数值微分:如何从离散数据中捕捉“变化率”?

数值微分比数值积分更“脆弱”,因为微分会放大数据中的噪声。实验中最常见的是两类问题:1) 给定函数f(x)的解析式,求其在某点的导数值;2) 给定一组离散数据点(x_i, y_i),求其近似导函数。

3.2.1 基于函数解析式的微分

如果你有干净的解析式,求导数的黄金法则是:尽可能使用符号微分得到精确表达式,再代入数值计算。

import sympy as sp x = sp.symbols('x') f_sym = sp.sin(x**2) * sp.exp(-x) # 定义一个符号表达式 df_sym = sp.diff(f_sym, x) # 符号求导,得到精确的导数表达式 print(f"导函数表达式: {df_sym}") # 将符号表达式转换为可用于数值计算的函数 f_num = sp.lambdify(x, f_sym, 'numpy') df_num = sp.lambdify(x, df_sym, 'numpy') x_val = 2.0 print(f"在 x={x_val} 处的函数值: {f_num(x_val)}") print(f"在 x={x_val} 处的导数值(精确): {df_num(x_val)}")

为什么优先用符号微分?因为数值微分(即使方法再高明)本质上是一种近似,存在截断误差和舍入误差。而符号微分给出的是数学上精确的导数公式,在代入具体数值时,只有一次浮点运算的舍入误差,精度最高。

3.2.2 基于离散数据的微分(这才是难点和重点)

当只有数据点(x_i, y_i)时,我们无法求“极限”,只能做“差分”。核心思想是用差分商(Δy/Δx)来近似导数。

  • 中心差分法(推荐)f'(x_i) ≈ (y_{i+1} - y_{i-1}) / (x_{i+1} - x_{i-1})

    • 优点:截断误差阶为O(h²),比前向或后向差分(O(h))精度高一阶。
    • 缺点:无法用于第一个和最后一个数据点。
    • 实现:可以用NumPy向量化操作快速实现。
      x = np.array([...]) # 假设已排序 y = np.array([...]) h = x[1:] - x[:-1] # 步长数组,可能非均匀 # 中心差分 (内部点) dydx_central = (y[2:] - y[:-2]) / (x[2:] - x[:-2]) # 处理边界:用前向/后向差分 dydx = np.zeros_like(y) dydx[1:-1] = dydx_central dydx[0] = (y[1] - y[0]) / (x[1] - x[0]) # 前向 dydx[-1] = (y[-1] - y[-2]) / (x[-1] - x[-2]) # 后向
  • 使用SciPy的梯度函数np.gradient是更通用和方便的选择。

    • 原理:对于内部点使用中心差分,对于边界点使用前向/后向差分。它自动处理非均匀网格
    • 用法dydx = np.gradient(y, x)。如果x是等间距的,可以简写为np.gradient(y, spacing)
    • 注意np.gradient返回的数组长度与y相同。

3.2.3 噪声数据的微分:平滑是王道

如果数据y_i带有显著的测量噪声(实验数据常态),直接对原始数据差分,得到的导数会充满剧烈的震荡(噪声被放大)。

解决方案:先平滑,再微分。

  1. 滑动平均:简单但有效,适用于轻度噪声。
  2. Savitzky-Golay滤波器(神器):本质是用一个局部多项式对数据进行最小二乘拟合,然后用这个拟合多项式在中心点的导数作为该点的导数值。它能在有效平滑噪声的同时,更好地保留信号的原始特征(如峰值宽度)。
    from scipy.signal import savgol_filter # 平滑数据 window_length = 15 # 滑动窗口长度,必须为正奇数 polyorder = 3 # 拟合多项式阶数,必须小于window_length y_smooth = savgol_filter(y, window_length, polyorder) # 对平滑后的数据求导 (Savitzky-Golay滤波器可以直接输出导数) dydx_smooth = savgol_filter(y, window_length, polyorder, deriv=1, delta=x[1]-x[0])
    参数选择经验window_length大约为数据主要特征宽度(如一个峰的半高宽)对应的点数。polyorder通常取2或3。需要通过实验调整,在平滑度和特征保持间取得平衡。

实验心得:在实验报告中处理离散数据微分时,一定要绘制对比图:原始数据图、平滑后数据图、原始数据直接差分得到的导数图、平滑后数据差分(或Savitzky-Golay直接求导)得到的导数图。通过视觉对比,你能清晰地看到平滑处理如何“拯救”了你的导数计算结果,这是报告中的一个重要亮点。

3.3 常微分方程(ODE)数值解:模拟动态过程

微积分实验的另一大块内容是求解常微分方程(组)的初值问题。这对应着模拟各种动态过程:弹簧振子、种群增长、电路暂态过程等。SciPy的scipy.integrate.solve_ivp是现代求解器的首选。

3.3.1solve_ivp的核心工作流程

  1. 定义微分方程系统:必须将高阶ODE转化为一阶ODE方程组。例如,对于二阶方程y'' + ω²y = 0,令v = y',则系统变为:

    y' = v v' = -ω² * y

    在代码中,你需要定义一个函数,其输入是当前时间t和状态向量[y, v],输出是导数向量[y', v']

    def harmonic_oscillator(t, state, omega): y, v = state dydt = v dvdt = -omega**2 * y return [dydt, dvdt]
  2. 选择求解器(method)solve_ivp提供了多种算法,常用有:

    • 'RK45':默认选项,显式Runge-Kutta法(4/5阶),适用于大多数非刚性问题。
    • 'RK23':低阶Runge-Kutta,精度要求不高时可能更快。
    • 'DOP853':高阶(8阶)Runge-Kutta,精度高,但计算量更大。
    • 'Radau','BDF':适用于刚性问题(系统中不同变量变化速率差异巨大)。
  3. 调用求解器

    from scipy.integrate import solve_ivp omega = 2.0 t_span = (0, 10) # 积分时间区间 y0 = [1.0, 0.0] # 初始条件 [y(0), v(0)] sol = solve_ivp(harmonic_oscillator, t_span, y0, args=(omega,), method='RK45', dense_output=True, rtol=1e-6, atol=1e-9)
  4. 提取结果

    • sol.t:求解器实际计算的时间点(自适应步长,非均匀)。
    • sol.y:对应时间点的状态值(数组,每列是一个时间点的状态向量)。
    • sol.sol:一个可调用对象,用于获取任意时间点的插值解(因为dense_output=True)。例如y_at_5 = sol.sol(5.0)

3.3.2 精度控制与“刚性”问题识别

  • rtolatol:这是控制求解精度的两个最重要的参数。rtol是相对误差容限,atol是绝对误差容限。求解器会努力使局部误差估计值小于atol + rtol * abs(y)。通常,rtol设为1e-3到1e-6,atol可以设得更小(如1e-6或1e-9)。如果结果不理想,首先检查并收紧这两个容差。

  • 什么是“刚性”(Stiff)问题?直观感受是:当你使用RK45这类显式方法时,为了保证稳定性,求解器被迫将步长取得非常非常小,导致计算极其缓慢,甚至失败。而换用隐式方法(如Radau,BDF)后,计算速度恢复正常。

    • 典型特征:系统中同时存在变化极快和极慢的成分。例如,某些化学反应动力学方程、包含快速衰减瞬态过程的电路方程。
    • 如何判断:先用RK45试算,如果发现求解异常缓慢(sol.nfev函数调用次数巨大),或者直接报错(Required step size is less than spacing between numbers.),就应怀疑是刚性问题,换用method='Radau''BDF'

3.3.3 可视化与验证:相图与能量守恒

对于像弹簧振子这样的保守系统,数值解的质量可以通过检查能量是否守恒来验证。总能量E = 0.5*v^2 + 0.5*ω²*y²应该是一个常数。

在你的实验报告中,除了绘制位移y(t)和时间v(t)的曲线外,强烈建议绘制相图(y-v图)和能量随时间(或随状态)变化的图

# 计算能量 y_vals, v_vals = sol.y energy = 0.5 * v_vals**2 + 0.5 * omega**2 * y_vals**2 import matplotlib.pyplot as plt fig, axes = plt.subplots(1, 3, figsize=(15, 4)) axes[0].plot(sol.t, y_vals, label='Displacement y') axes[0].set_xlabel('Time') axes[0].set_ylabel('y') axes[0].legend() axes[0].set_title('Time Series') axes[1].plot(y_vals, v_vals) axes[1].set_xlabel('Displacement y') axes[1].set_ylabel('Velocity v') axes[1].set_title('Phase Portrait') axes[2].plot(sol.t, energy) axes[2].set_xlabel('Time') axes[2].set_ylabel('Total Energy') axes[2].set_title('Energy Conservation Check') plt.tight_layout() plt.show()

如果能量曲线是一条严格水平线,说明数值解非常精确。如果能量有缓慢的漂移或震荡,说明数值方法引入了微小的耗散或误差,这可以作为你分析不同求解器(RK45vsDOP853)或不同容差(rtol=1e-6vsrtol=1e-9)性能的定量依据。

4. 实验报告撰写心法:从“交作业”到“展示思考”

实验做完了,代码跑通了,图也画好了,最后一步——写报告——才是真正体现你理解深度和工程素养的地方。一份好的微积分实验报告,不应该只是代码和结果的堆砌,而应该是一个有逻辑的“技术故事”。

4.1 结构设计:讲一个完整的故事

  1. 问题重述与目标:用你自己的话简要说明本次实验要解决什么问题(例如,“本实验旨在通过数值方法,探究带阻尼受迫振动系统的稳态响应特性”)。明确实验目标。
  2. 原理简述:不要大段抄书。只写出你实现算法所依据的核心数学公式和思想。比如,做数值积分时,写下你采用的算法(如自适应辛普森法则)的基本思想,并给出其误差估计公式(如果知道)。这证明你理解工具背后的原理,而不是只会调包。
  3. 算法实现与关键代码:这是核心。不要贴全部代码。只展示最关键的函数定义、参数设置和算法核心循环部分。并对关键行添加注释,解释其作用。
    • 例如:展示你定义的微分方程函数def ode_system(t, state, params):,并说明每个状态变量的物理意义。
    • 例如:展示你调用solve_ivp时的关键参数设置,并解释为什么选择这个求解器(method='RK45')和这个容差(rtol=1e-8)。
  4. 结果展示与分析:这是报告的“肉”。
    • 图胜千言:精心设计你的图表。确保坐标轴有清晰的标签(含单位)、有图例、图形大小合适。一张图说明一个主要问题。
    • 对比实验:如果实验涉及不同方法或参数(比如不同积分方法、不同步长、不同平滑参数),一定要做对比。用表格或子图清晰地展示不同设置下的结果(积分值、误差、计算时间等)。
    • 定量分析:不要只说“A方法比B方法好”。要说“A方法在计算精度达到1e-6时,耗时仅为B方法的60%”,或者“当数据噪声标准差超过0.1时,直接差分的结果完全失真,而经Savitzky-Golay平滑后求导的结果仍能保持主要趋势”。
    • 误差分析:数值实验离不开误差讨论。误差来源是什么?是截断误差、舍入误差,还是数据噪声?你是如何估计或控制这些误差的?(例如,quad返回的误差估计值,改变容差rtol观察结果变化)。
  5. 结论与思考:总结你的主要发现。更重要的是,提出**“如果…”**的思考。例如:“本次实验成功用四阶Runge-Kutta法模拟了单摆运动。但我发现,当初始角度很大时,模拟结果与线性近似解偏差明显。如果我想研究大角度下的精确周期,可能需要考虑采用更精确的数值方法,或者结合椭圆积分进行理论验证。” 这展现了你的延伸思考能力。

4.2 利用Jupyter Notebook提升报告效率与可复现性

强烈建议使用Jupyter Notebook来完成整个实验和报告撰写。它的“单元格”结构天然契合实验流程:

  • Markdown单元格:写标题、原理、分析文字。
  • Code单元格:写代码并执行,结果(输出、图表)直接显示在下方。
  • 流程清晰:你可以按“导入库 -> 定义函数 -> 运行实验1 -> 分析结果1 -> 运行实验2 -> 分析结果2 …”的顺序组织单元格,整个逻辑一目了然。
  • 可复现性:老师或同学拿到你的.ipynb文件,按顺序运行所有单元格,就能完全复现你的所有结果和图表,这是最高标准的实验报告。

最后,检查一遍你的报告:代码是否有注释?图表是否清晰自明?语言是否通顺专业?有没有错别字?这些细节,共同决定了一份报告是“优秀”还是“普通”。数学实验课锻炼的,正是这种将理论、计算、分析和表达结合起来的综合能力,这份能力,远比学会调用几个API函数重要得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询