当前位置:   article > 正文

基于MATLAB,有关2017年高教社杯全国大学生数学建模竞赛题目--C题 颜色与物质浓度辨识 的部分图像或数据代码_2017年高教社杯全国大学生数学建模竞赛题目c

2017年高教社杯全国大学生数学建模竞赛题目c

第一题:

1.用MATLAB画出各物质浓度与RGB值的散点图(表格得事先导入成矩阵形式或储存在电脑MATLAB目录下)

  1. data = xlsread('filename.xlsx');
  2. % 指定需要使用的数据范围
  3. startRow = 2; % 数据起始行
  4. endRow = 20; % 数据结束行
  5. % 提取指定范围内的R、G、B和浓度值,其中4表示R值在导入表格的第3列,以此类推
  6. R_values = data(startRow:endRow, 4);
  7. G_values = data(startRow:endRow, 3);
  8. B_values = data(startRow:endRow, 2);
  9. concentration = data(startRow:endRow, 1);
  10. % 绘制RGB值与浓度的散点图
  11. figure;
  12. scatter3(R_values, G_values, B_values, [], concentration, 'filled');
  13. colorbar;
  14. % 设置图形标题和轴标签
  15. title('RGB值与浓度的散点图');
  16. xlabel('R值');
  17. ylabel('G值');
  18. zlabel('B值');

上述代码中,将浓度数据添加到散点图中的颜色映射中,通过设置参数'filled'来填充散点。因此,颜色代表浓度的变化。

用以上代码画出来的图长这样:

  注意:如果感觉散点图看不太清楚数据的总体趋势可以采用MATLAB绘制浓度与RGB折线图

  1. startRow = 25;
  2. endRow =31 ;
  3. concentration = data(startRow:endRow,2);
  4. B = data(startRow:endRow,3);
  5. G = data(startRow:endRow,4);
  6. R=data(startRow:endRow,5);
  7. figure;
  8. plot(concentration, B, 'o-', 'DisplayName', 'B');
  9. hold on;
  10. plot(concentration, G, 'o-', 'DisplayName', 'G');
  11. plot(concentration, R, 'o-', 'DisplayName', 'R');
  12. hold off;
  13. title('浓度与RGB折线图');
  14. xlabel('浓度值(ppm)');
  15. ylabel('RGB 值');
  16. legend();

2.用MATLAB绘制出浓度与HS值散点图

  1. startRow = 25;
  2. endRow =31 ;
  3. concentration = data(startRow:endRow,2);
  4. % H值数据
  5. h_values = data(startRow:endRow,6);
  6. % S值数据
  7. s_values = data(startRow:endRow,7);
  8. figure;
  9. scatter(concentration, h_values, 'b', 'filled');
  10. hold on;
  11. scatter(concentration, s_values, 'r', 'filled');
  12. hold off;
  13. title('浓度与H、S值的散点图');
  14. xlabel('浓度');
  15. ylabel('H值和S值');
  16. legend('H值', 'S值');

3..用MATLAB绘画出物质浓度与灰度值的散点图(灰度值要通过事先计算,在这就不放出代码了。)

在以上代码中原本一开始用了最累的方法,把灰度值和浓度一个个敲上去,这里可以参考上面RGB散点图的代码,前提是要将灰度值计算结果一并加入表格导入(导入在每种物质的浓度后)

这是代码画出来的浓度与灰度值的散点图:

4.进行模型的线性回归拟合(此处运用 MATLAB 的线性回归函数 fitlm ,没有用regress函数

 

  • (Intercept)(截距项) Estimate(估计值)SE(标准误差)tStat(t 统计量)pValue(p 值)
  • x1(灰度值项)
  • (Intercept)(截距项)的置信区间为[536.0602,925.6746]。
  • x1(灰度值项)的置信区间为[-6.7710, -3.8035]。
  • 若要使用 regress函数如下:

 注意:由于工业碱情况有所不同,此处须用MATLAB绘制出残差散点图判断哪一组数据异常需要抛弃:

 以上仅对组胺,溴酸钾,工业碱的灰色模型进行绘图与分析,硫酸铝钾与奶中尿素,以及数据评判在这里不做演示。

第二题:

  1. concentration =data1(:,1) ; % 自变量-浓度
  2. grayscale = data1(:,7); % 因变量-灰度值
  3. coefficients = polyfit(concentration, log(grayscale), 1); % 对灰度值取对数后进行一次线性回归
  4. % 提取得到的拟合方程系数
  5. a = coefficients(1); % 斜率
  6. b = exp(coefficients(2)); % 截距,将指数项还原为实际值
  7. % 构建拟合方程字符串(y = b * exp(ax))
  8. fit_equation = strcat('y = ', num2str(b), ' * exp(', num2str(a), 'x)');
  9. % 显示拟合方程
  10. disp(fit_equation);
  11. % 绘制原始数据散点图和拟合曲线
  12. figure;
  13. scatter(concentration, grayscale, 'filled');
  14. hold on;
  15. x = min(concentration):max(concentration);
  16. y = b * exp(a*x);
  17. plot(x, y, 'r', 'LineWidth', 2);
  18. xlabel('浓度');
  19. ylabel('灰度值');
  20. legend('原始数据', '拟合曲线');

 请根据以上得到的拟合公式修改下面计算误差的代码参数:

  1. fit_grayscale = 138.5423 * exp(-0.0010143 * concentration);%请根据算出的拟合公式修改代码数值
  2. % 计算相对误差(百分比)
  3. relative_error = abs((fit_grayscale - grayscale) ./ grayscale) * 100;
  4. % 计算绝对误差
  5. absolute_error = abs(fit_grayscale - grayscale);
  6. % 显示相对误差和绝对误差
  7. disp('相对误差(百分比):');
  8. disp(relative_error);
  9. disp('绝对误差:');
  10. disp(absolute_error);

再根据得出的误差与拟合图判断是否要舍弃部分数据,再继续进行误差分析得出结论。

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

闽ICP备14008679号