Skip to content

Julia 会话插件

在 Liii STEM 中,您也可以通过插入 Julia 会话 的方式运行想要的 Julia 代码。

0 配置与加载

使用 Julia 会话前,需要确保在本地计算机安装了 Julia,并根据需要安装常用的科研与绘图工具包。

0.1 环境配置与包管理

第一步:安装 Julia

操作系统推荐安装方式
WindowsJulia 官网 下载标准安装包并默认安装。
macOS推荐使用 Homebrew 命令行安装:brew install julia
Linux使用发行版内置包管理器(如 apt/pacman),或从官网下载预编译的二进制包。

安装完成后,在系统终端中运行以下命令验证:

bash
julia --version

若终端返回类似 julia version 1.12.6 的版本号,说明 Julia 已安装成功且其可执行文件已加入系统环境变量 PATH

第二步:安装常用科研与绘图包

Julia 提供了极为好用的内置包管理器 Pkg。你可以直接在系统终端运行 julia 进入 REPL(交互式环境)进行安装,或者稍后在 Liii STEM 的 Julia 会话代码块中执行以下安装命令:

julia
using Pkg
Pkg.add([
    "Plots", "LaTeXStrings", "Symbolics", "Latexify",
    "DataFrames", "CSV", "StatsBase",
    "FFTW", "QuadGK", "ForwardDiff",
    "DifferentialEquations", "Optim", "LsqFit", "Interpolations"
])

温馨提示:首次导入(using)某个包时,Julia 会自动进行后台预编译,因此第一次运行可能会稍有延迟;预编译完成后,后续加载速度将得到成倍提升。

常用科学计算包一览:

领域分类推荐核心包核心功能简介
基础代数LinearAlgebra(标准库)高阶矩阵运算、奇异值分解(SVD)及解线性方程组
数据科学DataFramesCSV表格数据的高效处理、筛选、分组统计以及 CSV 读写
数理统计Statistics(标准库)、StatsBase均值、方差等基础指标计算与各种随机抽样方法
科学绘图PlotsLaTeXStrings二维与三维学术制图、图形导出以及 LaTeX 公式标注支持
微积分与信号QuadGKForwardDiffFFTW高精度数值积分、自动微分(AD)以及快速傅里叶变换
方程与优化DifferentialEquationsOptimLsqFit常微分/偏微分方程求解、非线性最优化与最小二乘拟合

0.2 会话创建与交互操作指南

进入会话

在 Liii STEM 模式工具栏中,点击 插入会话Julia 即可在文档正文中创建一个交互式的 Julia 代码块。

高效操作快捷键

Liii STEM 针对会话计算提供了高度优化的交互支持,以下是日常编写 Julia 代码的核心操作:

交互需求触发方式与快捷键功能说明
执行并渲染Enter运行当前会话内的代码并立即生成排版输出
换行不执行Shift + Enter在当前会话中插入新行以编写多行长程序
多行输入模式焦点输入选项多行输入切换多行编辑状态,此时按回车只会换行,便于输入函数和循环
命令自动补全Tab快速补全变量名、函数名以及加载的包名称
行内帮助检索前缀 ? (如 ?cos)实时检索函数的使用手册、参数定义与用法示例

会话状态与增量复用

Liii STEM 的会话系统支持变量和状态的增量式传递

  • 在前文会话中定义过的变量、自定义函数或引入的第三方库,在后续任意会话中都可以无缝复用,无需重复声明或导入。
  • 重要提示:如果重新打开文档,或者调整了前文的代码,请保证后续依赖相关变量的会话按照从上往下的顺序重新执行,以确保执行状态一致。

相关阅读:关于会话系统的完整机制(字段编辑、折叠、全部求值、执行状态等),请参阅 《Liii STEM 作为统一接口:支持 Python,AI 及多语言计算环境》

1 Julia 基础指南

1.1 基础数值计算

Julia 具备极高的数值计算性能,可以直接作为高精度科学计算器使用:

julia
1 + 2 * 3

sqrt(2)

sin(pi / 3)

z = 1 + 2im
abs(z)

r = 3 // 7
float(r)

setprecision(80) do
BigFloat(pi)
end

核心语法与函数说明:

代码含义
im虚数单位
//构造有理数
BigFloat高精度浮点数
setprecision临时设置浮点精度

1.2 向量、矩阵与广播运算

