当前位置:   article > 正文

2024年五一数学建模C题超详细解题思路+问题一运行代码(两套)_2024五一杯数学建模竞赛c题

2024五一杯数学建模竞赛c题

五一数模竞赛如期开赛,5月4日中午12:00截至,为期74小时的竞赛。为了能够更好的帮助大家,这里为大家带来详细版的C题解题思路,希望能够对大家有所帮助。

五一数模C题分享资料链接:https://pan.baidu.com/s/1n3wU-XCX5HH2x7LKpmxEyw

提取码:sxjm

问题1:干扰信号的分析和识别

    1. 建立数学模型,分析干扰信号
  1. 数据预处理:首先,进行数据清洗和预处理,包括去除异常值、填补缺失数据等。
  1. 特征提取:从干扰信号中提取特征,这些特征可能包括但不限于:
  1. 信号的统计特征:如平均值、方差、峰度、偏度等。
  2. 频率分析:使用傅里叶变换分析信号频率组成,识别与常规采矿作业不同的频率特征。
  3. 时间序列分析:例如自相关性、交叉相关性分析等。
  1. 特征选择:选择对于区分干扰信号最有信息量的特征。

统计特征

时间特征

电磁辐射 (EMR) 统计特征

测量时间间隔统计特征

平均值:77.96

平均间隔:约5709秒(约95分钟)

标准差:90.72

标准差:约119216秒(因大部分间隔为31秒或62秒,故标准差大表明存在极端值)

最小值:0

最小间隔:0秒(连续测量)

第一四分位数:31.62

第一四分位数:31秒

中位数:45.00

中位数:31秒

第三四分位数:75.00

第三四分位数:62秒

最大值:500

最大间隔:约5815425秒(约67天)

    1. 利用特征识别干扰信号的时间区间
  1. 模型构建:利用分类或聚类模型(如支持向量机、随机森林、K-均值聚类等)来根据特征对数据进行标注。
  2. 识别与验证:对2022年的数据应用模型,识别出含干扰信号的时间区间,并进行验证

特征提取:从“附件一EMR”中提取电磁辐射信号的统计特征。

模型训练:使用提取的特征和类别标签来训练一个分类模型。

干扰识别:应用模型于“问题一EMR检测时间”数据,以识别并记录干扰信号。

时间区间确定:找出最早的5个干扰信号所在的时间区间。

 

 

表1 电磁辐射干扰信号时间区间[分类模型]

序号

时间区间起点

时间区间终点

1

2022-05-01 00:01:12

2022-05-01 05:15:45

2

2022-05-01 07:01:49

2022-05-01 13:49:45

3

2022-05-01 20:50:30

2022-05-01 21:39:53

4

2022-05-02 00:00:43

2022-05-02 08:45:36

5

2022-05-02 11:00:59

2022-05-02 13:36:28

表1 电磁辐射干扰信号时间区间[阈值模型]

序号

时间区间起点

时间区间终点

1

2022-05-01 10:57:50

2022-05-01 11:08:48

2

2022-05-03 08:23:06

2022-05-03 08:23:06

3

2022-05-07 18:04:53

2022-05-07 18:04:53

4

2022-05-09 07:29:02

2022-05-09 07:29:02

5

2022-05-10 06:27:57

 2022-05-10 08:30:29

问题2:前兆特征信号的分析和预测

2.1 建立数学模型,分析前兆特征信号

  1. 数据预处理:同上,进行必要的数据清洗和预处理。
  2. 特征提取:提取表征前兆特征信号的变化趋势的特征,可能包括:
  1. 趋势分析:线性回归分析或其他趋势检测方法来确定信号的增长或下降趋势。
  2. 突变点检测:使用变点检测算法来识别信号中的突变点,这些点可能预示着冲击地压的前兆。
  3. 周期性分析:检查信号的周期性变化,以辨认与常规周期性波动不同的特征。

2.2 利用特征识别前兆特征信号的时间区间

  1. 模型构建:使用适合时间序列预测的模型,如ARIMA模型、LSTM神经网络等。

预测与验证:对指定时间段的数据应用模型,预测并识别前兆特征信号的时间区间。

问题3:实时预警系统的建立

  1. 数据同步:对附件3中的数据进行时间同步,以保证在分析时数据的连续性。
  2. 概率模型:建立一个概率模型(如贝叶斯模型),来估计每次数据采集时刻前兆特征信号出现的概率。
  3. 实时监测与预警:构建一个监测系统,该系统可以在每次数据采集时实时计算前兆特征信号的概率,并在超过预设阈值时发出预警。

