new to Matlab, first code questions and critique
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I started using Matlab not quite a week ago... I was super excited when I got this code below to work, but when I see how efficient the code can be, and realize I don't know what I don't know, and believe this to be a great community, I figured I'd see if I could get some feedback as to how this code could be better, more efficient, and perhaps not break foundational rules of coding I'm not actually familiar with... thanks, Hew
clear data ii kk mm
data=p552r2_tnL; % I have p552r1, p552r2...p552rn but can't seem to index them so I type the names in here,
% they aren't always the same length
[m,n] = size (data);
regr_valuesn = zeros (14,2);
% I'm using this n at the end to indicate I'd like to index as the file name above indexes, but I couldn't get
% it to do it... I use this n at the end of vector names used below as well
ii = 1;
kk = 1;
for ii=1:14
regr_valuesn (kk,1:2)=polyfit(data(:,1),data(:,2+3*ii),1); % my y values start at column 5 and skip every 3
kk = kk + 1;
end
% polyfit gives p1(1) and p1(2) so I stored it in regn_valuesn in two columns, but though there might be a way
% to get this into one cell(?)
% basic regression code I borrowed off youtube to create the code below
%yfit = p1(1) * x + p1(2);
%yresid = y - yfit;
%ssresid = sum(yresid.^2);
%sstotal = length(y)-1) * var(y);
%rsq = 1 - ssresid/sstotal;
% I only want the regression values and r-squared, but end up creating all the other stuff in the
% workspace as well...
jj = 1;
mm = 1;
for jj=1:14
yfitn (:,jj) = regr_valuesn(jj,1)*data(:,1) + regr_valuesn (jj,2);
yresidn (:,jj) = data(:,2+3*mm) - yfitn(:,jj);
ssresidn (:,jj) = sum(yresidn(:,jj).^2);
sstotaln (:,jj) = (length(data)-1) * var(data(:,2+3*mm));
rsqn (:,jj) = 1 - ssresidn(:,jj)/sstotaln(:,jj);
mm = mm +1;
end
1 commentaire
Stephen23
le 25 Sep 2018
"I have p552r1, p552r2...p552rn but can't seem to index them so I type the names in here"
The most important question is: how did you get those variables into the workspace? Once you fix the data importation then you could easily write the rest of your code to loop over it.
Typing a new name each time you run the code is not a very efficient use of your time, nor is "indexing" a good idea. In fact, dynamically accessing variable names is one way that beginners force themselves into writing slow, complex, buggy code that is hard to debug. Read this to know why:
A much more efficient solution is to use indexing with one array (which could be ND numeric, cell, table, structure, etc.).
Réponses (0)
Voir également
Catégories
En savoir plus sur Text Files dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!