Why the I is always a constant
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
I=zeros(1,1);
f=zeros(1,1);
for ky=-6:1:6
for kx=-6:1:6
for n=0:1:2
for m=0:1:2
if n==0&&m==0
f(ky+7,kx+7)=1
else
f(ky+7,kx+7)=f(ky+7,kx+7)+exp(i*10^(-16)*(2.16*(n+m)*kx+1.245*(n-m)*ky))
end
end
I(ky+7,kx+7)=abs(f(ky+7,kx+7)).^2
end
end
end
contourf(-6:1:6,-6:1:6,I,'LineStyle','none');
Why the I doesnot change with kx,ky?
2 Kommentare
Adam Danz
am 29 Sep. 2019
In this part of your code, "i" is the imaginary number sqrt(-1). I have a feeling that variable is supposed to represent something else. When 'i' is not defined, matlab uses it to represent the imaginary unit.
exp(i*10^(-16)*(2.16*(n+m)*kx+1.245*(n-m)*ky))
% ^ here
Antworten (2)
KALYAN ACHARJYA
am 29 Sep. 2019
Bearbeitet: KALYAN ACHARJYA
am 29 Sep. 2019
Befor answering the question, It seems you are messing with code and logic, if yes, figure out.
Now the answer of the question
Why the I is always a constant?
In each iterartion (except one) your code fulfil the "if else" condition and assigned the value of
f(ky+7,kx+7)=f(ky+7,kx+7)+exp(i*10^(-16)*(2.16*(n+m)*kx+1.245*(n-m)*ky))
The "m for loop" have no role to change the I elements value, it pass the last iterration value. Each iteration when the code run with I assignment, it carries the same f(ky+7,kx+7) value and pass the same to I
>> f(ky+7,kx+7)
ans =
9.0000 + 0.0000i
Hence
I(ky+7,kx+7)=abs(f(ky+7,kx+7)).^2
How 81?
>> f(ky+7,kx+7)
ans =
9.0000 + 0.0000i
>> ans^2
ans =
81.0000 + 0.0000i
>> abs(ans)
ans =
81
Here the issue is not with I, please ensure that f(ky+7,kx+7) is changing during iterations, hence "I" will get different elements as a result.
Good Luck!
Walter Roberson
am 29 Sep. 2019
>> unique(f(:))
ans =
9 + 0i
9 - 4.93038065763132e-32i
9 + 4.93038065763132e-32i
9 - 9.86076131526265e-32i
9 + 9.86076131526265e-32i
9 - 3.888e-15i
9 + 3.888e-15i
9 - 3.888e-15i
9 + 3.888e-15i
9 - 7.776e-15i
9 + 7.776e-15i
9 - 7.776e-15i
9 + 7.776e-15i
9 - 1.1664e-14i
9 + 1.1664e-14i
9 - 1.1664e-14i
9 + 1.1664e-14i
9 - 1.5552e-14i
9 + 1.5552e-14i
9 - 1.5552e-14i
9 + 1.5552e-14i
9 - 1.944e-14i
9 + 1.944e-14i
9 - 1.944e-14i
9 + 1.944e-14i
9 - 2.3328e-14i
9 + 2.3328e-14i
9 - 2.3328e-14i
9 + 2.3328e-14i
Your f is changing -- in the imaginary component.
(2.16*(n+m)*kx+1.245*(n-m)*ky)
is not all that large compared to the 10^-16 that you are multiplying it by. Values that are on the order of 1E-16 * sqrt(-1) come out as 1 + small complex component when you exp() them. The complex components do not add up to much, so the real component (1) completely dominates. The result is that you get a matrix full of 9 + varying small complex component. When you take abs(f)^2 the 9^2 dominates and the approximately 1e-16 complex component squared does not contribute numerically to the calculation (too insignificant). Therefore I becomes constant, the non-constant part having underflowed out of the calculation.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Interactive Control and Callbacks finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!