2023深圳杯(东三省)数学建模ABC题思路及代码

大家好呀,比赛开赛后我一直在去写各个题,深圳杯的难度还是比较大的,在这里给大家带来初步的选题建议及思路。

本次深圳杯小白推荐选择A题,数据分析类题目无论怎样都能完成论文,内容也会比较丰富。学过嵌入信息的可以选择b,数理基础比较扎实,会模拟仿真的可以选择C,D只建议有医学专业知识的人选择。

我会先做A题,预计28号完成完整论文,之后我会做BC其中一道。后续还会持续更新哈,图文版讲解得比较简陋,详细的视频版讲解请移步:

2023深圳杯(东北三省)数学建模选题建议及初步思路_哔哩哔哩_bilibili

A题影响城市居民身体健康的因素分析

请你们团队研究解决下面问题:

问题1 参考附件A3,分析附件A2中居民的饮食习惯的合理性,并说明存在的主要问题。

这一问主要是统计分析,针对于附件3的8个准则中的标准,对应寻找相应的附件2中的数据,之后进行统计汇总以及图表可视化即可。

问题2 分析居民的生活习惯和饮食习惯是否与年龄、性别、婚姻状况、文化程度、职业等因素相关。

做相关性分析即可,绘制热力图给出相关系数大小。重点是用什么对于数据对生活习惯进行表征,如果按照问题3来说,那么生活习惯与吸烟、饮酒、饮食习惯、工作性质、运动等因素是并列关系,没有包含关系,但是问卷调查数据中,除了其他因素,没有相应的生活习惯数据,因此,还是通过吸烟饮酒运动去表征生活习惯即可。

问题3 根据附件A2中的数据,深入分析常见慢性病(如高血压、糖尿病等)与吸烟、饮酒、饮食习惯、生活习惯、工作性质、运动等因素的关系以及相关程度。

可以做差异性分析,也就是说患不患病在这些因素上是否存在显著差异;也可以做一样的相关性分析。

问题4 依据附件A2中居民的具体情况,对居民进行合理分类,并针对各类人群提出有利于身体健康的膳食、运动等方面的合理建议。

可以做简单分类,例如直接进行年龄划分;也可以针对于一个因素,例如吸烟频率进行聚类划分。

B题 电子资源版权保护问题

隐写术一般被认为是信息隐藏学的一个重要分支,它专门研究如何隐藏实际存在的信息。隐写术有悠久的历史,部分案例甚至可追溯到公元前数百年。随着计算机和互联网技术的高速发展,近代隐写技术的研究被认为大约起始于20世纪90年代。因为隐写技术能将特定信息嵌入信息载体且不易被察觉,所以它可被广泛地应用于著作权保护、数据附加等领域。
问题1 针对附件1的图片P,建立生成嵌入信息深圳杯数学建模挑战赛的图片SP的数学模型,使得图片SP在人的视觉上尽可能与原图P相近。设计并实现生成图片SP的算法,将生成SP源代码和结果图片SP置于参赛作品的附录A中;给出从图片SP提取著作权信息使用的源代码并置于参赛作品的附录B中。

主要就是嵌入信息给一个图片。

给大家看一下我目前用到的一些代码吧,注意,只是初步代码,还没有完整实现:

function stego_image = embedTextToImage(original_image, text_to_embed, alpha)
    % 嵌入信息
    % 输入:
    %   original_image: 原始图像
    %   text_to_embed: 要嵌入的文本信息(字符串)
    %   alpha: 嵌入强度(调节参数,一般取值在0.1-1之间,越大越明显)
    % 输出:
    %   stego_image: 嵌入了文本信息的图像
% 读取原始图像
original_image = imread('image.jpg');

% 要嵌入的文本信息
text_to_embed = '深圳杯数学建模挑战赛';

% 嵌入强度(根据需要调整)
alpha = 0.1;

% 嵌入信息并得到嵌入后的图像
stego_image = embedTextToImage(original_image, text_to_embed, alpha);