Matlab数据预处理代码

  1. % 加载数据
  2. data = readtable('path_to/附件一.xlsx');
  3. % 函数用于检查每个类别的数据是否服从正态分布
  4. function [statistic, p_value, is_normal] = checkNormalDistribution(group_data)
  5. [h, p] = kstest((group_data - mean(group_data)) / std(group_data)); % Z-Score标准化
  6. statistic = h;
  7. p_value = p;
  8. is_normal = p > 0.05;
  9. end
  10. % 函数用于计算并可视化异常值
  11. function outliers = detectAndVisualizeOutliers(data, category)
  12. Q1 = quantile(data, 0.25);
  13. Q3 = quantile(data, 0.75);
  14. IQR = Q3 - Q1;
  15. outliers = (data < (Q1 - 1.5 * IQR)) | (data > (Q3 + 1.5 * IQR));
  16. % 可视化
  17. figure;
  18. boxplot(data, 'Orientation', 'horizontal', 'Labels', {category});
  19. hold on;
  20. scatter(data(outliers), ones(sum(outliers), 1), 'r', 'filled');
  21. title(sprintf('Boxplot and Outliers for Category %s', category));
  22. grid on;
  23. end
  24. % 按类别分组并检查每组数据分布
  25. categories = unique(data.类别_class);
  26. numCategories = numel(categories);
  27. distribution_tests = cell(numCategories, 3);
  28. for i = 1:numCategories
  29. category = categories{i};
  30. group = data.电磁辐射_EMR(strcmp(data.类别_class, category));
  31. group = rmmissing(group); % 删除可能的NaN值
  32. [statistic, p_value, is_normal] = checkNormalDistribution(group);
  33. distribution_tests{i, 1} = category;
  34. distribution_tests{i, 2} = p_value;
  35. distribution_tests{i, 3} = is_normal;
  36. end
  37. % 输出正态分布测试结果
  38. disp('K-S Test Results:');
  39. disp(distribution_tests);
  40. % 应用异常值检测并进行可视化
  41. outliers_results = cell(numCategories, 2);
  42. for i = 1:numCategories
  43. category = categories{i};
  44. group = data.电磁辐射_EMR(strcmp(data.类别_class, category));
  45. group = rmmissing(group);
  46. outliers = detectAndVisualizeOutliers(group, category);
  47. outliers_results{i, 1} = category;
  48. outliers_results{i, 2} = sum(outliers); % 记录每个类别中异常值的数量
  49. end
  50. % 输出每个类别的异常值数量
  51. disp('Number of Outliers by Category:');
  52. disp(outliers_results);

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. # 加载数据
  5. emr_data_path = '附件一EMR.xlsx'
  6. emr_detection_path = '问题一EMR检测时间.xlsx'
  7. # 读取Excel文件
  8. emr_data = pd.read_excel(emr_data_path)
  9. emr_detection_data = pd.read_excel(emr_detection_path)
  10. # 提取干扰数据特征
  11. def extract_features(data):
  12. # 计算基本统计量
  13. data['时间 (time)'] = pd.to_datetime(data['时间 (time)'])
  14. data_sorted = data.sort_values(by='时间 (time)')
  15. data_sorted['duration'] = data_sorted['时间 (time)'].diff().dt.total_seconds().fillna(0)
  16. features = data_sorted.groupby(pd.Grouper(key='时间 (time)', freq='30S')).agg({
  17. '电磁辐射 (EMR)': ['mean', 'std', 'min', 'max', 'count'],
  18. 'duration': 'sum' # Sum of durations within each group
  19. }).dropna()
  20. # 重命名列
  21. features.columns = ['EMR_mean', 'EMR_std', 'EMR_min', 'EMR_max', 'EMR_count', 'total_duration']
  22. return features
  23. # 使用附件一中的数据提取特征
  24. emr_features = extract_features(emr_data)
  25. # 计算附件一数据的统计特性以设置阈值
  26. emr_stats = emr_features.describe()
  27. emr_stats_mean_threshold = emr_stats.loc['mean', 'EMR_mean'] + 2 * emr_stats.loc['std', 'EMR_mean']
  28. emr_stats_std_threshold = emr_stats.loc['mean', 'EMR_std']
  29. emr_stats_duration_threshold = emr_stats.loc['mean', 'total_duration']
  30. # 简单的阈值判断方法来初步识别干扰信号
  31. def identify_interferences(features, mean_threshold, std_threshold, duration_threshold):
  32. # 根据阈值判断是否为干扰
  33. potential_interferences = features[(features['EMR_mean'] > mean_threshold) |
  34. (features['EMR_std'] > std_threshold) |
  35. (features['total_duration'] > duration_threshold)]
  36. return potential_interferences
  37. # 从问题一的EMR检测时间数据中提取特征
  38. emr_detection_features = extract_features(emr_detection_data)
  39. # 应用阈值识别干扰信号
  40. identified_interferences = identify_interferences(emr_detection_features,
  41. emr_stats_mean_threshold,
  42. emr_stats_std_threshold,
  43. emr_stats_duration_threshold)
  44. # 提取最早发生的5个干扰信号所在的区间
  45. earliest_interferences = identified_interferences.sort_index().head(5)
  46. # 输出每个区间的时间区间起点和终点
  47. intervals = [(index, index + pd.Timedelta(seconds=30)) for index in earliest_interferences.index]
  48. # 打印时间区间
  49. print("Time Intervals for Identified Interferences:")
  50. for start, end in intervals:
  51. print(f"Start: {start}, End: {end}")
  52. # 可视化结果
  53. plt.figure(figsize=(12, 8))
  54. plt.plot(emr_detection_features.index, emr_detection_features['EMR_mean'], label='EMR Mean')
  55. plt.scatter([idx for idx, _ in intervals], [earliest_interferences['EMR_mean'][idx] for idx, _ in intervals],
  56. color='red', label='Identified Interferences')
  57. plt.xlabel('Time')
  58. plt.ylabel('EMR Mean Value')
  59. plt.title('EMR Mean Values and Identified Interferences Over Time')
  60. plt.legend()
  61. plt.show()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/629393
推荐阅读
相关标签
  

闽ICP备14008679号