散乱插值及MATLAB绘图函数

本文介绍如何使用MATLAB进行地形与重金属元素浓度的散乱插值及三维绘图,通过读取Excel文件中的数据,利用griddata函数进行插值,并通过mesh和surf函数绘制地形图及重金属元素的浓度分布图。

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

转载自:https://blog.youkuaiyun.com/helloworld_wj/article/details/77511007

常见的散乱插值方法有Kriging(克里金)插值,Shepard插值等

这里使用了matlab中的工具直接进行插值并绘图,示例代码如下:

clc,clear
A=xlsread('C:\Users\Administrator\Desktop\集训\8.23\3. 2011~A资料\2011A~题目\data.xls','附件1','A4:E322');
C=xlsread('C:\Users\Administrator\Desktop\集训\8.23\3. 2011~A资料\2011A~题目\data.xls','附件2','A4:I322');
x=A(:,2);y=A(:,3);z=A(:,4);qy=A(:,5);
As=C(:,2);Cd=C(:,3);Cr=C(:,4);Cu=C(:,5);
Hg=C(:,6);Ni=C(:,7);Pb=C(:,8);Zn=C(:,9);

[X,Y,Z]=griddata(x,y,z,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,Z)
title(‘采样地形图’);

[X,Y,AS]=griddata(x,y,As,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,AS)
title(‘As浓度随平面地形分布图’);

[X,Y,CD]=griddata(x,y,Cd,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,CD)
title(‘Cd浓度随平面地形分布图’);

[X,Y,CR]=griddata(x,y,Cr,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,CR)
title(‘Cr浓度随平面地形分布图’);

[X,Y,CU]=griddata(x,y,Cu,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,CU)
title(‘Cu浓度随平面地形分布图’);

[X,Y,NI]=griddata(x,y,Ni,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,NI)
title(‘Ni浓度随平面地形分布图’);

[X,Y,HG]=griddata(x,y,Hg,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,HG)
title(‘Hg浓度随平面地形分布图’);

[X,Y,PB]=griddata(x,y,Pb,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,PB)
title(‘Pb浓度随平面地形分布图’);

[X,Y,ZN]=griddata(x,y,Zn,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,mesh(X,Y,ZN)
title(‘Zn浓度随平面地形分布图’);

[X,Y,QY]=griddata(x,y,qy,linspace(0,28654)’,linspace(0,18449),‘v4’);
figure,surf(X,Y,QY)
title(‘区域分布图’);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

目标为已知坐标、海拔、地区类型以及各重金属元素含量的319个调查点。

各二维三维绘图函数在《精通MATLABR2014b》中有简略介绍,也可以自行上网搜索。

### MATLAB 中实现径向基函数插值 径向基函数(Radial Basis Function, RBF)是一种常用的插值方法,尤其适用于处理多维散乱数据。下面展示了一个简单的 MATLAB 代码示例来说明如何利用径向基函数进行插值[^1]。 #### 创建样本数据集 为了演示目的,先创建一些随机分布的数据点作为已知条件下的观测值: ```matlab % 设置随机种子以便重复实验结果 rng(0); % 定义训练样本数量 N 和测试样本数 M N = 25; % 训练样本量 M = 100; % 测试样本量 % 随机生成二维空间内的坐标位置 (x,y) X_train = rand(N, 2); Y_train = peaks(X_train(:,1), X_train(:,2)); % 构建更密集的网格用于可视化最终效果 [X_test,Y_test] = meshgrid(linspace(0,1,M)); XY_test = [X_test(:), Y_test(:)]; ``` #### 定义径向基函数 这里选择了高斯型径向基函数作为基础构建模块之一: ```matlab function phi = gaussian_rbf(r, epsilon) phi = exp(-(epsilon*r).^2); end ``` #### 构造距离矩阵并求解权重系数 通过计算所有训练样本之间的欧氏距离形成距离矩阵,并据此建立线性方程组以获得对应的权值参数: ```matlab % 参数设置 epsilon = 2; % 计算两两点间欧式距离平方 D = pdist2(X_train, X_train, 'euclidean').^2; Phi = arrayfun(@(d)gaussian_rbf(sqrt(d), epsilon), D); % 添加偏置项构成增广矩阵 A=[Φ|I] A = Phi + eye(size(D))*eps; % 使用最小二乘法估计模型参数 w=(A'*A)^(-1)*A'*y w = linsolve(A, Y_train'); ``` #### 进行预测操作 最后,在新的未知位置上应用所学得的模型完成实际插值运算过程: ```matlab % 对于每一个待估测的位置,都需要重新构造相应的 Φ 向量并与之前得到的 w 做内积即可得出目标响应 z。 Z_pred = zeros(M*M, 1); for i=1:M*M r_i = sqrt(sum((repmat(XY_test(i,:), N, 1)-X_train).^2, 2)); Z_pred(i) = sum(w .* arrayfun(@(r_ij)gaussian_rbf(r_ij, epsilon), r_i)); end % 将预测的结果重塑成适合绘图的形式 Z_pred_matrix = reshape(Z_pred, size(X_test)); figure(); surf(X_test, Y_test, Z_pred_matrix, 'EdgeColor', 'none'); title('RBF Interpolation Result Using Gaussian Kernel'); xlabel('X'); ylabel('Y'); zlabel('Interpolated Value'); colorbar; view([-37.5 30]); shading interp; hold on; plot3(X_train(:,1), X_train(:,2), Y_train,'ro','MarkerFaceAlpha', .5,... 'MarkerSize',8,'LineWidth',2); legend({'Predicted Surface', 'Training Points'}); ``` 上述流程展示了完整的基于径向基函数的一次插值实践案例,其中包含了从准备原始资料到最后绘制图形输出整个环节的具体步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值