这里写目录标题
已知三个向量绘制三维曲面图
之前学到的 mesh
,surf
函数用于绘制三维曲面图(x,y,z)
前提条件是已知 x,y向量,如果
首先将你的矩阵导入MATLAB,变量名为A。
m=max(A);n=min(A);
x=A(:,1);y=A(:,2);z=A(:,3);
[X,Y,Z]=griddata(x,y,z,linspace(n(1),m(1))',linspace(n(2),m(2)), 'cubic');%cubic插值方式可换,具体请参考MATLAB帮助文档对函数griddata的解释
figure;
pcolor(X,Y,Z);grid on;
figure;
contourf(X,Y,Z);grid on;
figure;
mesh(X,Y,Z);grid on;
figure;
surf(X,Y,Z);grid on;%图形的具体修饰,很多,请具体参考帮助系统
griddata用法
(1)ZI = griddata(x,y,z,XI,YI)
用二元函数z=f(x,y)的曲面拟合不规则的数据向量x,y,z。griddata 将返回曲面z在点(XI,YI)处的插值。曲面总是经过这些数据点(x,y,z)的。输入参量(XI,YI)通常是规则的格点(像用命令meshgrid 生成的一样)。XI 可以是一行向量,这时XI 指定一有常数列向量的矩阵。类似地,YI 可以是一列向量,它指定一有常数行向量的矩阵。
(2)[XI,YI,ZI] = griddata(x,y,z,xi,yi)
返回的矩阵ZI 含义同上,同时,返回的矩阵XI,YI 是由行向量xi 与列向量yi 用命令meshgrid 生成的。
(3)[XI,YI,ZI] = griddata(…,method)
用指定的算法method 计算:
‘linear’:基于三角形的线性插值(缺省算法);
‘cubic’: 基于三角形的三次插值;
‘nearest’:最邻近插值法;
‘v4’:MATLAB 4 中的griddata 算法。
pro1
1、错得离谱
不仔细看表格,xlsread把样本点的序号也读入了数据矩阵
太致命了,下次碰到不确定的用法一定要测试
[num,txt,raw]=xlsread('data.xls', 2);
c=num;
c(:,1)=[];
2、访问数组元素要记得下标,不要直接用数组名(有时数组之间进行运算他也不报错,但结果就死了
3、理解上,一开始脑子没转过弯,每个区域浓度计算的和 要除以该区域样本点的个数
clc,clear
format short g
x=xlsread('data.xls','sheet1','B4:B322');
y=xlsread('data.xls','sheet1','C4:C322');
z=xlsread('data.xls','sheet1','D4:D322');
% u=xlsread('data.xls','sheet2','B4:B322');
area=xlsread('data.xls','sheet1','E4:E322');
[num,txt,raw]=xlsread('data.xls', 2);
c=num;
c(:,1)=[];
len=length(x)% 319
% arpha*L(i,j):第i种重金属在j区域的存在量 (8,5)
L=zeros(8,5);
% h=0.1
% s=1000000
% rho%=[rho1,rho2,rho3] %密度
% arpha=dm=rho*h*s
c(:,1);
cnt=zeros(5,1) %每个区域样本点的个数
for i=1:8 %第i种元素
for k=1:len %样本点
j=area(k); %第k个样本点在区域j
L(i,j)=L(i,j)+c(k,i); %第i种元素
end
end
L
for k=1:len %样本点
j=area(k) ;%第k个样本点在区域j
cnt(j)=cnt(j)+1;
end
cnt
average=zeros(8,5);
for i=1:5
averge(:,i)=L(:,i)/cnt(i);
end
averge
RI=zeros(1,5);%5个区域分别的污染指数
T=[10,30,2,5,40,5,5,1];%重金属i的毒性系数
bv=[3.6,130,31,13.2,35,12.3,31,69];
for i=1:8
for j=1:5
RI(j)=RI(j)+T(i)/bv(i)*averge(i,j);
end
end
RI