2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Mathematica 10 - вызов модуля из цикла
Сообщение15.09.2014, 14:46 
Значит, есть у меня цепочка вычислений, выдающих график на котором эксперимент сравнивается с моделью. в модели есть 2 подгоночных параметра, а считается график минут 5, поэтому решил циклом перебирать значения параметров в заданном диапазоне, а и посмотреть как веден себя сходимость с экспериментом.

загнал вычисления в модуль:

Код:

gcd[g0_, h0_] :=
Module[{q = g0, h = h0},
  \[Epsilon] = q^2/(2 180.9 1830) 27.21;
   \[Delta] = 8.1;
  Efull[n_] := n*\[Epsilon] ;
  U[n_] := h \[Delta] n^(2/3);
  Stab[n_] := \!\(
\*SubsuperscriptBox[\(\[Integral]\), \(0\), \(\[Delta]\)]\(
\*FractionBox[
SqrtBox[\(2 \((n*\[Epsilon] - x + U[n])\)\)], \(8*
\*SuperscriptBox[\(3.14\), \(3/2\)]*
\*SuperscriptBox[\((
\*FractionBox[\(\[Epsilon]\), \(3\)])\), \(3/2\)]\)]*
\*SuperscriptBox[\(E\), \((
\*FractionBox[\(\(-3\)*\((n*\[Epsilon]\  -
           x)\)\), \(\[Epsilon]\)])\)] \[DifferentialD]x\)\);
  (*Найдем вероятность того,
  что кластер получит энергию соотвествующую вылету из него A атомов*)
\

 
 
  \[Omega]A[n_, A_] := \!\(
\*SubsuperscriptBox[\(\[Integral]\), \(If[
      n*\[Epsilon] - \((A)\)*\[Delta] - U[n] > 0, \((A)\)*\[Delta],
      n*\[Epsilon] - U[n]]\), \(If[
      n*\[Epsilon] - \((A + 1)\)*\[Delta] - U[n] >
       0, \((A + 1)\)*\[Delta], n*\[Epsilon] - U[n]]\)]\(
\*FractionBox[
SqrtBox[\(2 \((n*\[Epsilon] - x + U[n])\)\)], \(8*
\*SuperscriptBox[\(3.14\), \(3/2\)]*
\*SuperscriptBox[\((
\*FractionBox[\(\[Epsilon]\), \(3\)])\), \(3/2\)]\)]*
\*SuperscriptBox[\(E\), \((
\*FractionBox[\(\(-3\)*\((n*\[Epsilon]\  -
           x)\)\), \(\[Epsilon]\)])\)] \[DifferentialD]x\)\);
 
  (*Найдем вероятность того,
  что кластер после испарения лишнего станет остатком из О атомов*)
 
  \[Omega]O[n_, O_] := \[Omega]A[n, n - O];
 
  WWW[n_] := If[n > 1, Stab[n] + \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(i = n + 1\), \(30\)]\(\[Omega]O[i,
       n]\)\), \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(i = 0\), \(30\)]\(\[Omega]A[1,
       i]\)\) + \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(i = 2\), \(20\)]\(
\*UnderoverscriptBox[\(\[Sum]\), \(A\), \(20\)]A*\[Omega]A[i, A]\)\)];
  YeldNotDis3 :=
   ListLogLogPlot[ParallelTable[WWW[n]/WWW[5], {n, 1, 10}],
    PlotStyle -> {Red, PointSize[0.02]}, AspectRatio -> 1,
    PlotMarkers -> "\[FilledUpTriangle]", PlotRange -> {10^-3, 10^3},
    PlotLegends -> {"Испарение в новой модели"}];
 
  g4 := ListLogLogPlot[{{1, (1.25*10^5)/(1.7*10^4)}, {2, \
(1.6*10^5)/(1.7*10^4)}, {3, (1.1*10^5)/(1.7*10^4)}, {4, \
(1.15*10^5)/(1.7*10^4)}, {5, (1.7*10^4)/(1.7*10^4)}, {6, \
(1.14*10^4)/(1.7*10^4)}, {7, (1.8*10^3)/(1.7*10^4)}, {8, \
(1.08*10^3)/(1.7*10^4)}, {9, (1.6*10^2)/(1.7*10^4)}, {10, \
(1.15*10^2)/(1.7*10^4)}}, PlotStyle -> {Black, PointSize[0.01]},
    PlotMarkers -> "\[FilledSquare]", PlotLegends -> {"Тантал"},
    PlotRange -> {10^-3, 10^3}];
 
 
  Show[g4, YeldNotDis3, FrameLabel -> {"size", "relative yield"},
   Frame -> True]
  ]


и начал вызывать его циклом:

Код:
w := 200
While[w < 225, gcd[w, 0.3]; w = w + 10]


но не тут то было! цикл работает, а ничего не выводиться. в чем причина?

 
 
 
 Re: Mathematica 10 - вызов модуля из цикла
Сообщение15.09.2014, 15:46 
Результат команды перед точкой с запятой не выводится. Вот так должно:
Код:
w := 200
While[w < 225, Print[gcd[w, 0.3]]; w = w + 10]

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group