Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.
    7 views (last 30 days)
  
       Show older comments
    
My code doesn't work, it gives me an error:
"Unable to perform assignment because the indices on the left side are not compatible with the size of the right side."
But before that, my code worked well until I made corrections to the functions: function p1 = f_p1(n,t)  and function p2 = f_p2(n,t);
I added a multiplier: (1 + 1./(pi*Kb*1.2.*(n+1).*0.1*2))
Why did such a problem arise, how can it be fixed?
My code:
%% initial conditions
% global k0 h_bar ksi m E C_2
global tau T 
Ef = 2.77*10^3; 
tau = 0.2; % TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
v_f = 1;
l_pr = 1;
T = 1.2; %kelvin
% tau = l_pr/v_f;
Kb = physconst('boltzmann'); % 1.38*10^(-23)
m = 9.1093837*10^(-31);
Tc = 1.2;
ksi = 10^(-9);
h_bar = (1.0545726*10^(-34));
k0 = (ksi/h_bar)*sqrt(2.*m.*pi.*Kb.*Tc);
C_2 = 6.81;
t = linspace(0.1, 2,500);
D = linspace(2*10^(-9), 70*10^(-9),500);
d = D./ksi;
for i=1:numel(d)
  for j = 1:numel(t)
    F(i,j) = f_calc(t(j),d(i), k0, h_bar, ksi, m, C_2);
  end
end
%plot(t,F)
figure
[c,h] = contour(t,d,F,[0 0]);
xlabel('d') 
ylabel('t')
% tv = c(2, 2:end);
% dv = c(1, 2:end);
[tv,dv] = getContour0(c,h); 
Q1 = [size(c); size(tv)]
figure
plot(dv, tv)
xlabel('d')
ylabel('t')
grid
function F = f_calc(t, d, k0, h_bar, ksi, m, C_2) 
    nD = floor(375/(2*pi.*t*1.2) - 0.5);
    F = 0;
for k = 0:nD
    F = F + 1/(2*k+1).*imag(f_lg(k,t,d,k0)+1i.*d.*k0.*((f_p1(k,t)-f_p2(k,t))./2)+1i*f_arg_1(k,t,d,k0)-1i*f_arg_2(k,t,d,k0));
end
    F = -(1/d).*F - 7.826922968141167;
end
function p1 = f_p1(n,t)  % new
global Kb 
    p1 = ((1+1i)./sqrt(2)).*sqrt(t.*(2.*n+1).*(1 + 1./(pi*Kb*1.2.*(n+1).*0.1*2)));
end
function p2 = f_p2(n,t) % new
global Kb 
    p2 = sqrt(3601+1i.*t.*(2.*n+1).*(1 + 1./(pi*Kb*1.2.*(n+1).*0.1*2)));
end 
function arg_1 = f_arg_1(n,t,d,k0)
    arg_1 = angle(1+exp(-1i.*d*k0.*f_p1(n,t)));
end
function arg_2 = f_arg_2(n,t,d,k0)
    arg_2 = angle(1+exp(-1i.*d*k0.*f_p2(n,t)));
end
function n_lg = f_lg(n,t,d,k0)
    arg_of_lg = (1+exp(-1i.*d.*k0.*f_p1(n,t)))/(1+exp(-1i.*d.*k0.*f_p2(n,t)));
    n_lg = log(abs(arg_of_lg));
end
function [xv,yv] = getContour0(M,C) 
Levels = C.LevelList 
    for k = 1:numel(Levels)
        idx = find(M(1,:) == 0);
        ValidV = rem(M(2,idx),1) == 0;
        StartIdx{k,:} = idx(ValidV);
        VLen{k,:} = M(2,StartIdx{k});
%         Q3 = numel(StartIdx{k})
            for k1 = 1:numel(StartIdx{k})
%                 Q4 = StartIdx{k}(k1)
                idxv = StartIdx{k}(k1)+1 : StartIdx{k}(k1)+VLen{k}(k1);         
                xc{k1} = M(1,idxv);
                yc{k1} = M(2,idxv);
            end
    end
    xy = [cell2mat(xc); cell2mat(yc)].'; 
    xy = sortrows(xy,2);
    xv = xy(:,1).'; 
    yv = xy(:,2).';
end
0 Comments
Answers (1)
  Torsten
      
      
 on 10 Mar 2023
        You don't define Kb as a global variable in the part of your code where you set it as
Kb = physconst('boltzmann'); % 1.38*10^(-23)
2 Comments
  Torsten
      
      
 on 10 Mar 2023
				It works if you replace the first line of your code by 
global tau T Kb
If it gives reasonable results: I don't know.
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!