第一题:
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);
再根据得出的误差与拟合图判断是否要舍弃部分数据,再继续进行误差分析得出结论。