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

文章展示了如何使用MATLAB进行数据可视化,包括浓度与RGB、HS值的散点图,以及浓度与灰度值的散点图。此外,还运用fitlm函数进行线性回归拟合,并计算了误差,用于分析数据的准确性。最后,讨论了根据误差和拟合图舍弃异常数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题:

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

data = xlsread('filename.xlsx');

% 指定需要使用的数据范围
startRow = 2;        % 数据起始行
endRow = 20;         % 数据结束行

% 提取指定范围内的R、G、B和浓度值,其中4表示R值在导入表格的第3列,以此类推
R_values = data(startRow:endRow, 4);
G_values = data(startRow:endRow, 3);
B_values = data(startRow:endRow, 2);
concentration = data(startRow:endRow, 1);

% 绘制RGB值与浓度的散点图
figure;
scatter3(R_values, G_values, B_values, [], concentration, 'filled');
colorbar;

% 设置图形标题和轴标签
title('RGB值与浓度的散点图');
xlabel('R值');
ylabel('G值');
zlabel('B值');

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

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

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

startRow = 25;
endRow =31 ;
concentration = data(startRow:endRow,2);
B = data(startRow:endRow,3);
G = data(startRow:endRow,4);
R=data(startRow:endRow,5);
figure; 
plot(concentration, B, 'o-', 'DisplayName', 'B');
hold on; 
plot(concentration, G, 'o-', 'DisplayName', 'G');
plot(concentration, R, 'o-', 'DisplayName', 'R');
hold off;  
title('浓度与RGB折线图');  
xlabel('浓度值(ppm)'); 
ylabel('RGB 值');  
legend(); 

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

startRow = 25;
endRow =31 ;

concentration = data(startRow:endRow,2);
% H值数据
h_values = data(startRow:endRow,6);
% S值数据
s_values = data(startRow:endRow,7);
figure;
scatter(concentration, h_values, 'b', 'filled');
hold on;
scatter(concentration, s_values, 'r', 'filled');
hold off;
title('浓度与H、S值的散点图');
xlabel('浓度');
ylabel('H值和S值');
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绘制出残差散点图判断哪一组数据异常需要抛弃:

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

第二题:

concentration =data1(:,1) ; % 自变量-浓度
grayscale = data1(:,7); % 因变量-灰度值

coefficients = polyfit(concentration, log(grayscale), 1); % 对灰度值取对数后进行一次线性回归

% 提取得到的拟合方程系数
a = coefficients(1); % 斜率
b = exp(coefficients(2)); % 截距,将指数项还原为实际值

% 构建拟合方程字符串(y = b * exp(ax))
fit_equation = strcat('y = ', num2str(b), ' * exp(', num2str(a), 'x)');

% 显示拟合方程
disp(fit_equation);

% 绘制原始数据散点图和拟合曲线
figure;
scatter(concentration, grayscale, 'filled');
hold on;
x = min(concentration):max(concentration);
y = b * exp(a*x);
plot(x, y, 'r', 'LineWidth', 2);
xlabel('浓度');
ylabel('灰度值');
legend('原始数据', '拟合曲线');

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

fit_grayscale = 138.5423 * exp(-0.0010143 * concentration);%请根据算出的拟合公式修改代码数值

% 计算相对误差(百分比)
relative_error = abs((fit_grayscale - grayscale) ./ grayscale) * 100;

% 计算绝对误差
absolute_error = abs(fit_grayscale - grayscale);

% 显示相对误差和绝对误差
disp('相对误差(百分比):');
disp(relative_error);
disp('绝对误差:');
disp(absolute_error);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值