Effacer les filtres
Effacer les filtres

Hello, I'm trying to plot a normalized wave function of a free particle. My problem is normalizing the function. But get nothin. I use the following values, (10,100,10,10)

3 vues (au cours des 30 derniers jours)
function Vogfunktion(Dx, n, m,T)
V = 1;
h_bar = 1.054 * 10^-34;
x = linspace(0 , n*Dx, n);
F =zeros(1,n);
for i = 1:n
for E = 1:n
V = V + T*i;
k = sqrt(2*m*(E+V)/(h_bar^2));
psi_i = (sin(k*Dx*(i+1)) + sin(k*Dx*(i-1))/(2 + (Dx^2)* (2*m/h_bar^2)));
Norm = sqrt(1/trapz(psi_i));
if Norm ~= 0
F(i) = Norm;
end
end
end
plot(x,F)
ylim([-5,5]);
xlim([0,2*Dx*i]);
ylabel('psi')
xlabel('sträcka')

Réponse acceptée

Walter Roberson
Walter Roberson le 11 Déc 2023
psi_i = (sin(k*Dx*(i+1)) + sin(k*Dx*(i-1))/(2 + (Dx^2)* (2*m/h_bar^2)));
Unless your m is non-scalar, or your Dx is a non-scalar square array, then your psi_i would either error or return a scalar.
Norm = sqrt(1/trapz(psi_i));
trapz() of a scalar is 0. 1/0 is inf. sqrt(inf) is inf.
In order for 1/trapz(psi_1) to be 0 (following test) then the trapz() would have to return inf. You might be able to get NaN for psi_i (such as if Dx is inf then sin(inf) is NaN) but you would have a hard time getting inf out of there. So Norm is not going to be 0.
if Norm ~= 0
F(i) = Norm;
end
You are inside a for E loop but are assigning to F(i) . Except for the case where somehow some of the E values lead to Norm 0 (which would require that the trapz be inf) then you are overwriting all of F(i) for each E value, and the final result would be the same as if you had only executed the last for E iteration.

Plus de réponses (0)

Catégories

En savoir plus sur Numerical Integration and Differentiation dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by