Matlab 我的多边形拟合的最终结果是NaN,但我删除了矩阵的NaN,并保留了相同的大小,你能帮我吗?
示例数据:Matlab 我的多边形拟合的最终结果是NaN,但我删除了矩阵的NaN,并保留了相同的大小,你能帮我吗?,matlab,Matlab,示例数据: 3.0000 4.8500 3.2700 4.8900 3.3100 4.9000 2.7500 4.8600 2.9400 5.0000 4.9200 0 4.8900 0 4.9000 0 4.9000 0 7.0000 4.9000 0 4.8600 0 4.9000 0
3.0000 4.8500 3.2700 4.8900 3.3100 4.9000 2.7500 4.8600 2.9400
5.0000 4.9200 0 4.8900 0 4.9000 0 4.9000 0
7.0000 4.9000 0 4.8600 0 4.9000 0 4.9300 0
8.0000 0 1.7800 0 2.6800 0 2.1300 0 2.8000
9.0000 0 1.3800 0 1.6300 0 1.2200 0 1.8200
10.0000 0 0.9200 0 1.3100 0 0.9500 0 1.4200
11.0000 0 1.3200 0 1.3100 0 1.0100 0 1.7500
12.0000 0 1.7000 0 1.4200 0 1.1400 0 2.3900
13.0000 0 2.3400 0 2.3800 0 2.1400 0 4.4800
14.0000 0 4.2600 0 2.7400 0 2.8300 0 4.7300
15.0000 0 0 0 0 0 3.4600 0 5.0400
Columns 10 through 17
4.9900 3.0700 4.9200 3.0300 4.9600 3.7400 4.9600 3.4400
4.9000 3.5800 4.9800 3.9000 4.9500 3.0000 0 3.5800
4.9200 0 4.9500 0 0 0 0 0
0 3.1300 0 3.9900 0 1.8300 0 3.3800
0 2.4800 0 2.2000 0 1.2800 0 2.9900
0 1.6100 0 1.8800 0 0.9200 0 2.7500
0 2.2000 0 1.7000 0 1.0200 0 2.2100
0 2.3800 0 1.6700 0 1.4600 0 2.7500
0 0 0 1.9500 0 1.5800 0 2.9600
0 0 0 3.0000 0 2.6700 0 0
0 0 0 3.2800 0 4.3400 0 0
代码:
function [LacMin] = lac(dat)
Cal = 5.0; %Valor de Calibração;
StLido = dat(1:3,2:2:end); %Identificando Padroes;
StLido(StLido==0) = NaN; %Exluindo zeros;
Pmed = nanmean(StLido); %Padrão Médio;
pa = Pmed(1,1); %Selecionando padrão para cada indivíduo;
pb = Pmed(1,2);
pc = Pmed(1,3);
pd = Pmed(1,4);
pe = Pmed(1,5);
pf = Pmed(1,6);
pg = Pmed(1,7);
ph = Pmed(1,8);
% pi = Pmed(1,9);
% pj = Pmed(1,10);
% pk = Pmed(1,11);
% pl = Pmed(1,12);
% pm = Pmed(1,13);
% pn = Pmed(1,14);
% po = Pmed(1,15);
% pp = Pmed(1,16);
% pq = Pmed(1,17);
% pr = Pmed(1,18);
% ps = Pmed(1,19);
% pt = Pmed(1,20);
% pu = Pmed(1,21);
% pv = Pmed(1,22);
% px = Pmed(1,23);
% py = Pmed(1,24);
% pw = Pmed(1,25);
% pz = Pmed(1,26);
LacLido = dat(:,3:2:end);
aa = LacLido(:,1); %Selecionando Indivíduos e suas [LAC];
ab = LacLido(:,2);
ac = LacLido(:,3);
ad = LacLido(:,4);
ae = LacLido(:,5);
af = LacLido(:,6);
ag = LacLido(:,7);
ah = LacLido(:,8);
% ai = LacLido(:,9);
% aj = LacLido(:,10);
% ak = LacLido(:,11);
% al = LacLido(:,12);
% am = LacLido(:,13);
% an = LacLido(:,14);
% ao = LacLido(:,15);
% ap = LacLido(:,16);
% aq = LacLido(:,17);
% ar = LacLido(:,18);
% as = LacLido(:,19);
% at = LacLido(:,20);
% au = LacLido(:,21);
% av = LacLido(:,22);
% ax = LacLido(:,23);
% ay = LacLido(:,24);
% aw = LacLido(:,25);
% az = LacLido(:,26);
caa = (((aa.*Cal)./pa).*3); %Corrigindo [LAC] e depois agrupando os resultados;
cab = (((ab.*Cal)./pb).*3);
cac = (((ac.*Cal)./pc).*3);
cad = (((ad.*Cal)./pd).*3);
cae = (((ae.*Cal)./pe).*3);
caf = (((af.*Cal)./pf).*3);
cag = (((ag.*Cal)./pg).*3);
cah = (((ah.*Cal)./ph).*3);
% cai = (((ai.*Cal)./pi).*3);
% caj = (((aj.*Cal)./pj).*3);
% cak = (((ak.*Cal)./pk).*3);
% cal = (((al.*Cal)./pl).*3);
% cam = (((am.*Cal)./pm).*3);
% can = (((an.*Cal)./pn).*3);
% cao = (((ao.*Cal)./po).*3);
% cap = (((ap.*Cal)./pp).*3);
% caq = (((aq.*Cal)./pq).*3);
% car = (((ar.*Cal)./pr).*3);
% cas = (((as.*Cal)./ps).*3);
% cat = (((at.*Cal)./pt).*3);
% cau = (((au.*Cal)./pu).*3);
% cav = (((av.*Cal)./pv).*3);
% cax = (((ax.*Cal)./px).*3);
% cay = (((ay.*Cal)./py).*3);
% caw = (((aw.*Cal)./pw).*3);
% caz = (((az.*Cal)./pz).*3);
LacCor = [caa,cab,cac,cad,cae,caf,cag,cah];%cai,caj,cak,cal,cam,can,cao,cap,caq,car,cas,cat,cau,cav,cax,cay,caw,caz];
pka = max(LacCor(1:3,1)); %Identificando [LAC]pico;
pkb = max(LacCor(1:3,2));
pkc = max(LacCor(1:3,3));
pkd = max(LacCor(1:3,4));
pke = max(LacCor(1:3,5));
pkf = max(LacCor(1:3,6));
pkg = max(LacCor(1:3,7));
pkh = max(LacCor(1:3,8));
% pki = max(LacCor(1:3,9));
% pkj = max(LacCor(1:3,10));
% pkk = max(LacCor(1:3,11));
% pkl = max(LacCor(1:3,12));
% pkm = max(LacCor(1:3,13));
% pkn = max(LacCor(1:3,14));
% pko = max(LacCor(1:3,15));
% pkp = max(LacCor(1:3,16));
% pkq = max(LacCor(1:3,17));
% pkr = max(LacCor(1:3,18));
% pks = max(LacCor(1:3,19));
% pkt = max(LacCor(1:3,20));
% pku = max(LacCor(1:3,21));
% pkv = max(LacCor(1:3,22));
% pkx = max(LacCor(1:3,23));
% pky = max(LacCor(1:3,24));
% pkw = max(LacCor(1:3,25));
% pkz = max(LacCor(1:3,26));
ba = [pka;LacCor(4:end,1)]; %Agrupando [LAC]pico ás [LAC] do incremental;
bb = [pkb;LacCor(4:end,2)];
bc = [pkc;LacCor(4:end,3)];
bd = [pkd;LacCor(4:end,4)];
be = [pke;LacCor(4:end,5)];
bf = [pkf;LacCor(4:end,6)];
bg = [pkg;LacCor(4:end,7)];
bh = [pkh;LacCor(4:end,8)];
% bi = [pki;LacCor(4:end,9)];
% bj = [pkj;LacCor(4:end,10)];
% bk = [pkk;LacCor(4:end,11)];
% bl = [pkl;LacCor(4:end,12)];
% bm = [pkm;LacCor(4:end,13)];
% bn = [pkn;LacCor(4:end,14)];
% bo = [pko;LacCor(4:end,15)];
% bp = [pkp;LacCor(4:end,16)];
% bq = [pkq;LacCor(4:end,17)];
% br = [pkr;LacCor(4:end,18)];
% bs = [pks;LacCor(4:end,19)];
% bt = [pkt;LacCor(4:end,20)];
% bu = [pku;LacCor(4:end,21)];
% bv = [pkv;LacCor(4:end,22)];
% bx = [pkx;LacCor(4:end,23)];
% by = [pky;LacCor(4:end,24)];
% bw = [pkw;LacCor(4:end,25)];
% bz = [pkz;aLacCor(4:end,26)];
b = [ba,bb,bc,bd,be,bf,bg,bh]; %%%%bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bx,by,bw,bz];
Intensidade = dat(3:end,1);
[nl,nc]=size(b);
Intensidade = (Intensidade(1:nl)); %Normalizando a Intensidade;
mpr = [Intensidade,b];
mpr(mpr==0)= NaN; %Identificando zeros e colocando NaN;
v = ~any(isnan(mpr)); %Identificando e excluindo os NaN do polinomio;
da = polyfit(mpr(v,1), mpr(v,2), 2); %Polinomio;
db = polyfit(mpr(v,1), mpr(v,3), 2);
dc = polyfit(mpr(v,1), mpr(v,4), 2);
dd = polyfit(mpr(v,1), mpr(v,5), 2);
de = polyfit(mpr(v,1), mpr(v,6), 2);
df = polyfit(mpr(v,1), mpr(v,7), 2);
dg = polyfit(mpr(v,1), mpr(v,8), 2);
dh = polyfit(mpr(v,1), mpr(v,9), 2);
% di = polyfit(mpr(v,1), mpr(v,10), 2);
% dj = polyfit(mpr(v,1), mpr(v,11), 2);
% dk = polyfit(mpr(v,1), mpr(v,12), 2);
% dl = polyfit(mpr(v,1), mpr(v,13), 2);
% dm = polyfit(mpr(v,1), mpr(v,14), 2);
% dn = polyfit(mpr(v,1), mpr(v,15), 2);
% do = polyfit(mpr(v,1), mpr(v,16), 2);
% dp = polyfit(mpr(v,1), mpr(v,17), 2);
% dq = polyfit(mpr(v,1), mpr(v,18), 2);
% dr = polyfit(mpr(v,1), mpr(v,19), 2);
% ds = polyfit(mpr(v,1), mpr(v,20), 2);
% dt = polyfit(mpr(v,1), mpr(v,21), 2);
% du = polyfit(mpr(v,1), mpr(v,22), 2);
% dv = polyfit(mpr(v,1), mpr(v,23), 2);
% dx = polyfit(mpr(v,1), mpr(v,24), 2);
% dy = polyfit(mpr(v,1), mpr(v,25), 2);
% dw = polyfit(mpr(v,1), mpr(v,26), 2);
% dz = polyfit(mpr(v,1), mpr(v,27), 2);
abc = [da;db;dc;dd;de;df;dg;dh]; %;di;dj;dk;dl;dm;dn;do;dp;dq;dr;ds;dt;du;dv;dx;dy;dw;dz];
LacMinA = (abc(1,2)./(2*abc(1,1)));% Determinando LacMin Atleta (A);
LacMinB = (abc(2,2)./(2*abc(2,1)));
LacMinC = (abc(3,2)./(2*abc(3,1)));
LacMinD = (abc(4,2)./(2*abc(4,1)));
LacMinE = (abc(5,2)./(2*abc(5,1)));
LacMinF = (abc(6,2)./(2*abc(6,1)));
LacMinG = (abc(7,2)./(2*abc(7,1)));
LacMinH = (abc(8,2)./(2*abc(8,1)));
%LacMinI = (abc(9,2)./(2*abc(9,1)));
%LacMinJ = (abc(10,2)./(2*abc(10,1)));
%LacMinK = (abc(11,2)./(2*abc(11,1)));
%LacMinL = (abc(12,2)./(2*abc(12,1)));
%LacMinM = (abc(13,2)./(2*abc(13,1)));
%LacMinN = (abc(14,2)./(2*abc(14,1)));
%LacMinO = (abc(15,2)./(2*abc(15,1)));
%LacMinP = (abc(16,2)./(2*abc(16,1)));
%LacMinQ = (abc(17,2)./(2*abc(17,1)));
%LacMinR = (abc(18,2)./(2*abc(18,1)));
%LacMinS = (abc(19,2)./(2*abc(19,1)));
%LacMinT = (abc(20,2)./(2*abc(20,1)));
%LacMinU = (abc(21,2)./(2*abc(21,1)));
%LacMinV = (abc(22,2)./(2*abc(22,1)));
%LacMinX = (abc(23,2)./(2*abc(23,1)));
%LacMinY = (abc(24,2)./(2*abc(24,1)));
%LacMinW = (abc(25,2)./(2*abc(25,1)));
%LacMinZ = (abc(26,2)./(2*abc(26,1)));
LacMin = [LacMinA,LacMinB,LacMinC,LacMinD,LacMinE,LacMinF,LacMinG,LacMinH]; %,LacMinI,LacMinJ,LacMinK,LacMinL,LacMinM,LacMinN,LacMinO,LacMinP,LacMinQ,LacMinR,LacMinS,LacMinT,LacMinU,LacMinV,LacMinX,LacMinY,LacMinW,LacMinZ];
[LacMin] = LacMin./-1
end
这一特殊问题在于:
v = ~any(isnan(mpr)); %Identificando e excluindo os NaN do polinomio;
da = polyfit(mpr(v,1), mpr(v,2), 2); %Polinomio;
...
您正在查找不带NaN的mpr
列,但随后使用该掩码对行进行索引-您没有得到错误的唯一原因是,此时mpr
恰好是一个方阵。如果您选中,您将看到any
将维度作为其第二个参数-这很重要
顺便说一句,因为我正在运行您的代码来检查它,所以我冒昧地对它进行了矢量化。这不是更容易处理吗?非平凡位是使用
repmat
来处理从向量/标量到矩阵/向量的Pmed
除法,并且循环因为polyfit
是不可向量化的
function [LacMin] = lac2(dat)
Cal = 5.0; %Valor de Calibração;
StLido = dat(1:3,2:2:end); %Identificando Padroes;
StLido(StLido==0) = NaN; %Exluindo zeros;
Pmed = repmat(nanmean(StLido), size(dat,1), 1); %Padrão Médio;
LacLido = dat(:,3:2:end);
LacCor = (((LacLido.*Cal)./Pmed).*3); %Corrigindo [LAC] e depois agrupando os resultados;
pka = max(LacCor(1:3,:)); %Identificando [LAC]pico;
b = [pka;LacCor(4:end,:)]; %Agrupando [LAC]pico ás [LAC] do incremental;
Intensidade = dat(3:end,1);
[nl,nc]=size(b);
Intensidade = (Intensidade(1:nl)); %Normalizando a Intensidade;
mpr = [Intensidade,b];
mpr(mpr==0)= NaN; %Identificando zeros e colocando NaN;
v = ~any(isnan(mpr), 2); %Identificando e excluindo os NaN do polinomio;
abc = zeros(nc, 3);
for ii=1:nc
abc(ii,:) = polyfit(mpr(v,1), mpr(v,ii+1), 2); %Polinomio;
end
LacMin = -(abc(:,2)./(2*abc(:,1)))';% Determinando LacMin Atleta (A);
end
我不能保证这是完美的,因为我几乎没有努力去理解这段代码的实际功能,但它基本上只是一个简单的语法转换,并为给定的输入生成与原始代码相同的结果。我建议您看看矢量化在编写代码方面的不同之处——一旦您开始充分利用它所能做的一切,Matlab将变得更加有趣。欢迎使用矢量化。请务必包括您期望看到的内容、您看到的内容以及您已经尝试过的内容。此外,我怀疑是否有人愿意阅读那么多代码,因此为了您自己的利益,请将问题中的代码限制在绝对必要的范围内,可能总共不超过三到四个命令。耶,太好了!非常感谢!最好不是这样,我需要帮助。当我使用你们的代码时,有并没有什么方法来绘制这些值?每种情况下的单点图?