clear
% 导入 x、y 和 z 数据
data = xlsread('附件1_重力异常基准数据A.xlsx'); % 读取整个工作表的数据
x = data(:, 1); % 假设 x 数据在第一列
y = data(:, 2); % 假设 y 数据在第二列
z = data(:, 3); % 假设 z 数据在第三列
% 假设 x, y, z 分别为已经导入的三维数据
% 绘制原始图像
figure('Position', [100, 100, 800, 400]); % 设置图形的位置和尺寸
subplot(1, 2, 1);
scatter(x(:), y(:), 25, z(:), 'filled'); % 绘制原始数据的散点图
colormap jet; % 设置颜色映射
colorbar; % 添加颜色条
title('原始数据散点图');
xlabel('X轴');
ylabel('Y轴');
% 三次样条插值
[xq, yq] = meshgrid(linspace(min(x), max(x), 100), linspace(min(y), max(y), 100)); % 定义插值网格点
zq = griddata(x, y, z, xq, yq, 'cubic'); % 使用三次样条插值进行插值处理
% 绘制插值后的图像
subplot(1, 2, 2);
contourf(xq, yq, zq, 20, 'LineStyle', 'none'); % 绘制等高线图,20 表示等高线数量
colorbar; % 添加颜色条
title('插值后的数据等高线图');
xlabel('X轴');
ylabel('Y轴');
clear x
clear y
clear z
% 假设 xq, yq, zq 分别为插值后的数据
% 将数据进行聚类
data = [xq(:), yq(:), zq(:)]; % 将数据整合为一个矩阵
k = 5; % 设置聚类的簇数
idx = kmeans(data, k); % 使用 k-means 算法进行聚类
% 绘制聚类后的图像
figure;
gscatter(data(:,1), data(:,2), idx, 'rgbm', '.', 12); % 绘制聚类后的散点图
title('聚类后的数据散点图');
xlabel('X轴');
ylabel('Y轴');
% 计算梯度
[dx, dy] = gradient(zq);
gradient_values = sqrt(dx.^2 + dy.^2);
% 假设gradient_values为每个点的重力异常值梯度,idx为聚类的结果
% 创建特征矩阵X和响应变量Y
X = gradient_values; % 假设gradient_values为每个点的重力异常值梯度
Y = idx; % 假设idx为聚类的结果
% 将数据分为训练集和测试集
cv = cvpartition(size(X,1),'HoldOut',0.3);
idx = cv.test;
% 训练支持向量机模型
SVMModel = fitcecoc(X(~idx,:),Y(~idx));
% 用测试集进行预测
predicted = predict(SVMModel,X(idx,:));
% 计算准确率
accuracy = sum(predicted == Y(idx)) / numel(Y(idx));
disp(['准确率:', num2str(accuracy)]);
% 读取 Excel 文件中的数据
data_b = xlsread('附件2_重力异常基准数据B.xlsx');
% 假设 data_b 中的数据有 x_b、y_b 和 z_b 列
% 三次样条插值
[xq_b, yq_b] = meshgrid(linspace(min(data_b(:, 1)), max(data_b(:, 1)), 100), linspace(min(data_b(:, 2)), max(data_b(:, 2)), 100)); % 定义插值网格点
zq_b = griddata(data_b(:, 1), data_b(:, 2), data_b(:, 3), xq_b, yq_b, 'cubic'); % 使用三次样条插值进行插值处理
% 将数据进行聚类
data_cluster_b = [xq_b(:), yq_b(:), zq_b(:)]; % 将数据整合为一个矩阵
k_b = 5; % 设置聚类的簇数
idx_b = kmeans(data_cluster_b, k_b); % 使用 k-means 算法进行聚类
% 计算梯度
[dx_b, dy_b] = gradient(zq_b);
gradient_values_b = sqrt(dx_b.^2 + dy_b.^2);
% 创建特征矩阵X和响应变量Y
X_b = gradient_values_b; % 假设gradient_values_b为每个点的重力异常值梯度
Y_b = idx_b; % 假设idx_b为聚类的结果
% 用测试集进行预测
predicted = predict(SVMModel,X_b(idx_b,:));
% 计算准确率
accuracy = sum(predicted == Y_b(idx_b)) / numel(Y_b(idx_b));
disp(['准确率:', num2str(accuracy)]);