Хочу попытаться использовать Mathematica для подготовки текста, используя, например Journal Article Style. А как вставить формулу по середине (inline идёт с начала новой строки) и включить авто-нумерацию?
» Mathematica (математика)
Требуется сгенерировать список, может есть готовая функция, а я не знаю?
Проще на модельном примере, дано: n (показатель степени) и k штук переменных, x_i, i=1...k
Требуется сгенерировать список, состоящих из всевозможных произведений x_i*x_j*...*x_l, 0 <= i,j,l <= k, i + j + l <= n
Пример: n=3 и x, y, и z
1, x, x^2, x^3, y, xy, yx^2, y^2, x y^2, y^3, z, xz, zx^2, yz, xyz, zy^2, z^2, xz^2, yz^2, z^3
Проще на модельном примере, дано: n (показатель степени) и k штук переменных, x_i, i=1...k
Требуется сгенерировать список, состоящих из всевозможных произведений x_i*x_j*...*x_l, 0 <= i,j,l <= k, i + j + l <= n
Пример: n=3 и x, y, и z
1, x, x^2, x^3, y, xy, yx^2, y^2, x y^2, y^3, z, xz, zx^2, yz, xyz, zy^2, z^2, xz^2, yz^2, z^3
TeXpert
Ликбез:
Цитата:
Код: In[1]:= k = 10;
Array[x, k]
Out[2]= {x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10]}
Ликбез:
Цитата:
k штук переменных, x_i, i=1...k
Код: In[1]:= k = 10;
Array[x, k]
Out[2]= {x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10]}
popkov
Цитата:
Цитата:
Добавлено:
Пока такое решение:
Код: A := Expand[(1 + x + y + z)^3]
Level[A, 1] /. _Integer*x_ -> x
Цитата:
ЛикбезЮмора не понял. Я Mathematica хоть немного, да знаю (начал пользовать потихоньку с версии 2.1), со списками тоже быстро разобрался
Цитата:
Лень на ночь думать, но функция Permutations кажется более подходящейНе лучший вариант. Пока привлекательным кажется такой вариант: разложить, например, для случая выше, выражение (1 + x + y + z)^3, слагаемые из результата "вынуть", "очистив" от коэффициентов. То есть, в список занести операнды суммы. Придётся, наверное, так
Добавлено:
Пока такое решение:
Код: A := Expand[(1 + x + y + z)^3]
Level[A, 1] /. _Integer*x_ -> x
TeXpert
Можно так:
Код:
k = 10;
Apply[Times, Rest[Subsets[Table[Subscript[x, n], {n, k}]]], 1]
Можно так:
Код:
k = 10;
Apply[Times, Rest[Subsets[Table[Subscript[x, n], {n, k}]]], 1]
TeXpert
Можно немного укоротить, используя новую функцию MonomialList:
MonomialList[(1 + x + y + z)^3] /. _Integer*x_ -> x
А так, решение уже достаточно простое.
Можно немного укоротить, используя новую функцию MonomialList:
MonomialList[(1 + x + y + z)^3] /. _Integer*x_ -> x
А так, решение уже достаточно простое.
Partner1
Цитата:
{x_1, x_2, x_3, x_1*x_2, x_1*x_3, x_2*x_3, x_1*x_2*x_3}
popkov
Да, так чуть-чуть покороче
Цитата:
Цитата:
Можно так:Так нельзя, например при n=3 результат таков:
Код:
k = 10;
Apply[Times, Rest[Subsets[Table[Subscript[x, n], {n, k}]]], 1]
{x_1, x_2, x_3, x_1*x_2, x_1*x_3, x_2*x_3, x_1*x_2*x_3}
popkov
Да, так чуть-чуть покороче
Цитата:
А так, решение уже достаточно простоеОно то так, да только подход немного неизящный (жульнический, что ли) -- решение от обратного, разлагая полином. Ну да ладно, пока другого нет
TeXpert
Если Вам нужен коэффициент при сем члене в разложении (x1+x2+...+xk)^(n) при
x1^m1*x2^m2*x^m3*...*xk^mk, то это (n)!/(m1!*m2!*...* mk!) - это бином Ньютона...
Пол страницы рассуждений развели на ровном месте
Если Вам нужен коэффициент при сем члене в разложении (x1+x2+...+xk)^(n) при
x1^m1*x2^m2*x^m3*...*xk^mk, то это (n)!/(m1!*m2!*...* mk!) - это бином Ньютона...
Пол страницы рассуждений развели на ровном месте
Vskazka, может всё-таки стоит повнимательнее прочитать пост? Речь совсем о другом, и тогда не писал бы
Цитата:
Цитата:
Пол страницы рассуждений развели на ровном мест
TeXpert
Вы подумайте, что что вам надо исходя из описания - Вашего - Список сгенерить.. Какой..
Цитата:
что Вам собственно надо простой перебор - так и перебирайте... если просто так выписать таковы произведения...
Но это не задача ни при каком определении оной. Странно, что простейший перебор дает повод для писанины
Ну и нельзя через задницу гланды резать, напоследок
Вы подумайте, что что вам надо исходя из описания - Вашего - Список сгенерить.. Какой..
Цитата:
Требуется сгенерировать список, состоящих из всевозможных произведений x_i*x_j*...*x_l, 0 <= i,j,l <= k, i + j + l <= n
что Вам собственно надо простой перебор - так и перебирайте... если просто так выписать таковы произведения...
Но это не задача ни при каком определении оной. Странно, что простейший перебор дает повод для писанины
Ну и нельзя через задницу гланды резать, напоследок
Vskazka
Мда. Не разобравшись, сначала бином (кстати, это ещё в школе проходят) приплёл, а потом невнятные бормотания про перебор
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Мда. Не разобравшись, сначала бином (кстати, это ещё в школе проходят) приплёл, а потом невнятные бормотания про перебор
Цитата:
что Вам собственно надо простой перебор - так и перебирайте... если просто так выписать таковы произведения...Я же там простой пример привёл, что там после этого непонятного?
Цитата:
Но это не задача ни при каком определении онойЗадача достаточно ясная
Цитата:
Требуется сгенерировать список, может есть готовая функцияв русле темы
Цитата:
Странно, что простейший перебор дает повод для писаниныВ том-то и дело, что это не тупой перебор
Цитата:
Ну и нельзя через задницу гланды резать, напоследокНадо же, какая глубокая мысль! Я в восхищении! А ты мое замечание
Цитата:
Оно то так, да только подход немного неизящный (жульнический, что ли) -- решение от обратногоопять не заметил (невнимательность, али не дошло)? Что же тебе мешает предложить короткое и изящное решение? Просто развел флуд
Здравствуйте, вопрос по программированию в Математике.
Задача: Посчитать "гистограммную характеристику" неких свойств объекта. Объект состоит из множества координат точек. Позиция в гистограмме и интегральная характеристика, обновляемая в этой позиции формализуются отдельно.
Моё решение:
Код:
(* Вычисление позиции в гистограмме, обновление для одной точки *)
PointUpdateResult[res_, x_, y_, n_] := Block[ {offset = MyOffset[x, y, n] (* позиция в гистограмме *)},
++res[[offset,1]]; (* количество *)
res[[offset,2]] += Sqrt[x^2 + y^2]; (* "интегральное свойство" *)
];
SetAttributes[PointUpdateResult, {HoldFirst}];
(* итерация по точкам, накопление необходимого свойства *)
UpdateResult[res, x_, y_, w_, r_] := Scan[PointUpdateResult[res, #[[1]], #[[2]], w] &, Table[{x, y + i}, {i, 0, r - 1}]];
SetAttributes[UpdateResult, {HoldFirst}];
(* функция, работающая с самим обьектом *)
SectorFeatures[x_, Order_]:= Block[ { params=Runs[x], second_params = Mec[x], res=Table[{0,0},Order+1] (* "выделяем память" под гистограмму *)},
UpdateResult[res,second_params,Order+1,#] & /@ params;
res // MatrixForm
];
Задача: Посчитать "гистограммную характеристику" неких свойств объекта. Объект состоит из множества координат точек. Позиция в гистограмме и интегральная характеристика, обновляемая в этой позиции формализуются отдельно.
Моё решение:
Код:
(* Вычисление позиции в гистограмме, обновление для одной точки *)
PointUpdateResult[res_, x_, y_, n_] := Block[ {offset = MyOffset[x, y, n] (* позиция в гистограмме *)},
++res[[offset,1]]; (* количество *)
res[[offset,2]] += Sqrt[x^2 + y^2]; (* "интегральное свойство" *)
];
SetAttributes[PointUpdateResult, {HoldFirst}];
(* итерация по точкам, накопление необходимого свойства *)
UpdateResult[res, x_, y_, w_, r_] := Scan[PointUpdateResult[res, #[[1]], #[[2]], w] &, Table[{x, y + i}, {i, 0, r - 1}]];
SetAttributes[UpdateResult, {HoldFirst}];
(* функция, работающая с самим обьектом *)
SectorFeatures[x_, Order_]:= Block[ { params=Runs[x], second_params = Mec[x], res=Table[{0,0},Order+1] (* "выделяем память" под гистограмму *)},
UpdateResult[res,second_params,Order+1,#] & /@ params;
res // MatrixForm
];
Странно, по документации обращаться к элементам массива следует так: X[[i]], тем не менее, работает также X[i]. В чем тут прикол?
TeXpert
Не работает:
Код: [no]In[2]:= t = Range[10]
t[1]
Out[2]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Out[3]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}[1][/no]
Не работает:
Код: [no]In[2]:= t = Range[10]
t[1]
Out[2]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Out[3]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}[1][/no]
popkov
У меня, наоборот, X[i] работает, а вот X[[i]] --- нет (когда писал предыдущее сообщение, я написал, не проверив, вполне возможно, по описанной тобой причине)! Объявлен как Array[X,N]. С двумерным массивом та же песня. Впрочем, я не стал копаться, надо было считать, а считается нормально, результаты корректны, остальное потом проверю
Вообще, справка местами странная. Хотел лишний раз уточнить насчет индексации элементов массива, долго пришлось рыться. А ведь простая вещь, в примерах почему-то не отражено
Да и пара скобок [ ] выбрана очень неудачно: в математике в определении множества используется пара скобок { }, а аргумент функции заключается в обычные скобки ( ). В Maple с обозначениями все в порядке, а вот в Mathematica это почему-то через заднее место(
Кстати, какой функцией лучше решить численно уравнение:
f(x)-g(x)=0,
f --- заданная функция, g(x)=Int_{a-x}^{a}h(t)dt,
h также задана (не дифференцируема), a --- фиксированная константа. Заданные функции таковы, что уравнение всегда имеет единственное решение. У меня почему-то заткнулись функции NSolve и FindRoot, пришлось решать методом деления отрезка пополам (пристрелки)
У меня, наоборот, X[i] работает, а вот X[[i]] --- нет (когда писал предыдущее сообщение, я написал, не проверив, вполне возможно, по описанной тобой причине)! Объявлен как Array[X,N]. С двумерным массивом та же песня. Впрочем, я не стал копаться, надо было считать, а считается нормально, результаты корректны, остальное потом проверю
Вообще, справка местами странная. Хотел лишний раз уточнить насчет индексации элементов массива, долго пришлось рыться. А ведь простая вещь, в примерах почему-то не отражено
Да и пара скобок [ ] выбрана очень неудачно: в математике в определении множества используется пара скобок { }, а аргумент функции заключается в обычные скобки ( ). В Maple с обозначениями все в порядке, а вот в Mathematica это почему-то через заднее место(
Кстати, какой функцией лучше решить численно уравнение:
f(x)-g(x)=0,
f --- заданная функция, g(x)=Int_{a-x}^{a}h(t)dt,
h также задана (не дифференцируема), a --- фиксированная константа. Заданные функции таковы, что уравнение всегда имеет единственное решение. У меня почему-то заткнулись функции NSolve и FindRoot, пришлось решать методом деления отрезка пополам (пристрелки)
TeXpert
Цитата:
Я сначала тоже удивлялся, а потом понял, что все это намного глубже и очень даже рационально задумано.
Это в maple все немного через то место, порядка и логики никакой.
Цитата:
а вот в Mathematica это почему-то через заднее место
Я сначала тоже удивлялся, а потом понял, что все это намного глубже и очень даже рационально задумано.
Это в maple все немного через то место, порядка и логики никакой.
TeXpert
Цитата:
Ну неужели так лень почитать документацию? Функция Array[] генерирует список индексированных переменных:
Код: [no]In[2]:= Array[X, 10]
Out[2]= {X[1], X[2], X[3], X[4], X[5], X[6], X[7], X[8], X[9], X[10]}[/no]
Цитата:
[no]У меня, наоборот, X работает, а вот X[[i]] --- нет (когда писал предыдущее сообщение, я написал, не проверив, вполне возможно, по описанной тобой причине)! Объявлен как Array[X,N].[/no]
Ну неужели так лень почитать документацию? Функция Array[] генерирует список индексированных переменных:
Код: [no]In[2]:= Array[X, 10]
Out[2]= {X[1], X[2], X[3], X[4], X[5], X[6], X[7], X[8], X[9], X[10]}[/no]
terminat0r
Цитата:
popkov
Цитата:
Цитата:
Цитата:
Код: g[j_,x_]:=NIntegrate[h[j,t], {t,a-x,a}]
Цитата:
Я сначала тоже удивлялся, а потом понял, что все это намного глубже и очень даже рационально задуманоНу как сказать, все-таки для математика обозначение множеств не через { } --- дико (тем паче сам пакет называется Mathematica), к тому же принято списки обозначать через [ ]. Ну да ладно, не катастрофа
popkov
Цитата:
Ну неужели так лень почитать документацию? Функция Array[] генерирует список индексированных переменныхЧитал, просто обозначения эти все равно диковаты
Цитата:
Кроме этих функций есть еще FindMinimumПро это я, естественно, думал, но была надежда на более "прямой" способ
Цитата:
Однако твоя проблема, видимо, в том, что ты не указал специально, что интегрирование должно быть численным (надо использовать NIntegrate, а не Integrate)А функция g у меня определена как раз через NIntegrate, забыл уточнить, вот примерно так:
Код: g[j_,x_]:=NIntegrate[h[j,t], {t,a-x,a}]
TeXpert
Цитата:
Цитата:
Спасибо, я тоже подозревал, что что-то уточняющее надо задавать, попробую покопаться в этом направленииЭто существеннее, чем кажется: последние версии Mathematica даже внутри заведомо числовых функций вроде NIntegrate и FindRoot все равно в первую очередь делают символьный анализ, который может занимать жуткое количество времени и оперативной памяти, если аргумент нестандартный, как у тебя.
Всем привет. А получилось у кого-нибудь полностью подружить MathLink 3.2 с Экселем 2010 в обе стороны? Из математики можно запрашивать данные и возвращать их обратно в эксель, но подключать решатель математики из экселя пока не получилось. Может кто знает куда установщик математики кидает надстройки?
Очень странная ситуация наблюдается. Написал программу, обрабатывающую данные, в конце оптимизируется функция, с помощью NMinimize. Прогнал ее под Windows/Mathematica 7.0.1 для разных значений параметров, все нормально, считается (тьфу-тьфу-тьфу) прекрасно (при этом количество переменных доходит почти до 700, для 4000 программа после получаса счета на лаптопе с двуядерным прцессором 1,6 GHz с 3 Gb RAM завершилась с жалобой на нехватку памяти). Теперь ту же программу решил прогонять под Linux/Mathematica 7.0.0, и тут программа быстро завершается, с жалобой типа "NMinimize::nnum: The function value is not a number at ", тут переменные опущены. Набор данных один и тот же! Может, проблема из-за различия версий: глюк в Mathematica 7.0.0?
Добавлено:
Да, похоже на глюк версии, например вот тут говорится:
Цитата:
Добавлено:
Да, похоже на глюк версии, например вот тут говорится:
Цитата:
On Feb 9, 2009, at 4:33 AM, appris@att.net wrote:
> Here is an example from Mathematica's user's guide:
>
> In[8]:= NMinimize[x^4 - 3 x^2 + x, x]
>
> Out[8]= {-3.513905039, {x -> -1.300839566}}
>
> however, trying to replicate it, I get the following:
>
> In[2]:= NMinimize[x^4 - 3 x^2 + x, x]
>
> Out[2]= {-1.070230182, {x -> 1.130901122}}
>
> One way to find the global min, I had to use a constraint such as x<0.
>
> Has anyone come across such a problem?
>
> In[3]:= $Version
>
> Out[3]= "7.0 for Microsoft Windows (32-bit) (November 10, 2008)"
This is fixed in 7.0.1.
Brett Champion
Wolfram Research
Господа, требуется помощь
Как уже писал, речь идет о тестировании одной и той же программы под двумя системами. Под Windows пашет без проблем для разных наборов значений параметров
Под Linux версию Mathematica сменил на 7.0.1, но программа так же завершается, как и в версии Mathematica 7.0.0. Непонятный "бип", а меню Why the Beep? сообщает типа "ядро вышло в процессе вычислений", очень вразумительное, надо сказать(
Пробовал как под простым пользователем, так и root'ом. Вылетает при работе функции NMinimize
Что тут может быть?
Вот информация:
Linux/RHEL 5.5 Client
"Version" -> "7.0 for Linux x86 (32-bit) (February 25, 2009)",
"ReleaseID" -> "7.0.1 (1213964, 1213624)"
Windows Server 2003 SP2
"Version" -> "7.0 for Microsoft Windows (32-bit) (February 18, 2009)",
"ReleaseID" -> "7.0.1 (1213965, 1213635)"
Процессор Xeon E5504 2 GHz, 2 Gb RAM
Как уже писал, речь идет о тестировании одной и той же программы под двумя системами. Под Windows пашет без проблем для разных наборов значений параметров
Под Linux версию Mathematica сменил на 7.0.1, но программа так же завершается, как и в версии Mathematica 7.0.0. Непонятный "бип", а меню Why the Beep? сообщает типа "ядро вышло в процессе вычислений", очень вразумительное, надо сказать(
Пробовал как под простым пользователем, так и root'ом. Вылетает при работе функции NMinimize
Что тут может быть?
Вот информация:
Linux/RHEL 5.5 Client
"Version" -> "7.0 for Linux x86 (32-bit) (February 25, 2009)",
"ReleaseID" -> "7.0.1 (1213964, 1213624)"
Windows Server 2003 SP2
"Version" -> "7.0 for Microsoft Windows (32-bit) (February 18, 2009)",
"ReleaseID" -> "7.0.1 (1213965, 1213635)"
Процессор Xeon E5504 2 GHz, 2 Gb RAM
TeXpert
Различия могут быть связаны с различием компиляторов под Windows и Linux, что приводит к иным результатам вычислений под Linux. См., например, здесь: переход к новому компилятору под 32-битные версии Windows в Mathematica 7.0.0 неожиданно привел к появлению случайно распределенных числовых погрешностей (невоспроизводимости результатов вычислений в версии 7.0.0 в 32-битных системах). Я не знаю, исправили ли они этот глюк в версии 7.0.1. Так что твоя программа запросто может выдавать другие цифры, соответственно и сообщение "NMinimize::nnum: The function value is not a number at " появляется в связи с этим. А вылетание ядра часто происходит, если NMinimize получает символьную, а не числовую функцию. Попробуй оформить ее как численную через _?NumberQ для каждого аргумента.
Различия могут быть связаны с различием компиляторов под Windows и Linux, что приводит к иным результатам вычислений под Linux. См., например, здесь: переход к новому компилятору под 32-битные версии Windows в Mathematica 7.0.0 неожиданно привел к появлению случайно распределенных числовых погрешностей (невоспроизводимости результатов вычислений в версии 7.0.0 в 32-битных системах). Я не знаю, исправили ли они этот глюк в версии 7.0.1. Так что твоя программа запросто может выдавать другие цифры, соответственно и сообщение "NMinimize::nnum: The function value is not a number at " появляется в связи с этим. А вылетание ядра часто происходит, если NMinimize получает символьную, а не числовую функцию. Попробуй оформить ее как численную через _?NumberQ для каждого аргумента.
Есть длинное выражение -- P(x,y,z,w,v).
Известно, что оно раскладывается в линейную комбинацию:
\sum\limits_i C_i(y,z,w,v)f_i(x).
{f_i(x)} -- конечный набор заданных функций.
Вопрос: как можно осуществить такое разложение в Mathematica?
Известно, что оно раскладывается в линейную комбинацию:
\sum\limits_i C_i(y,z,w,v)f_i(x).
{f_i(x)} -- конечный набор заданных функций.
Вопрос: как можно осуществить такое разложение в Mathematica?
Недавно разместил статью в ArXiv и получил предложение от сотрудников Wolfram Research создать демонстрационный ролик по ее содержанию. Код с помощью Trial (save-disabled) версии Mathematica я написал. Ни может ли кто-либо имеющий лицензионную Mathematica 7 помочь преобразовать его в файл Demonstration? Шаблон имеется, нужно только скопировать в соответствующие разделы части кода и записать файл. При желании можно включить себя в раздел Авторы.
Привет всем!
Простой вопрос, но что-то не могу найти ответ в документации:
Как сделать так, чтобы подписи к осям в функции Plot[] располагались не по умолчанию около окончаний осей, а снизу по центру для горизонтальной и справа по центру для вертикальной оси?
ResearchMaker
Есть лицензионный 6.0, семерки нет. Если устроит шестерка, пиши
Простой вопрос, но что-то не могу найти ответ в документации:
Как сделать так, чтобы подписи к осям в функции Plot[] располагались не по умолчанию около окончаний осей, а снизу по центру для горизонтальной и справа по центру для вертикальной оси?
ResearchMaker
Есть лицензионный 6.0, семерки нет. Если устроит шестерка, пиши
ResearchMaker
Ну у меня нет, но я знаю человечка (и главное меня знает он ), у которого есть выход на все лицензионные версии от 4 до 7.
в пм
Ну у меня нет, но я знаю человечка (и главное меня знает он ), у которого есть выход на все лицензионные версии от 4 до 7.
в пм
Andrew10 и terminat0r, спасибо, что откликнулись!
Возможно, я еще воспользуюсь вашим предложением.
Цитата:
Может быть, использовать команду Inset, задающую расположение текста вместе с опцией Epilog. Andrew10, такой пример есть в программе, которую я тебе отправил.
Возможно, я еще воспользуюсь вашим предложением.
Цитата:
Простой вопрос, но что-то не могу найти ответ в документации:
Как сделать так, чтобы подписи к осям в функции Plot[] располагались не по умолчанию около окончаний осей, а снизу по центру для горизонтальной и справа по центру для вертикальной оси?
Может быть, использовать команду Inset, задающую расположение текста вместе с опцией Epilog. Andrew10, такой пример есть в программе, которую я тебе отправил.
Тестирую свободную запись от wolframa. Очень даже ничего, это наверное будет даже революция. Только надо хоть немного знать математический английский Абсолютно без подготовки можно строить графики, интегрировать, дифференцировать и показывать геом фигуры. Все логично и достаточно быстро. Задержка конечно есть, где-то секунд 2-3.
Весьма обнадеживающие новости о возможностях Compile[] в 8-ке:
http://facstaff.unca.edu/mcmcclur/blog/CompileForComplexDynamics.html
http://facstaff.unca.edu/mcmcclur/blog/CompileForComplexDynamics.html
Страницы: 12345678910111213141516171819202122232425262728293031323334
Предыдущая тема: Идея несуществующей программы...
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.