在 Julia 中,向量与矩阵的声明与书写方式非常贴近直观的数学表达式:

julia
v = [1, 2, 3, 4]
A = [1 2; 3 4]

[37]\left[ \begin{array}{c} 3\\ 7 \end{array} \right]

Julia 引入了优雅的广播机制(Broadcasting),在运算符或函数名后添加点号 . 即可实现逐元素(Element-wise)运算。这在对数组中的每个元素应用函数时非常高效:

julia
x = range(0, 0.1 * pi, length=5)
y = sin.(x)

[0.00.078459095727844940.156434465040230870.23344536385590540.3090169943749474]\left[ \begin{array}{c} 0.0\\ 0.07845909572784494\\ 0.15643446504023087\\ 0.2334453638559054\\ 0.3090169943749474 \end{array} \right]

在上述代码中,sin.(x) 会对向量 x 中的每一个元素分别计算正弦值。如果直接调用 sin(x),Julia 会尝试将整个向量作为一个整体对象传入,这通常会导致类型错误或不符合预期的矩阵函数运算。因此,在处理数组时,请务必注意点号 . 的使用。

2 符号计算

Liii STEM 完美支持 Julia 的符号计算输出。借助 SymbolicsLatexifyLaTeXStrings 等强大的符号计算与排版工具包,您可以在会话中直接生成排版精美、适合学术论文和教学文档展示的 LaTeX 数学表达式。

2.1 基础符号表达式

在符号计算中,我们首先需要定义符号变量,并构建代数表达式:

julia
using Symbolics, Latexify, LaTeXStrings

@variables x y a b c
expr = (a + b)^2 / c + sin(x)^2 + cos(x)^2
simplify(expr)

c+(a+b)2c\frac{c + (a + b)^2}{c}

2.2 展开、化简与替换

符号表达式的展开与化简是代数推导的常用操作。此外,我们还可以使用 substitute 进行变量数值替换:

julia
@variables x y
expr = (x + y)^3
expand(expr)

x3+3 x2 y+3 y2 x+y3x^3 + 3 ~ x^2 ~ y + 3 ~ y^2 ~ x + y^3

julia
expr2 = (x^2 - y^2) / (x - y)
simplify(expr2)

x+yx + y

进行变量数值替换:

julia
substitute(x^2 + 2 * x + 1, Dict(x => 3))

1616

2.3 微分与方程表达

在符号计算中,求导与微分方程的构建同样非常直观。我们可以定义微分算子并对表达式求导:

julia
@variables x
D = Differential(x)
expr = sin(x) * x^2
expand_derivatives(D(expr))

2 x sin(x)+x2 cos(x)2 ~ x ~ \sin (x) + x^2 ~ \cos (x)

计算二阶导数:

julia
expand_derivatives(D(D(expr)))

2 sin(x)+4 x cos(x)x2 sin(x)2 ~ \sin (x) + 4 ~ x ~ \cos (x) - x^2 ~ \sin (x)

2.4 矩阵与 LaTeX 渲染

除了标量代数式,Symbolics 同样支持符号矩阵的运算与 LaTeX 格式化渲染:

julia
@variables a b c d
M = [a b; c d]
latexify(M)

[abcd]\left[ \begin{array}{cc} a & b\\ c & d \end{array} \right]

直接渲染原生 LaTeX 字符串:

julia
L"\int_{0}^{\infty} e^{-x^2}\,dx = \frac{\sqrt{\pi}}{2}"

0ex2dx=π2\int_0^{\infty} e^{- x^2} \hspace{0.17em} d x = \frac{\sqrt{\pi}}{2}

这些功能非常适合在学术报告和正文中直观展示复杂的公式推导、矩阵形式、微分方程以及积分恒等式。

3 科学绘图

Julia 拥有极其丰富的可视化生态,其中 Plots.jl 是最常用的绘图框架。通过 Plots.jl,您可以在会话中直接生成二维曲线、散点图、误差棒、热图、等高线图以及三维曲面图等。所有绘图结果都会自动、无缝地嵌入到 Liii STEM 文档中,非常适合制作高质量的实验报告、学术论文和教学教程。

温馨提示:如果首次加载绘图包时速度较慢,这是因为 Julia 正在后台进行预编译,后续调用将会非常迅速。

3.1 基础函数图像

绘制一条标准的一维正弦波曲线:

julia
using Plots

