✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。
🔥 内容介绍
一、背景
(一)疟疾防控的紧迫性
疟疾是一种由疟原虫引起、通过按蚊叮咬传播的严重虫媒传染病,对全球公共卫生构成重大威胁,尤其在热带和亚热带地区。据世界卫生组织数据,每年仍有大量人口感染疟疾,其中不乏因疟疾死亡的病例。因此,有效防控疟疾传播至关重要。
(二)气候对疟疾传播的影响
气候因素在疟疾传播过程中扮演关键角色。温度影响疟原虫在蚊子体内的发育速度,适宜温度可加速其发育,增加传播风险;降水影响蚊子的繁殖和生存环境,如形成积水为蚊子提供繁殖场所;湿度也与蚊子的生存和疟原虫的传播密切相关。这些气候因素的季节性变化,使得疟疾传播呈现出明显的季节性特征。例如,在雨季和高温季节,疟疾传播往往更为活跃。
(三)季节性最优控制的必要性
考虑到疟疾传播的季节性,实施季节性最优控制策略能够在疟疾传播高风险时期集中资源进行防控,提高防控效率。传统的统一防控策略未充分考虑疟疾传播强度随季节的变化,可能导致资源浪费或在关键时期防控力度不足。通过季节性最优控制,可根据不同季节调整防控措施的强度和类型,实现资源的合理分配。
(四)成本效益分析的意义
防控疟疾需要投入大量资源,包括杀虫剂、蚊帐、医疗资源等。进行成本效益分析有助于评估不同防控策略的经济合理性,确保有限资源得到最大化利用。通过比较不同防控措施的成本与所带来的效益(如减少的感染人数、挽救的生命等),可以确定最具成本效益的防控方案,为政策制定者提供决策依据,使疟疾防控工作更具可持续性。
二、原理
(一)疟疾传播模型
⛳️ 运行结果
📣 部分代码
%===============================================================================%
% Thesis Title: Error estimates of a spectral Petrov–Galerkin method for %
% two-sided fractional reaction–diffusion equations %
%===============================================================================%
% %
% APPROXIMATE SOLUTION u_N(x) - PETROV-GALERKIN METHOD %
% Jacobi Bases | Dynamic θ | N = 128 %
% %
% Author: Hamidreza Karimi %
% Date: October 2025 %
% Purpose: Plot u_N(x) for different α values using Petrov-Galerkin method %
% with σ and σ* computed automatically from θ and α. %
% f(x)=|sin(x)| %
% %
% Requires: jags.m, japoly.m, solveEquations.m %
% %
%===============================================================================%
clc; clear; close all;
%% ====================== USER-DEFINED PARAMETERS ======================
N = 128; % Polynomial degree
x_plot = linspace(-1, 1, 1000)'; % High-resolution plotting grid
theta = 0.7; % MODIFY θ HERE
alpha_list = [1.2, 1.4, 1.6, 1.8]; % α values
%% ====================== AUTO-COMPUTE σ AND σ* ======================
sigma_list = zeros(size(alpha_list));
sigma_star_list = zeros(size(alpha_list));
fprintf('Computing σ and σ* for θ = %.2f using solveEquations.m:\n', theta);
for i = 1:length(alpha_list)
[sigma_list(i), sigma_star_list(i)] = solveEquations(theta, alpha_list(i));
end
line_styles = {'-', '--', ':', '-.'};
colors = lines(length(alpha_list));
%% ====================== MAIN LOOP: SOLVE & PLOT ======================
figure('Color', 'w', 'Units', 'centimeters', 'Position', [5 5 16 10]);
hold on; grid on; box on;
for idx = 1:length(alpha_list)
sigma = sigma_list(idx);
sigma_star = sigma_star_list(idx);
alpha = alpha_list(idx);
fprintf('Solving for α = %.1f, θ = %.2f, σ = %.6f, %c%c = %.6f\n', ...
alpha, theta, sigma, char(963), char(42), sigma_star);
const = -sin(pi * alpha) / (sin(pi * sigma) + sin(pi * sigma_star));
k = 0:N;
lambda_k = const * exp(gammaln(alpha + k + 1) - gammaln(k + 1));
h_k = exp(log(2) * (sigma + sigma_star + 1) ...
- log(2 * k + sigma + sigma_star + 1) ...
+ gammaln(k + sigma + 1) + gammaln(k + sigma_star + 1) ...
- gammaln(k + sigma + sigma_star + 1) - gammaln(k + 1));
Q = diag(lambda_k .* h_k);
[x_quad, w_quad] = jags(N+1, alpha, alpha);
M = zeros(N+1);
for i = 0:N
Pk = japoly(i, sigma_star, sigma, x_quad);
for j = 0:N
Pn = japoly(j, sigma, sigma_star, x_quad);
M(i+1,j+1) = sum(w_quad .* Pn .* Pk);
end
end
[xx, ww] = jags(N+1, sigma_star, sigma);
R = zeros(N+1,1);
for kk = 0:N
Pkk = japoly(kk, sigma_star, sigma, xx);
R(kk+1) = sum(abs(sin(xx)) .* Pkk .* ww);
end
u_hat = (Q + M) \ R;
weight = (1 - x_plot).^sigma .* (1 + x_plot).^sigma_star;
u_N = zeros(size(x_plot));
for nn = 0:N
P_n = japoly(nn, sigma, sigma_star, x_plot);
u_N = u_N + u_hat(nn+1) * weight .* P_n;
end
plot(x_plot, u_N, ...
'LineStyle', line_styles{idx}, ...
'Color', colors(idx,:), ...
'LineWidth', 2.2, ...
'DisplayName', sprintf('\\theta=%.2f, \\alpha=%.1f', theta, alpha));
end
%% ====================== FINALIZE FIGURE ======================
xlabel('$x$', 'FontSize', 14, 'FontWeight', 'bold', 'Interpreter', 'tex');
ylabel('$u_N(x)$', 'FontSize', 14, 'FontWeight', 'bold', 'Interpreter', 'tex');
legend('Location', 'northwest', 'FontSize', 11, 'Interpreter', 'tex');
set(gca, 'FontSize', 12, 'GridAlpha', 0.3, 'LineWidth', 1.1);
xlim([-1.02, 1.02]);
ylim(ylim + [-0.02, 0.02]);
set(gcf, 'Toolbar', 'none');
fprintf('\nPlot displayed. Close the figure to continue.\n');