1

我试图绘制无限线性链的 DOS。通过以下方式:

s = 10; (*Number of decimation*) 
t = 1;
step = 0.01;
SubStar[E] = w + I*\[Eta];
\[Eta] = 0.01;
\[Epsilon] = 0;


Subscript[\[Beta], 1] = t*1/(SubStar[E] - \[Epsilon])*t;

Subscript[\[Beta], 0] = 1;



For[j = 2, j < s + 1, j++, 
 Subscript[\[Beta], j] = 
  Subscript[\[Beta], j - 1]*1/(SubStar[E] - \[Epsilon] - 2 \!\(
\*SubsuperscriptBox[\(\[Sum]\), \(i = 1\), \(j - 1\)]
\*SubscriptBox[\(\[Beta]\), \(i\)]\))*Subscript[\[Beta], j - 1]];

Subscript[G, 1, 1] = 1/(SubStar[E] - \[Epsilon] - \!\(
\*SubsuperscriptBox[\(\[Sum]\), \(j = 1\), \(s\)]
\*SubscriptBox[\(\[Beta]\), \(j\)]\));

G22 = (1/(1 - Subscript[G, 1, 1]*Subscript[G, 1, 1]))*Subscript[G, 1, 
   1];

\[Rho] = -1/\[Pi]*Im[G22];

我想将 [Rho] 绘制为 w 的函数。所以,如果我让 w 在开头(上面的代码)和 plot: ListPlot[Table[{w, \[Rho]}, {w, -2.5, 2.5, step}], Joined -> True, Frame -> True]
它工作得很好,但速度很慢,可能是因为数学在代数上做所有的事情。如果我改变 w,比如使用:w=Range[-2.5,2.5,step],那么我可以绘制如下内容:

ListPlot[{\[Rho]}, Joined -> True, Frame -> True, PlotStyle -> Orange]

它的工作速度相当快,但与之前的 Plot 相比,水平轴并不好。

然后,我在考虑做类似的事情,定义

 \[Rho][w]:= Module[{.....},....]

并将其作为一个函数使用并在最后绘制。有什么建议么?我应该怎么办?

Edit1:建议之后:

它们之间的比较

4

1 回答 1

1

为什么不只是这个?

Plot[\[Rho], {w, -2.5, 2.5}, Frame -> True],

或者更好

Plot[\[Rho], {w, -2.5, 2.5}, Frame -> True, PlotRange -> All]

也许在绘图之前尝试一下,但它看起来很耗时。

\[Rho] = Simplify[-1/\[Pi]*Im[G22]]

我试过这个,这很有趣......

For[j = 2, j < s + 1, j++, 
 Print[j];
  Subscript[\[Beta], j] = 
  Simplify[Subscript[\[Beta], 
    j - 1]*1/(SubStar[E] - \[Epsilon] - 2 \!\(
\*SubsuperscriptBox[\(\[Sum]\), \(i = 1\), \(j - 1\)]
\*SubscriptBox[\(\[Beta]\), \(i\)]\))*Subscript[\[Beta], j - 1]]]

第 10 次迭代是杀手锏。它中止了这条消息: -

在此处输入图像描述

于 2018-11-26T22:03:43.937 回答