@Artihardy

Как исправить зависание Wolfram Mathematica при больших символьных вычислениях?

Мне надо выполнить несложный математический код на Wolfram Mathematica. Он рассчитывает матрицу перехода через 2 определённых слоя диэлектрика, а потом эта матрица возводится в 500 степень (500 пар таких слоёв).
T[n_, d_] := {{Cos[2 \[Pi] n*\[CurlyEpsilon]/1240 d], 
    I/n Sin[2 \[Pi] n*\[CurlyEpsilon]/1240 d]}, {I n Sin[
      2 \[Pi] n*\[CurlyEpsilon]/1240 d], 
    Cos[2 \[Pi] n*\[CurlyEpsilon]/1240 d]}};
\[Epsilon]1 = 4. + I/20;
d1 = 100.;
\[Epsilon]2 = 16. + I/10;
d2 = 50.;

l = 500;(*number of layers*)                                       (*проблемная часть кода*)
T2 = T[Sqrt[\[Epsilon]2], d2].T[Sqrt[\[Epsilon]1], d1];(*проблемная часть кода*)
T3 = MatrixPower[T2, l];                                             (*проблемная часть кода*)

rl, tl} = {r, t} /. NSolve[T3.{1 + r, 1 - r} == {t, t}, {r, t}][[1]]; (*проблемная часть кода*)

TL2 = Evaluate[Abs[tl]^2];
zoomcoeff = 10.;
pl = Plot[TL2*{1, zoomcoeff}, {\[CurlyEpsilon], 2.84, 2.99}, 
  PlotRange -> {All, {0, 9.7}}, Frame -> True, 
  FrameLabel -> {Style["E,eV", 
     FontSize -> 18], {Style["|t|^2", FontSize -> 18]}}]


Однако, где-то на стадии возведения матрицы в 500 степень или при решении уравнения (следующая строчка) он зависает в режиме Running, и процесс убивается только выходом из ядра (Abort Evaluation не работает)
5df3285be236c680418641.png

При этом, меньшее число пар слоёв ( 10, 100) программа прекрасно считает. В чём проблема?
  • Вопрос задан
  • 656 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Farwisdomer
Не более чем предположение: не считайте влоб. Используйте алгоритмы. Не используйте встроенные функции. Алгебраические пакеты, на мой взгляд, не предназначены для серьезных, ресурсоемких вычислений. Они больше для показательной работы. Для вычислений лучше использовать классические языки программирования.
Выводы на основе личного опыта численных методов с сетками размеров 1 000 000 ^ 4
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы