Лучший способ построить это

Я пытаюсь построить 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 undefined в начале (код выше) и график: ListPlot[Table[{w, \[Rho]}, {w, -2.5, 2.5, step}], Joined -> True, Frame -> True]
Это работает хорошо, но очень медленно, возможно, потому, что mathematica делает все это алгебраически. Если я изменю w, например, используя: w=Range[-2.5,2.5,step], то я могу построить что-то вроде этого:

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

Он работает довольно быстро, но горизонтальная ось не в порядке по сравнению с предыдущим Plot.

Затем я подумал сделать что-то вроде определения

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

И работайте с этим как с функцией и сюжетом в конце. Какие-либо предложения? Что я должен делать?

Edit1: после предложения:

Сравнение между ними


person Lucas Lopes    schedule 26.11.2018    source источник


Ответы (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-я итерация - убийца. Он прервался с этим сообщением: -

введите здесь описание изображения

person Chris Degnen    schedule 26.11.2018
comment
Я попробовал это, . . . [Rho] = -1/[Pi]*Im[G22]; [Микро] = -1/[Пи]*Iм[G11]; [Дзета] = 1/[Pi]*Re[G11]; Plot[[Rho], {w, -2.5, 2.5}, Frame -> True, PlotRange -> All] Plot[[Micro], {w, -2.5, 2.5}, Frame -> True, PlotRange -> All] Plot[[Zeta], {w, -2.5, 2.5}, Frame -> True, PlotRange -> All] Для [Rho] работает просто хорошо, но для Micro и Zeta немного медленнее и некоторые точки отсутствуют в участок. - person Lucas Lopes; 27.11.2018
comment
@LucasLopes Добавление опции графика Exclusions -> None заполняет недостающие точки и значительно ускоряет графики Micro и Zeta. - person Chris Degnen; 27.11.2018
comment
Что если я попытаюсь изменить w в начале кода, он будет работать быстрее, но масштаб сюжета будет странным... - person Lucas Lopes; 28.12.2018