x = range(-2 * pi, 2 * pi, length=400)
y = sin.(x)

plot(x, y,
    label="sin(x)",
    xlabel="x",
    ylabel="y",
    title="Sine Wave",
    linewidth=2)

sine

3.2 多曲线对比

在同一张图表中绘制多条曲线进行对比,是学术制图的常见需求:

julia
x = range(0, 10, length=500)

plot(x, exp.(-0.2 .* x) .* cos.(2 * pi .* x), label="γ = 0.2")
plot!(x, exp.(-0.5 .* x) .* cos.(2 * pi .* x), label="γ = 0.5")
plot!(xlabel="time", ylabel="amplitude", title="Damped Oscillation")

dosc

核心绘图命令与修饰符说明:

命令作用
plot创建并绘制一张新图表
plot!在当前活动图表上追加绘制曲线或修改图表属性(带 ! 的方法会修改原图)
scatter创建并绘制一张新散点图
scatter!在当前活动图表上追加绘制散点

3.3 散点图与误差棒

在实验数据可视化中,带误差棒的散点图是展示测量不确定度的标准方式:

julia
using Random, Statistics, Plots

Random.seed!(1)
x = 1:8
y = [1.0, 1.4, 1.9, 2.5, 3.0, 3.3, 3.8, 4.1]
yerr = 0.15 .+ 0.05 .* rand(length(x))

scatter(x, y,
    yerror=yerr,
    label="measurement",
    xlabel="sample index",
    ylabel="response",
    title="Measurement with Error Bars")

meb

3.4 热图与等高线图

热图(Heatmap)非常适合展示二维参数扫描结果,例如频率—功率分布、空间物理场分布或相图:

julia
using Plots

x = range(-3, 3, length=150)
y = range(-3, 3, length=150)
z = [sin(xi^2 + yi^2) / (1 + xi^2 + yi^2) for yi in y, xi in x]

heatmap(x, y, z,
    xlabel="x",
    ylabel="y",
    title="2D Heatmap",
    colorbar_title="intensity")

heatmp

对应的等高线图(Contour Plot)绘制:

julia
contour(x, y, z,
    xlabel="x",
    ylabel="y",
    title="Contour Plot",
    levels=20)

ctp

3.5 三维曲面图

利用 surface 命令可以非常直观地展示三维空间中的函数曲面:

julia
using Plots

x = range(-2, 2, length=80)
y = range(-2, 2, length=80)
z = [exp(-(xi^2 + yi^2)) * cos(4 * xi) * sin(4 * yi) for yi in y, xi in x]

surface(x, y, z,
    xlabel="x",
    ylabel="y",
    zlabel="z",
    title="3D Surface")

suf

3.6 频谱图示例

结合快速傅里叶变换包 FFTWPlots,可以快速对信号进行频域分析并绘制频谱图:

julia
using FFTW, Statistics, Plots

fs = 2000.0
t = 0:1/fs:1-1/fs
signal = sin.(2 * pi * 80 .* t) .+ 0.5 .* sin.(2 * pi * 240 .* t)

Y = fft(signal .- mean(signal))
n = length(signal)
freq = (0:n-1) .* fs / n
amp = abs.(Y) ./ n
idx = 1:div(n, 2)

plot(freq[idx], 2 .* amp[idx],
    xlabel="Frequency (Hz)",
    ylabel="Amplitude",
    label="spectrum",
    title="Single-sided FFT Spectrum",
    xlim=(0, 500))

ssfs

3.7 微分方程解的绘图

在科学计算中,我们经常需要将微分方程的数值解进行可视化。以下展示经典的 Lotka-Volterra(捕食者-猎物)模型的求解与绘图:

julia
using DifferentialEquations, Plots

function lotka!(du, u, p, t)
    α, β, δ, γ = p
    du[1] = α*u[1] - β*u[1]*u[2]
    du[2] = δ*u[1]*u[2] - γ*u[2]
end

u0 = [1.0, 1.0]
p = (1.5, 1.0, 1.0, 3.0)
prob = ODEProblem(lotka!, u0, (0.0, 10.0), p)
sol = solve(prob, saveat=0.02)

plot(sol.t, hcat(sol.u...)',
    label=["prey" "predator"],
    xlabel="time",
    ylabel="population",
    title="Lotka-Volterra Model")

lvm

绘制对应的相空间轨迹图(Phase Portrait):

