Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (1)
Torsten
el 10 de Mzo. de 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 comentarios
Torsten
el 10 de Mzo. de 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.
Ver también
Categorías
Más información sobre Applications en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!