% 保存嵌入后的图像(如果需要)
imwrite(stego_image, 'path_to_save_stego_image.jpg');

    % 将RGB图像转换为灰度图像
    gray_image = rgb2gray(original_image);
    [M, N] = size(gray_image);

    % 获取文本信息的二进制编码
    binary_text = reshape(dec2bin(text_to_embed, 8).' - '0', 1, []);

    % 确定嵌入位置,这里简单地按照zigzag顺序选取
    zigzag_indices = zigzagOrder(M, N);
    num_bits_to_embed = numel(binary_text);

    % 嵌入信息
    stego_image = double(gray_image);

    for i = 1:num_bits_to_embed
        % 选择当前位置
        current_index = zigzag_indices(i);
        [row, col] = ind2sub([M, N], current_index);

        % 获得DCT系数
        block = stego_image(row:row+7, col:col+7);
        dct_block = dct2(block);

        % 判断当前位应该嵌入0还是1
        bit_to_embed = str2double(binary_text(i));

        % 根据嵌入强度调节系数
        alpha_i = alpha * (max(dct_block(:)) - min(dct_block(:)));

        % 嵌入信息
        if bit_to_embed == 0
            dct_block(2, 1) = dct_block(2, 1) - alpha_i;
        else
            dct_block(2, 1) = dct_block(2, 1) + alpha_i;

注意,以上只是部分代码,完整代码见文末。

我做完A再看看要继续做b还是c吧。

C题 无人机协同避障航迹规划

平面上A、B两个无人机站分别位于半径为500 m的障碍圆两边直径的延长线上,A站距离圆心1 km,B站距离圆心3.5 km。两架无人机分别从A、B两站同时出发,以恒定速率10 m/s飞向B站和A站执行任务。飞行过程中两架无人机必须避开障碍圆、并且不得碰面(即两架无人机的连线必须保持与障碍圆处于相交状态)。无人机的转弯半径不小于30 m。请建立数学模型,解决以下问题:
问题1 要求两架无人机中第一个到达目的站点的用时最少,给出两架无人机的飞行航迹方案。

题面不用解释了,大家应该都能看懂,给大家看一下我目前写的代码吧,注意,只是初步代码,还没有完整实现:

function main()
    % 障碍圆参数
    obstacle_center = [0, 0]; % 障碍圆的圆心坐标
    obstacle_radius = 500;    % 障碍圆的半径

    % 无人机A和B的初始位置
    A_start = [1000, 0]; % 无人机A的初始位置
    B_start = [3500, 0]; % 无人机B的初始位置

    % 无人机的速度
    V = 10; % m/s

    % 定义优化问题
    options = optimoptions('fmincon', 'Display', 'off', 'Algorithm', 'interior-point');
    x0 = [0, 0]; % 初始猜测的无人机A和B的角度
    lb = [0, 0]; % 无人机A和B的角度下界
    ub = [2*pi, 2*pi]; % 无人机A和B的角度上界

    [best_angles, ~] = fmincon(@(x) objective_function(x, A_start, B_start, V), x0, [], [], [], [], lb, ub, @(x) constraints(x, A_start, B_start, V, obstacle_center, obstacle_radius), options);  % 最佳角度
    best_angle_A = best_angles(1);
    best_angle_B = best_angles(2);

    disp(['无人机A的最佳角度:', num2str(best_angle_A)]);
    disp(['无人机B的最佳角度:', num2str(best_angle_B)]);
end

% 目标函数:最小化无人机A到达目的地的时间
function time = objective_function(angles, A_start, B_start, V)
    theta_A = angles(1);
    theta_B = angles(2);
    time_A = norm(A_start - B_start) / V;
    time_B = norm(B_start - A_start + [cos(theta_A), sin(theta_A)] * V * time_A) / V;
    time = max(time_A, time_B);
end

% 约束条件:避开障碍圆并不碰面
function [c, ceq] = constraints(angles, A_start

注意,以上只是部分代码,完整代码见文末。

我做完A再看看要继续做b还是c吧。

D题 基于机理的致伤工具推断

题目看得我有点生理不适,此外我也不擅长这种题目,我就不做了,有医学专业知识的队伍可以尝试下。。

OK,总体而言还是那句话:本次深圳杯小白推荐选择A题,数据分析类题目无论怎样都能完成论文,内容也会比较丰富。学过嵌入信息的可以选择b,数理基础比较扎实,会模拟仿真的可以选择C,D只建议有医学专业知识的人选择。

我会先做A题,预计28号完成完整论文,之后我会做BC其中一道。

以上只是比较简略的图文版讲解,视频版讲解以及后续完整成品的预定请点击下方我的个人卡片查看↓:

猜你喜欢

转载自blog.csdn.net/smppbzyc/article/details/131966041