julia
U = hcat(sol.u...)
plot(U[1, :], U[2, :],
    xlabel="prey",
    ylabel="predator",
    label="phase trajectory",
    title="Phase Portrait")

pp

3.8 保存图片

在会话中,您可以直接将绘制的图表保存为本地文件,以便在其他地方使用:

julia
p = plot(1:10, rand(10), label="random")
savefig(p, "julia_plot.pdf")
savefig(p, "julia_plot.png")

在学术出版和正式报告中,强烈推荐将图表保存为 pdfsvg 等无损矢量格式,以确保任意放大下的清晰度;若用于网页展示或快速分享,则推荐保存为 png 格式。

4 科学计算示例

本节将深入展示 Julia 在科研与工程计算中最核心的数值计算能力。以下所有示例均可直接复制到 Liii STEM 的 Julia 会话中运行并即时查看结果。

4.1 线性代数:方程组、特征值与奇异值分解

首先引入 Julia 内置的线性代数标准库:

julia
using LinearAlgebra

求解经典的线性方程组 Ax=bAx = b

julia
A = [3.0 1.0 -1.0;
     2.0 4.0  1.0;
    -1.0 2.0  5.0]

b = [4.0, 1.0, 1.0]
x = A \ b
residual = norm(A * x - b)

计算矩阵的特征值与特征向量:

julia
E = eigen(A)
E.values
E.vectors

对矩阵进行奇异值分解(SVD):

julia
U, S, V = svd(A)
S

常用线性代数核心命令一览:

命令作用
A \ b求解线性方程组 Ax=b
det(A)行列式
inv(A)逆矩阵;数值计算中通常优先用 A \ b
eigvals(A)特征值
eigen(A)特征值与特征向量
svd(A)奇异值分解
norm(v)向量或矩阵范数

4.2 统计计算与随机数模拟

Julia 提供了强大的随机数生成器与统计分析工具,非常适合进行蒙特卡洛模拟和数据描述性统计:

julia
using Random, Statistics, StatsBase

Random.seed!(2026)
data = randn(1000) .+ 0.5

mean(data)
std(data)
median(data)
quantile(data, [0.25, 0.5, 0.75])

[0.14974061723486430.55579045116978241.200019184175632]\left[ \begin{array}{c} - 0.1497406172348643\\ 0.5557904511697824\\ 1.200019184175632 \end{array} \right]

计算带权重的加权平均数:

julia
weights = rand(1000)
weighted_mean = mean(data, Weights(weights))

0.5264657013643620.526465701364362

使用蒙特卡洛(Monte Carlo)方法估算圆周率 π\pi 的值:

julia
using Random, Statistics

Random.seed!(1)
N = 100_000
x = rand(N)
y = rand(N)
inside = (x .^ 2 .+ y .^ 2) .<= 1
π_est = 4 * mean(inside)

3.140563.14056

原理解析:在此示例中,mean(inside) 会自动将布尔数组中的 truefalse 隐式转换为 10 进行均值计算,从而高效地得到了落入四分之一圆内的样本比例。

4.3 数值积分与自动微分

使用 QuadGK 包进行高精度的一维数值积分(例如计算高斯积分):

julia
using QuadGK, ForwardDiff
f(x) = exp(-x^2)
val, err = quadgk(f, 0, Inf)

(0.8862269254527579,8.595134596701424e9)(0.8862269254527579, 8.595134596701424e-9)

借助 ForwardDiff 包,无需手动推导公式即可实现极高精度的自动微分(AD)求导:

julia
g(x) = x^2 * sin(x)
ForwardDiff.derivative(g, 1.0)

2.22324427548393282.2232442754839328

计算多元函数的梯度(Gradient):

julia
h(p) = (p[1] - 1)^2 + 2 * (p[2] + 1)^2
ForwardDiff.gradient(h, [0.0, 0.0])

[2.04.0]\left[ \begin{array}{c} - 2.0\\ 4.0 \end{array} \right]

数值积分与自动微分常用函数推荐:

方法适合场景
quadgk一维定积分、半无穷区间积分
ForwardDiff.derivative单变量函数导数
ForwardDiff.gradient多参数模型梯度
ForwardDiff.hessianHessian 矩阵、二阶优化分析

4.4 快速傅里叶变换与信号分析

快速傅里叶变换(FFT)是信号处理的核心算法。以下展示如何对包含多个频率成分的合成信号进行频谱分析:

