AnyMath 文档
Notebook

冰上摩擦系数分析

本文是在Engee环境下对实验数据进行处理和分析的综合实例。 通过一个研究摩擦系数对温度的依赖性的具体例子,我们展示了处理数据的整个周期:从数据的统计描述到建立交互式可视化和制定实用的建议。

该研究的中心主题是分析两种根本不同情况下的摩擦系数行为:行人的冰摩擦和汽车轮胎在冰上的摩擦。 考虑了从+5°C到-80°C的温度范围,这涵盖了实践中遇到的大部分气候条件。

通过这一分析,我们展示了现代数据处理工具如何使不仅陈述事实,而且预测系统在各种条件下的行为成为可能,这是任何科学和技术活动的关键技能。

现在让我们继续示例本身,并考虑其中使用的库。

StatsBase是一个用于基本统计数据处理的库。 在我们的例子中,它用于计算摩擦系数的统计指标(平均值,标准偏差,中位数,分位数),以及计算行人和驾驶员的数据之间的相关性。

插值是数据插值的库。 我们使用它来创建基于离散实验点的平滑曲线,这使我们能够更好地可视化趋势并分析导数(摩擦系数的变化率)。

LaTeXStrings是一个用于在图形中处理LaTeX格式的库。 在它的帮助下,我们为轴签名添加了专业的数学符号,如μ(摩擦系数)和不同类型表面的索引,这增加了可视化的可读性和科学严谨性。

