Matlab-ongelma

Seuraa 
Viestejä45973
Liittynyt3.9.2015

Tämä matlab-koodi ei toimi oikein, sillä M:n pitäisi olla NxN-matriisi, muttei se ole. Myös while lauseet eivät toimi oikein, sillä silmukka pyörii liian pitkään verrattuna käytettyyn ehtoon. kutsussa on käytetty arvoja L=5, v=0.067, E0=0.486 ja m=10, N=jokin kokonaisluku. Selventävänä tietona mainittakoon, että kyseessä on äärellisen syvyisen potentiaalikaivon Schrödingerin yhtälön ominaisfunktioiden ja -arvojen numeerinen ratkaiseminen. Kaivon reunat ovat kohdissa x=-L ja x=L . Miten korjaan while lauseiden toiminnan ja M-matriisin koon tarkoitetuksi?

function H3=harjoitus3k(N,L,v,E0,m)
%N=laskentapisteiden määrä;L=kuopan leveys(nm);v=efektiivisen massan kerroin
%m=laskenta-alueen leveyden määräävä kerroin

e=1.60217653*10^(-19);h=6.6260693*10^(-34);
me=9.1093897*10^(-31);

a=(1/(2*pi))^2/(2*v*me*e*10^(-18));
%tarvittavien vakioiden määrittely

%määritetään laskenta-alue aaltofunktiolle
t=2*m*L/(N-1);
x=-m*L:t:m*L;
f=0;
k=0;

n=1;
while x(n) < -L
n=n+1;
end
k=n+1;
while x(n) <= L
n=n+1;;
end
f=n;

l=f-k;%M-matriisin muodostamisessa tarvittava apumuuttuja,
%joka kertoo kuopan sisään jäävien laskentapisteiden määrän

H=ones(k-1,1);K=ones(l,1);Z=zeros(k-1);X=zeros(k-1,l);A=ones(N-1,1);C=diag(A,-1)+diag(A,1);
C=-a/t^2 .*C;F=(2*a/t^2+E0) .*diag(H);G=2*a/t^2 .*diag(K);
Q=horzcat(F,X,Z);S=horzcat(X',G,X');W=horzcat(Z,X,F);M=vertcat(Q,S,W);%M=C+M;

size(M)

x(k-1)

x(k)

x(f)

x(f+1)

Kommentit (1)

H
Seuraa 
Viestejä2622
Liittynyt16.3.2005
kiltanen
Tämä matlab-koodi ei toimi oikein, sillä M:n pitäisi olla NxN-matriisi, muttei se ole. Myös while lauseet eivät toimi oikein, sillä silmukka pyörii liian pitkään verrattuna käytettyyn ehtoon. Miten korjaan while lauseiden toiminnan ja M-matriisin koon tarkoitetuksi?

Miksi käytät whilea? Käytä mielummin find(x<-L). Jos kuitenkin käytät whilea, ehto pitäisi olla (x <= -L).

Uusimmat

Suosituimmat