julia
using FFTW, Statistics

fs = 1000.0 # 采样率 Hz
t = 0:1/fs:1-1/fs
signal = sin.(2 * pi * 50 .* t) .+ 0.4 .* sin.(2 * pi * 120 .* t)

Y = fft(signal .- mean(signal))
freq = (0:length(Y)-1) .* fs / length(Y)
amplitude = abs.(Y) ./ length(Y)

freq[1:10]
amplitude[1:10]

[0.01.02.03.04.05.06.07.08.09.0]\left[ \begin{array}{c} 0.0\\ 1.0\\ 2.0\\ 3.0\\ 4.0\\ 5.0\\ 6.0\\ 7.0\\ 8.0\\ 9.0 \end{array} \right]

[2.1833537989234865e171.0461770327316574e161.2138234047567224e161.360481461853514e161.0850876450785432e164.812248861135404e176.827131084801217e176.503387086741498e173.1654616068460594e173.000384822421584e17]\left[ \begin{array}{c} 2.1833537989234865 e - 17\\ 1.0461770327316574 e - 16\\ 1.2138234047567224 e - 16\\ 1.360481461853514 e - 16\\ 1.0850876450785432 e - 16\\ 4.812248861135404 e - 17\\ 6.827131084801217 e - 17\\ 6.503387086741498 e - 17\\ 3.1654616068460594 e - 17\\ 3.000384822421584 e - 17 \end{array} \right]

由于实数信号的频谱具有对称性,我们通常只需提取并绘制单边频谱:

julia
n = length(signal)
half = 1:div(n, 2)
freq1 = freq[half]
amp1 = 2 .* amplitude[half]

[4.366707597846973e172.0923540654633147e162.427646809513445e164.056118904078539e16]\left[ \begin{array}{c} 4.366707597846973 e - 17\\ 2.0923540654633147 e - 16\\ 2.427646809513445 e - 16\\ \vdots\\ 4.056118904078539 e - 16 \end{array} \right]

该方法在实际科研中应用极广,非常适合用于分析实验采样信号中的主频成分、识别周期性噪声、提取调制频率以及进行频谱图的可视化展示。

4.5 常微分方程求解

Julia 拥有世界上最顶级的微分方程求解生态(DifferentialEquations.jl)。以下示例展示如何求解一个经典的二阶阻尼谐振子动力学方程:

julia
using DifferentialEquations

function oscillator!(du, u, p, t)
    γ, ω0 = p
    du[1] = u[2]
    du[2] = -2γ * u[2] - ω0^2 * u[1]
end

u0 = [1.0, 0.0]
tspan = (0.0, 10.0)
p = (0.15, 2 * pi)

prob = ODEProblem(oscillator!, u0, tspan, p)
sol = solve(prob, Tsit5(), saveat=0.01)

t:[0.00.10.210.0],u:[1.00.00.99802870007989990.39393327776128580.99213044629565770.78513420530382740.223346831738658940.019358685410196863]t : \left[\begin{array}{c} 0.0\\ 0.1\\ 0.2\\ \vdots\\ 10.0 \end{array}\right], u : \left[\begin{array}{cc} 1.0 & 0.0\\ 0.9980287000798999 & - 0.3939332777612858\\ 0.9921304462956577 & - 0.7851342053038274\\ \ldots & \ldots\\ 0.22334683173865894 & 0.019358685410196863 \end{array}\right]

核心求解参数与函数说明:

代码含义
u[1]位移
u[2]速度
p模型参数
tspan积分时间范围
ODEProblem定义微分方程问题
solve数值求解

4.6 优化与参数估计

在科学研究和工程设计中,寻找函数极值与拟合实验参数是极常见的任务。以下展示如何使用 Optim 求解非线性最优化问题:

julia
using Optim

rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
result = optimize(rosenbrock, [-1.0, 2.0])

Optim.minimizer(result)
Optim.minimum(result)

4.263526919513479e104.263526919513479e-10

在实验数据处理中,如果需要对非线性模型进行最小二乘曲线拟合,可以使用 LsqFit 包:

julia
using LsqFit, Random

Random.seed!(1)
model(x, p) = p[1] .* exp.(-p[2] .* x) .+ p[3]

xdata = range(0, 5, length=50)
ydata = model(xdata, [2.0, 0.8, 0.2]) .+ 0.05 .* randn(length(xdata))

