Matlab - create a table from a vector in the first row and another in the first column
    2 views (last 30 days)
  
       Show older comments
    
    Jacqueline Rigatto
 on 3 Oct 2020
  
    
    
    
    
    Commented: Mathieu NOE
      
 on 7 Oct 2020
            Hello, I am trying to make a table inside Matlab, but it is not coming out with the correct results.
My routine:
alpha=0.008;
gamma=3.3;
g=9.80665; 
delta_1=0.07; % if f<=fp
delta_2=0.09; % if f>fp
Tp=2:16;   
fp=1./Tp;  
T=2:16;    
f=1./T;    
 nrows = 14;  
ncols = 14;
E = ones(nrows,ncols);
for fp = 1:ncols      
    for f = 1:nrows   
        if f<=fp
            E(f,fp) = (alpha*(g^2)*((2*pi)^(-4))*(f^(-5)))*exp((-5/4)*((f/fp)^(-4)))*gamma*exp((-1/2)*((f-fp)/(delta_1*fp))^2);
        elseif f>fp
            E(f,fp) = (alpha*(g^2)*((2*pi)^(-4))*(f^(-5)))*exp((-5/4)*((f/fp)^(-4)))*gamma*exp((-1/2)*((f-fp)/(delta_2*fp))^2);
        else
            E(f,fp) = 0;
        end
    end
end
E
Attached is a figure that is reality (as it turned out) and another as expectation (as it was meant to be).
I thank you for your help.
0 Comments
Accepted Answer
  Mathieu NOE
      
 on 6 Oct 2020
        hello 
i noticed some mistakes  regarding usage of f and fp : you have initialised as vectors of decimal scalars. Then later on, you use them as loop index , therefore overwritting the f and fp values as integers. I guess this was not the intention.
i could not get the expected result because I don't know how the reference (expected)  data where generated. i miss this info.
What is sure, is that the row / columns where we expect to see 0 cannot be obtained with your matlab code. So there must be another error somewhere in the logic and / or in the equations. 
if you could send me the math behind what you are trying to do, I could better help you.
FYI, this is how I modified your code in the first place
clc
clear all
%%%%%%%%%%
alpha=0.008;
gamma=3.3;
g=9.80665; 
delta_1=0.07; % if f<=fp
delta_2=0.09; % if f>fp
Tp=2:16;   
% fp=1./Tp;  
fp_vector=1./Tp;  % 
T=2:16;    
% f=1./T;    
f_vector=1./T;   
nrows = 14;  
ncols = 14;
E = ones(nrows,ncols);
% ?? f and fp cannot be at the same time used as vector of decimal scalars and index in a for loop
% see correction below
% for fp = 1:ncols      % fp loop
for cj = 1:ncols      % fp loop
%     for f = 1:nrows   % f loop
    for ci = 1:nrows   % f loop
        % extract f and fp  value
        f = f_vector(ci);
        fp = fp_vector(cj);
        if f<=fp
            E(ci,cj) = (alpha*(g^2)*((2*pi)^(-4))*(f^(-5)))*exp((-5/4)*((f/fp)^(-4)))*gamma*exp((-1/2)*((f-fp)/(delta_1*fp))^2);
        elseif f>fp
            E(ci,cj) = (alpha*(g^2)*((2*pi)^(-4))*(f^(-5)))*exp((-5/4)*((f/fp)^(-4)))*gamma*exp((-1/2)*((f-fp)/(delta_2*fp))^2);
        else
            E(ci,cj) = 0
            % this condition is never reached as all cases are already covered with the two conditions above
            % so what condition is supposed to give E = 0 ? 
        end
    end
end
E
2 Comments
More Answers (0)
See Also
Categories
				Find more on Logical in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
