символ "$" в выводе mathematica - PullRequest
5 голосов
/ 07 декабря 2011

У меня возникли небольшие трудности со следующим кодом:

Lagrange[list_] := 
  Module[{points = list, length, k, j, m, x, g}, 
    length = Length[points]; 
    k = length - 1; 
    f = Sum[points[[j + 1,2]]*Product[If[j != m, (x - points[[m + 1,1]])/
          (points[[j + 1,1]] - points[[m + 1,1]]), 1], {m, 0, k}], {j, 0, k}]; 
    g = FullSimplify[Expand[f]]; 
    Return[f]]

Вывод, который я получаю:

Out[101]= 0. -1.85698 (-1.5+x$26810) (-0.75+x$26810) (0. +x$26810) (0.75+x$26810)
         +0.490717 (-1.5+x$26810) (-0.75+x$26810) (0. +x$26810) (1.5 +x$26810)
         -0.490717 (-1.5+x$26810) (0. +x$26810) (0.75 +x$26810) (1.5 +x$26810)
         +1.85698 (-0.75+x$26810) (0. +x$26810) (0.75 +x$26810) (1.5 +x$26810)

Меня интересуют эти символы "$".Я не знаю, что они имеют в виду, я не могу найти документацию по ним, и они мешают построить этот многочлен.

Ответы [ 2 ]

6 голосов
/ 07 декабря 2011

$ в вашем выводе получено из уникальной переменной, сгенерированной лексической областью действия Module (см. Раздел «Дополнительная информация» mathematica / ref / Module ).Вот почему я заставил мою LagrangePoly функцию принять символ, в котором должен находиться многочлен. Я использовал LagrangePoly[list_, var_:x], который по умолчанию равен глобальному символу x.

Простой пример проблемы:

In[1]:= Module[{x}, x]    
Out[1]= x$583

Число в «локальной» переменной x$nnn взято из глобальной $ModuleNumber.

Если вы неЕсли вы не понимаете этого, то, вероятно, вам следует прочитать учебник Блоки по сравнению с модулями .

2 голосов
/ 09 декабря 2011

В вашем коде x является локальной переменной. Однако вы возвращаете выражение, содержащее х. Цель локализованных переменных заключается в том, что они не должны появляться вне контекста, который в данном случае является модулем.

Рассмотрим этот простой пример:

adder[x_] := Module[{y}, Return[x + y]]

adder[2] дает: 2 + y$1048

Хорошей практикой является признание того, что наш сумматор функций должен сам по себе возвращать функцию.

adder[x_] := Function[{y}, x + y]

twoAdder = adder[2];

twoAdder[3] дает: 5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...