fit = curve_fit(model, xdata, ydata, [1.0, 1.0, 0.0])
fit.param

[1.99170487000817320.85178763651911050.22140759353567088]\left[ \begin{array}{c} 1.9917048700081732\\ 0.8517876365191105\\ 0.22140759353567088 \end{array} \right]

4.7 插值与重采样

当实验采集的数据点分布不均匀或存在缺失时,可以通过插值(Interpolation)算法将其重采样到均匀网格上,以便进行后续的对比、滤波或平滑绘图:

julia
using Interpolations

x = 0:0.5:10
y = sin.(x) .+ 0.1 .* randn(length(x))

itp = linear_interpolation(x, y)
xnew = 0:0.05:10
ynew = itp.(xnew)

[0.023461705058095050.081113758749202280.43760452921179077]\left[ \begin{array}{c} 0.02346170505809505\\ 0.08111375874920228\\ \vdots\\ - 0.43760452921179077 \end{array} \right]

5 数据表格与文件读写

在数据科学和实验分析中,高效地读取、处理和保存表格数据是必不可少的环节。Julia 提供了 DataFrames.jlCSV.jl 来实现类似 Python Pandas 的高效数据流操作。

5.1 读取 CSV 数据

从本地读取 CSV 文件并将其转换为 DataFrame 格式:

julia
using Pkg
Pkg.add(["CSV", "DataFrames"])

using CSV, DataFrames

df = CSV.read("data.csv", DataFrame)
first(df, 5)

5.2 数据筛选与新增列

对 DataFrame 进行列操作与条件筛选。例如,假设表格中包含 timesignal 两列,我们希望对信号进行去均值中心化,并筛选出特定时间段的数据:

julia
df.signal_centered = df.signal .- mean(df.signal)
df2 = filter(row -> row.time >= 0.0 && row.time <= 1.0, df)

5.3 分组统计

对数据进行分组聚合统计。例如,假设表格中包含分类列 group 和数值列 value,我们希望计算各组的均值与标准差:

julia
combine(groupby(df, :group), :value => mean, :value => std)

5.4 保存结果

将处理后的 DataFrame 重新保存为 CSV 文件:

julia
CSV.write("result.csv", df)

DataFrame 常用操作速查表:

需求推荐做法
只看前几行first(df, 5)
查看列名names(df)
新增一列df.newcol = ...
条件筛选filter(row -> 条件, df)
分组统计groupby + combine
保存表格CSV.write

6 综合案例:从模拟数据到拟合与绘图

为了帮助您融会贯通,本节提供了一个完整的科研实战案例:从零生成带有高斯噪声的指数衰减模拟实验数据,使用非线性最小二乘法拟合物理模型参数,并最终绘制出精美的实验测量点与拟合曲线对比图。

julia
using Pkg
Pkg.add(["Plots", "LsqFit", "Random", "Statistics"])

using Plots, LsqFit, Random, Statistics

Random.seed!(2026)

# 1. 生成模拟数据
model(x, p) = p[1] .* exp.(-p[2] .* x) .+ p[3]
xdata = range(0, 5, length=60)
true_p = [2.0, 0.75, 0.2]
y_clean = model(xdata, true_p)
ydata = y_clean .+ 0.08 .* randn(length(xdata))

# 2. 非线性最小二乘拟合
p0 = [1.0, 1.0, 0.0]
fit = curve_fit(model, xdata, ydata, p0)
p_est = fit.param

# 3. 计算拟合曲线
xfit = range(0, 5, length=300)
yfit = model(xfit, p_est)

# 4. 绘图
scatter(xdata, ydata,
    label="data",
    xlabel="time",
    ylabel="signal",
    title="Exponential Decay Fitting")
plot!(xfit, yfit,
    linewidth=2,
    label="fit")

edf

在会话中直接输出拟合得到的模型参数:

julia
p_est

[1.97362509357491530.77963122134743460.22283071386655806]\left[ \begin{array}{c} 1.9736250935749153\\ 0.7796312213474346\\ 0.22283071386655806 \end{array} \right]

这种一体化的编写方式非常适合撰写学术论文、实验报告或教学讲义:在同一个交互式会话中,数据生成、物理模型定义、非线性拟合、可视化展示以及定量结果输出一气呵成,极大地提升了科研工作的可复现性与排版效率。