Подбор вентилятора охлаждения ЦП
Author
using Plots
# Принудительно инициализируем бэкенд GR для генерации статических графиков,
# которые не пропадут при публикации в сообществе
gr()
function plot_fan_characteristics(p_passport, flow_matrix, v_input)
n = length(v_input)
# Инициализация графика с правильными лимитами и сеткой
plt = plot(
xlabel = "Volumetric Flow Rate (l/min)",
ylabel = "Pressure Rise (Pa)",
grid = true,
xlims = (0, 70),
ylims = (0, 36),
legend = :topright
)
# Цветовая палитра под стиль MATLAB
colors = [:blue, :orange, :gold]
for i in 1:n
q_raw = flow_matrix[i, :]
p_raw = p_passport
# Фильтруем фиктивные точки (0.001), оставляя только реальную рабочую зону вентилятора
# и ровно одну граничную точку (ноль), чтобы кривая красиво доходила до оси Y
valid_indices = Bool[]
found_first_zero = false
for q in q_raw
if q > 0.001
push!(valid_indices, true)
elseif q <= 0.001 && !found_first_zero
push!(valid_indices, true)
found_first_zero = true # сохраняем только первую точку нулевого расхода
else
push!(valid_indices, false) # игнорируем последующие искусственные нули на оси Y
end
end
# Выделяем чистые данные для графика
q_plot = q_raw[valid_indices]
p_plot = p_raw[valid_indices]
# Отрисовка без принудительной сортировки (линия идет строго по точкам давления)
plot!(
plt,
q_plot,
p_plot,
label = "ω = $(Int(v_input[i])) rpm",
marker = :circle,
markersize = 5,
markerstrokecolor = colors[mod1(i, length(colors))],
markercolor = :white,
color = colors[mod1(i, length(colors))],
linewidth = 1.5
)
end
display(plt)
end