In [ ]:
Pkg.add("Interpolations")
using StatsBase, Interpolations, LaTeXStrings
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`

将离散度为5°c的-80°C至+5°c的温度范围用作初始数据。

数组 μ_iceμ_tire 它们包含两种情况下的摩擦系数实验值:冰上摩擦(行人模型)和汽车轮胎冰上摩擦。

阈值常数 HIGH_RISK_PEDESTRIAN, LOW_RISK_PEDESTRIAN, HIGH_RISK_DRIVERLOW_RISK_DRIVER 为不同类别的道路使用者界定高、中、低风险水平的界限。

In [ ]:
temperatures = collect(-80.0:5.0:5.0)
μ_ice = [
    0.091, 0.09, 0.089, 0.087, 0.085, 0.082, 0.08, 0.075, 0.07,
    0.065, 0.06, 0.055, 0.05, 0.04, 0.035, 0.03, 0.02, 0.005
]
μ_tire = [
    0.264, 0.263, 0.262, 0.261, 0.26, 0.258, 0.256, 0.253, 0.25,
    0.245, 0.24, 0.235, 0.23, 0.21, 0.19, 0.17, 0.15, 0.08
]

HIGH_RISK_PEDESTRIAN = 0.03
LOW_RISK_PEDESTRIAN  = 0.06
HIGH_RISK_DRIVER = 0.18
LOW_RISK_DRIVER  = 0.25;

下面的代码执行统计分析并确定关键安全温度。 首先,计算两种类型摩擦的主要统计指标:平均值,标准偏差,最小值,最大值,中位数和四分位数。 然后应用线性插值以基于实验点创建平滑曲线。 Find_critical_temp函数确定摩擦系数超过指定风险水平的阈值温度。 其结果是特定的温度边界分离了行人和司机的高危险和低危险条件。

In [ ]:
println("="^50)
println("摩擦系数统计分析")
println("="^50)

stats_ice = [
    mean(μ_ice), std(μ_ice), minimum(μ_ice), maximum(μ_ice),
    median(μ_ice), quantile(μ_ice, 0.25), quantile(μ_ice, 0.75)
]

stats_tire = [
    mean(μ_tire), std(μ_tire), minimum(μ_tire), maximum(μ_tire),
    median(μ_tire), quantile(μ_tire, 0.25), quantile(μ_tire, 0.75)
]

println("行人(冰):")
println("平均值:$(round(stats_ice[1],digits=4))")
println("标准。 偏差:$(round(stats_ice[2],digits=4))")
println("最小:$(stats_ice[3])at$(温度[argmin(µ_ice)])°C")
println("最大值:$(stats_ice[4])at$(温度[argmax(µ_ice)])°C")

println("司机(轮胎-冰):")
println("平均值:$(round(stats_tire[1],digits=4))")
println("标准。 偏差:$(round(stats_tire[2],digits=4))")
println("最小值:$(stats_tire[3])at$(温度[argmin(µ_tire)])°C")
println("最大值:$(stats_tire[4])at$(温度[argmax(µ_tire)])°C")

itp_ice = linear_interpolation(temperatures, μ_ice)
itp_tire = linear_interpolation(temperatures, μ_tire)
temp_smooth = range(minimum(temperatures), maximum(temperatures), length=200)
μ_ice_smooth = itp_ice.(temp_smooth)
μ_tire_smooth = itp_tire.(temp_smooth)

function find_critical_temp(temps, μ_vals, threshold)
    for i in 1:length(μ_vals)-1
        if (μ_vals[i] - threshold) * (μ_vals[i+1] - threshold) <= 0
            t1, t2 = temps[i], temps[i+1]
            μ1, μ2 = μ_vals[i], μ_vals[i+1]
            return t1 + (threshold - μ1) * (t2 - t1) / (μ2 - μ1)
        end
    end
    return NaN
end

crit_ped_high = find_critical_temp(temperatures, μ_ice, HIGH_RISK_PEDESTRIAN)
crit_ped_low = find_critical_temp(temperatures, μ_ice, LOW_RISK_PEDESTRIAN)
crit_drv_high = find_critical_temp(temperatures, μ_tire, HIGH_RISK_DRIVER)
crit_drv_low = find_critical_temp(temperatures, μ_tire, LOW_RISK_DRIVER)

println("\n" * "="^50)
println("临界安全温度")
println("="^50)
println("行人:")
println("  高风险(<HIGH HIGH_RISK_PEDESTRIAN):T<$(round(!isnan(crit_ped_high)? crit_ped_high:最小(温度),数字=1))°C")
println("  低风险(>LOW LOW_RISK_PEDESTRIAN):T>$(round(!isnan(crit_ped_low)? crit_ped_low:最大(温度),数字=1))°C")
println("领导:")
println("  高风险(<HIGH HIGH_RISK_DRIVER):T<$(round(!isnan(crit_drv_high)? crit_drv_high:最小(温度),数字=1))°C")
println("  低风险(>LOW LOW_RISK_DRIVER):T>$(round(!isnan(crit_drv_low)? crit_drv_low:最大(温度),数字=1))°C")
==================================================
СТАТИСТИЧЕСКИЙ АНАЛИЗ КОЭФФИЦИЕНТОВ ТРЕНИЯ
==================================================

Пешеходы (лёд):
Среднее: 0.0616
Станд. отклонение: 0.0265
Минимум: 0.005 при 5.0°C
Максимум: 0.091 при -80.0°C

Водители (шина-лёд):
Среднее: 0.2265
Станд. отклонение: 0.0498
Минимум: 0.08 при 5.0°C
Максимум: 0.264 при -80.0°C

==================================================
КРИТИЧЕСКИЕ ТЕМПЕРАТУРЫ БЕЗОПАСНОСТИ
==================================================
Пешеходы:
  Высокий риск (<0.03): T < -5.0°C
  Низкий риск (>0.06): T > -30.0°C

Водители:
  Высокий риск (<0.18): T < -7.5°C
  Низкий риск (>0.25): T > -40.0°C

曲线图1示出了冰摩擦系数对温度的依赖性。 该图以圆的形式显示了实验点以及通过它们以虚线曲线的形式绘制的线性插值。 红色和绿色的水平线分别显示高和低风险的阈值,垂直线标记摩擦系数越过这些阈值的临界温度。 背景上的网格使读取值更容易。

In [ ]:
p1 = plot(size=(800, 500), dpi=150, grid=true, gridalpha=0.3)
scatter!(p1, temperatures, μ_ice,
    label="实验数据",
    markersize=8, markercolor=:blue, markerstrokewidth=2,
    marker=:circle)
plot!(p1, temp_smooth, μ_ice_smooth,
    label="插值(线性)",
    linewidth=3, linecolor=:blue, alpha=0.7, linestyle=:dash)
hline!(p1, [HIGH_RISK_PEDESTRIAN, LOW_RISK_PEDESTRIAN],
    label=["高风险(μ<$HIGH_RISK_PEDESTRIAN)" "低风险(μ>$LOW_RISK_PEDESTRIAN)"],
    linestyle=:dot, linewidth=2, linecolor=[:red :green])
if !isnan(crit_ped_high)
    vline!(p1, [crit_ped_high],
        label="高风险边界:$(round(crit_ped_high,digits=1))°C",
        linestyle=:dashdot, linewidth=2, linecolor=:red, alpha=0.7)
end
if !isnan(crit_ped_low)
    vline!(p1, [crit_ped_low],
        label="低风险限额:$(round(crit_ped_low,digits=1))°C",
        linestyle=:dashdot, linewidth=2, linecolor=:green, alpha=0.7)
end
title!(p1, "图1:行人-冰的摩擦系数")
xlabel!(p1, "温度,°C")
ylabel!(p1, L"\mu_{冰-冰}")
display(p1)

分析图表使我们能够得出关于行人安全的重要结论。 摩擦系数有明显的随温度降低而增加的趋势. 在高于约-5°C的温度下,摩擦系数下降到高风险阈值以下,为运动创造危险条件。 只有在低于-30°C的显着冷却下才能实现安全条件(低风险),这表明行人在典型的冬季条件下具有显着的脆弱性。

图2显示汽车轮胎在结冰表面上的摩擦系数作为温度的函数的行为。 实验数据由正方形标记示出,通过该标记绘制平滑的内插曲线。 如上图所示,水平线表示驾驶员的高和低风险区域,垂直线对应于这些区域之间的临界转变温度。

In [ ]:
p2 = plot(size=(800, 500), dpi=150, grid=true, gridalpha=0.3)
scatter!(p2, temperatures, μ_tire,
    label="实验数据",
    markersize=8, markercolor=:orange, markerstrokewidth=2,
    marker=:square)
plot!(p2, temp_smooth, μ_tire_smooth,
    label="插值(线性)",
    linewidth=3, linecolor=:orange, alpha=0.7, linestyle=:dash)
hline!(p2, [HIGH_RISK_DRIVER, LOW_RISK_DRIVER],
    label=["高风险(μ<HIGH HIGH_RISK_DRIVER)" "低风险(μ>$LOW_RISK_DRIVER)"],
    linestyle=:dot, linewidth=2, linecolor=[:red :green])
if !isnan(crit_drv_high)
    vline!(p2, [crit_drv_high],
        label="高风险边界:$(round(crit_drv_high,digits=1))°C",
        linestyle=:dashdot, linewidth=2, linecolor=:red, alpha=0.7)
end
if !isnan(crit_drv_low)
    vline!(p2, [crit_drv_low],
        label="低风险限额:$(round(crit_drv_low,digits=1))°C",
        linestyle=:dashdot, linewidth=2, linecolor=:green, alpha=0.7)
end
title!(p2, "图2:驾驶员-轮胎在冰上的摩擦系数")
xlabel!(p2, "温度,°C")
ylabel!(p2, L"\mu_{冰胎}")
display(p2)

从图中可以看出,与鞋底相比,汽车轮胎在冰上的抓地力显着提高**。**即使在最恶劣的条件下(在正温度下),轮胎的摩擦系数仍然显着高于行人。 这表明在中度霜冻中汽车交通的相对安全性,而在相同条件下的行人处于高风险中。

图3提供了行人和驾驶员在单个坐标系中的摩擦系数的比较可视化。 带有圆圈的蓝线显示了徒步旅行的摩擦系数的依赖性,带有正方形的橙色线显示了轮胎对冰的类似依赖性。 两条曲线基于相同的温度值,这使得可以直接比较它们的行为。

In [ ]:
p3 = plot(size=(800, 500), dpi=150, grid=true, gridalpha=0.3)
plot!(p3, temperatures, μ_ice,
    label="行人",
    linewidth=3, color=:blue,
    marker=:circle, markersize=6)
plot!(p3, temperatures, μ_tire,
    label="司机",
    linewidth=3, color=:orange,
    marker=:square, markersize=6)
title!(p3, "图3:摩擦系数比较")
xlabel!(p3, "温度,°C")
ylabel!(p3, "摩擦系数,μ")
display(p3)

图4显示了轮胎在冰上的摩擦系数与作为温度函数的远足用冰的摩擦系数之比。 带有菱形标记的紫色线显示了在每个特定温度下汽车轮胎的抓地力超过鞋底抓地力的多少倍。 1.0级的黑色虚线表示条件边界,其中两种类型的耦合将相等。

In [ ]:
p4 = plot(size=(800, 500), dpi=150, grid=true, gridalpha=0.3)
ratio = μ_tire ./ μ_ice
plot!(p4, temperatures, ratio,
    label="M_领导者/m_行人的比率",
    linewidth=3, color=:purple,
    marker=:diamond, markersize=7)
hline!(p4, [1.0],
    label="等耦合(比率=1)",
    linestyle=:dash, linewidth=2, linecolor=:black, alpha=0.5)
mean_ratio = mean(ratio)
max_ratio = maximum(ratio)
min_ratio = minimum(ratio)
temp_max_ratio = temperatures[argmax(ratio)]
temp_min_ratio = temperatures[argmin(ratio)]
title!(p4, "图4:轮胎优于鞋底的优势")
xlabel!(p4, "温度,°C")
ylabel!(p4, "摩擦系数之比")
display(p4)

摩擦系数之比的分析揭示了一个有趣的非线性关系。 轮胎的最大优势是在5°C左右的温度下观察到的,在那里它们超过鞋底15倍以上。 随着温度进一步降低,这种优势逐渐降低,但仍然保持显着(在-80°C下约3倍)。 这表明汽车轮胎不仅具有最佳的绝对抓地力,而且与鞋底相比还表现出不同的温度敏感性。

曲线图5示出摩擦系数相对于温度的变化率,其是依赖性μ(T)的一阶导数。 蓝色和橙色线分别显示了当温度变化一度时,行人和驾驶员的摩擦系数变化有多快。 值乘以100以提高图形的可读性。 零水平线有助于直观地识别导数的增长和下降区域。

In [ ]:
p5 = plot(size=(800, 500), dpi=150, grid=true, gridalpha=0.3)
derivative_ice = diff(μ_ice_smooth) ./ diff(temp_smooth)
derivative_tire = diff(μ_tire_smooth) ./ diff(temp_smooth)
temp_mid = (temp_smooth[1:end-1] .+ temp_smooth[2:end]) ./ 2
plot!(p5, temp_mid, derivative_ice * 100,
    label="行人(冰)×100",
    linewidth=2, color=:blue)
plot!(p5, temp_mid, derivative_tire * 100,
    label="司机(轮胎-冰)×100",
    linewidth=2, color=:orange)
hline!(p5, [0.0],
    label="零变化",
    linestyle=:dash, linewidth=1, linecolor=:black, alpha=0.3)
max_rate_ice = maximum(derivative_ice) * 100
max_rate_tire = maximum(derivative_tire) * 100
temp_max_rate_ice = temp_mid[argmax(derivative_ice)]
temp_max_rate_tire = temp_mid[argmax(derivative_tire)]
title!(p5, "曲线图5:摩擦系数的变化率")
xlabel!(p5, "温度,°C")
ylabel!(p5, "变化率(dm/dT×100)")
display(p5)

额外的统计数据提供了对数据中的动态和关系的定量评估。 计算摩擦系数在整个温度范围内的百分比变化,计算行人和驾驶员指标之间的相关性,确定安全温度范围,并比较温暖和寒冷条件下的平均值。 这些指标以数值特征补充可视化分析。

In [ ]:
println("\n" * "="^50)
println("其他统计数字")
println("="^50)

ice_change_pct = (μ_ice[end] - μ_ice[1]) / μ_ice[1] * 100
tire_change_pct = (μ_tire[end] - μ_tire[1]) / μ_tire[1] * 100

println("从-80°C变为5°C:")
println("  参数:$(round(ice_change_pct,digits=1))%(从$(m_ice[1])$(m_ice[end]))")
println("  驱动程序:$(round(tire_change_pct,digits=1))%(从$(µ_tire[1])$(µ_tire[end]))")

correlation = cor(μ_ice, μ_tire)
println("\系数之间的相关性:")
println("  Pearson相关系数:△(round(correlation,digits=4))")
println("  释义:△(abs(correlation)>0.8? "Очень сильная" : 
        abs(correlation) > 0.6 ? "" : 
        abs(correlation) > 0.4 ? "中度" : "") связь")

safe_temp_ped = temperatures[μ_ice .>= LOW_RISK_PEDESTRIAN]
safe_temp_drv = temperatures[μ_tire .>= LOW_RISK_DRIVER]

println("安全温度范围:")
if !isempty(safe_temp_ped)
    println("  行人(μ≥$LOW_RISK_PEDESTRIAN):从$(最小值(safe_temp_ped))°C到$(最大值(safe_temp_ped))°C")
else
    println("  行人:范围内没有安全温度")
end
if !isempty(safe_temp_drv)
    println("  驱动程序(μ≥$LOW_RISK_DRIVER):从$(最小值(safe_temp_drv))°C到$(最大值(safe_temp_drv))°C")
else
    println("  司机:范围内没有安全温度")
end

plots = [p1, p2, p3, p4, p5]
plot_names = [
    "ice_friction_pedestrians.png",
    "ice_friction_drivers.png",
    "ice_friction_comparison.png",
    "ice_friction_ratio.png",
    "ice_friction_rate_of_change.png"
]

for (i, (plot_obj, name)) in enumerate(zip(plots, plot_names))
    savefig(plot_obj, name)
end
==================================================
ДОПОЛНИТЕЛЬНАЯ СТАТИСТИКА
==================================================
Изменение от -80°C до 5°C:
  Пешеходы: -94.5% (с 0.091 до 0.005)
  Водители: -69.7% (с 0.264 до 0.08)

Корреляция между коэффициентами:
  Коэффициент корреляции Пирсона: 0.9388
  Интерпретация: Очень сильная связь

Безопасные температурные диапазоны:
  Пешеходы (μ ≥ 0.06): от -80.0°C до -30.0°C
  Водители (μ ≥ 0.25): от -80.0°C до -40.0°C

统计计算证实并完善了从图表中得出的结论.

结论

工作的最终结论是基于对+5°C至-80°C温度范围内摩擦系数实验数据的综合分析。研究发现,随着温度的降低,鞋底和汽车轮胎的附着力显着改善,但这种改善是非线性的,强度也会变化。 汽车轮胎在所研究的整个范围内表现出相对于鞋底的绝对和相对优势。 安全方面最大的不平衡是在接近零和稍微负的温度区域观察到的,这是冬季许多地区的典型特征。

实用建议行人应考虑到极低的摩擦系数在温度高于-5°C.在这样的条件下,有必要使用特殊的鞋子与防滑涂层或冰鞋,以及显着降低运动速度,避免突 在斜坡和楼梯上应特别小心。

对驾驶员的实用建议基于这样一个事实,即尽管轮胎提供更好的抓地力,但其绝对值仍然不足以在温暖的冬季期间安全驾驶。 在从+5°C到-10°C的温度下,有必要增加距离,降低速度并避免突然机动。