Scilab 中错误定义的子矩阵
Submatrix incorrectly defined in Scilab
我得到了一个莫尔斯势来解决并通过 scilab 找到它的能量特征值和向量。但是我有一个问题,因为 scilab 说子矩阵定义不正确。
我想看看为什么我的矩阵不正确。我是这个平台的新手。
De=4.618;
b=18.118;
x=0.1275;
a=0.35;
hc=197.327;
mu=912847000;
N=45;
c=(De/(2*a*b));
d=exp(2*b*(x-a));
e=exp(2*b*x);
i=exp(b*x);
f=(2*De/(a*b));
g=((a*b)^(2));
h=(De*a*b/(2));
h=zeros(N,N);
s=eye(N,N);
for n=1:N
h(n,n)=(((n*%pi*hc)^2)/(2*mu*a^(2)))+De-(c*d)+(c*e)+(f*d)-(f*e)-((h*(e-d))/(g+(%pi^(2)*n^(2))))+4*((h*(e-d))/(g+(4*(%pi^(2)*n^(2)))));
for m=n+1:N
h(m,n)=4*h*(1-(exp(-2*b*a)*((-1)^(m+n))))*e*((1/(4*g+(((m-n)^(2))*%pi^2)))-(1/(4*g+(((m+n)^(2))*%pi^2))))+4*h*i*(1-(exp(-1*b*a)*((-1)^(m+n))))*e*((1/(g+(((m+n)^(2))*%pi^2)))-(1/(g+(((m-n)^(2))*%pi^2))))
h(n,m)=h(m,n);
end
end
[al,bl,R]=spec(h,s);
el=al./bl;
e=R;
[el,k]=gsort(el)
disp(h);
disp(el)
您将名称 h
用于两个不同的变量(一个标量和一个矩阵),这就是计算失败的原因。顺便说一句,您使用了许多无用的括号(这对阅读您的代码没有帮助)。每次在定义它的行之后引用矩阵时,您可以安全地将 h
替换为大写 H
:
H=zeros(N,N);
s=eye(N,N);
for n=1:N
H(n,n)=(((n*%pi*hc)^2)/(2*mu*a^(2)))+De-(c*d)+(c*e)+(f*d)-(f*e)-((h*(e-d))/(g+(%pi^(2)*n^(2))))+4*((h*(e-d))/(g+(4*(%pi^(2)*n^(2)))));
for m=n+1:N
H(m,n)=4*h*(1-(exp(-2*b*a)*((-1)^(m+n))))*e*((1/(4*g+(((m-n)^(2))*%pi^2)))-(1/(4*g+(((m+n)^(2))*%pi^2))))+4*h*i*(1-(exp(-1*b*a)*((-1)^(m+n))))*e*((1/(g+(((m+n)^(2))*%pi^2)))-(1/(g+(((m-n)^(2))*%pi^2))))
H(n,m)=H(m,n);
end
end
[al,bl,R]=spec(H,s);
el=al./bl;
e=R;
[el,k]=gsort(el)
disp(H);
disp(el)
我得到了一个莫尔斯势来解决并通过 scilab 找到它的能量特征值和向量。但是我有一个问题,因为 scilab 说子矩阵定义不正确。
我想看看为什么我的矩阵不正确。我是这个平台的新手。
De=4.618;
b=18.118;
x=0.1275;
a=0.35;
hc=197.327;
mu=912847000;
N=45;
c=(De/(2*a*b));
d=exp(2*b*(x-a));
e=exp(2*b*x);
i=exp(b*x);
f=(2*De/(a*b));
g=((a*b)^(2));
h=(De*a*b/(2));
h=zeros(N,N);
s=eye(N,N);
for n=1:N
h(n,n)=(((n*%pi*hc)^2)/(2*mu*a^(2)))+De-(c*d)+(c*e)+(f*d)-(f*e)-((h*(e-d))/(g+(%pi^(2)*n^(2))))+4*((h*(e-d))/(g+(4*(%pi^(2)*n^(2)))));
for m=n+1:N
h(m,n)=4*h*(1-(exp(-2*b*a)*((-1)^(m+n))))*e*((1/(4*g+(((m-n)^(2))*%pi^2)))-(1/(4*g+(((m+n)^(2))*%pi^2))))+4*h*i*(1-(exp(-1*b*a)*((-1)^(m+n))))*e*((1/(g+(((m+n)^(2))*%pi^2)))-(1/(g+(((m-n)^(2))*%pi^2))))
h(n,m)=h(m,n);
end
end
[al,bl,R]=spec(h,s);
el=al./bl;
e=R;
[el,k]=gsort(el)
disp(h);
disp(el)
您将名称 h
用于两个不同的变量(一个标量和一个矩阵),这就是计算失败的原因。顺便说一句,您使用了许多无用的括号(这对阅读您的代码没有帮助)。每次在定义它的行之后引用矩阵时,您可以安全地将 h
替换为大写 H
:
H=zeros(N,N);
s=eye(N,N);
for n=1:N
H(n,n)=(((n*%pi*hc)^2)/(2*mu*a^(2)))+De-(c*d)+(c*e)+(f*d)-(f*e)-((h*(e-d))/(g+(%pi^(2)*n^(2))))+4*((h*(e-d))/(g+(4*(%pi^(2)*n^(2)))));
for m=n+1:N
H(m,n)=4*h*(1-(exp(-2*b*a)*((-1)^(m+n))))*e*((1/(4*g+(((m-n)^(2))*%pi^2)))-(1/(4*g+(((m+n)^(2))*%pi^2))))+4*h*i*(1-(exp(-1*b*a)*((-1)^(m+n))))*e*((1/(g+(((m+n)^(2))*%pi^2)))-(1/(g+(((m-n)^(2))*%pi^2))))
H(n,m)=H(m,n);
end
end
[al,bl,R]=spec(H,s);
el=al./bl;
e=R;
[el,k]=gsort(el)
disp(H);
disp(el)