Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [Wolfram Mathematica] Программирование в системе. (http://forum.oszone.net/showthread.php?t=259609)

TaDa 29-04-2013 08:09 2141485

[Wolfram Mathematica] Программирование в системе.
 
Здравствуйте.

Я не знаю, была ли на форуме подобная тема - по крайней мере, я аналогов не нашел.

Эта тема посвящена обсуждению вопросов программирования в системе Wolfram Mathematica. Я нашел только следующую статью о программировании в Математике: вот она. Она не решила всех моих вопросов.

В частности, такой простой вопрос, как наличие и способ применения в Wolfram Mathematica составного оператора, для меня все еще остается открытым. Я пробовал применять "Блок" ([ ... ]), но не получил результата.

pva 29-04-2013 20:03 2141860

Цитата:

Цитата TaDa
составного оператора »

Что под этим подразумевается? Какой должен быть результат?

Код:

Block[{x,y}, x=4;y=5;x+y] (*вполне работает*)
Обычно с математикой идёт толстенная книжка "The Mathematica Book", в которой всё подробно и с примерами расписано. По крайней мере я в своё время всё находил там, гуглить даже не приходилось.

TaDa 30-04-2013 05:57 2142051

pva, большое спасибо! Я про этот оператор вовсе не знал, а книжку тоже упустил из виду.

Под составным оператором я имел в виду группу операторов, объединенных в один, что дает в результате выполнение всей группы на одной итерации цикла, например. То есть я искал аналог паскалевского "begin ... end", где между этими двумя ключевыми словами помещаются несколько операторов, а выполняются они как один. И, насколько я могу видеть, "Block" является именно таким аналогом. Спасибо!

semiono 30-04-2013 15:46 2142334

HertzToCents там работает? Что за софт, он большой? Функция весьма полезная :)

pva 01-05-2013 19:49 2142957

semiono, насколько я понял из википедии:
перевод интервала частот в центы:
Код:

(*Mathematica*)
HertzToCents[hertz1_,hertz2_]:=Log[2,hertz2/hertz1]*1200

Код:

/*c/c++*/
double HertzToCents(double hertz1, double hertz2) {
  /* 1200./log(2) = 3986,3137138648348174443833153873 */
  return log(hertz2/hertz1)*3986.3137138648348174443833153873;
}

Софт большой (хотя гораздо меньше, чем windows) и не дешёвый.

Цитата:

Цитата semiono
Функция весьма полезная »

Функция очень специфичная (кроме музыки думаю нигде не применяется; и в музыке не везде наверное) и просто реализуемая, поэтому скорее всего готовой реализации там нет.

Несмотря на универсальность, "Математика" заточена для математических расчётов (соответсвенно расставлены акценты в реализации). Сложить 20 коротких треков не составит труда, но сложить 2 2-часовых трека студийного качества - ваш ПК такого не вытерпит. Лучше использовать специализированные инструменты.

TaDa 12-06-2013 05:05 2166250

Недавно возник следующий вопрос: как описать вектор в качестве аргумента функции (если это вообще возможно)?

Пробовал разные безыскусные варианты, конкретных инструкций не нашел.

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

AMDBulldozer 12-06-2013 11:24 2166319

Цитата:

Цитата TaDa
как описать вектор в качестве аргумента функции »

Определяете функцию с обычным аргументом, который в теле рассматриваете как список.
Пример:

argx[x_]:=x[[1]];
vec={4,5,6};
argx[vec]

TaDa 01-07-2013 08:09 2177142

AMDBulldozer, спасибо! Оказывается, надо было использовать отложенное присваивание вместо мгновенного.

Недавно я попытался написать код следующего вида:

Цитата:

A[x_, y_] := If[x <> 0, 3/2*y/(x^2*B), Limit[3/2*y/(x^2*B), x -> 0]]
M = Table[A[a[[i, j, k]], Mk[[i, j, k]]], {i, 1, 5}, {j, 1, Length[Mk[[i]]]}, {k, 1, Length[Mk[[i, j]]]}]
Таким образом я пытаюсь реализовать следующий алгоритм:

1. Задаю отдельной функцией А(х, у) условие и два варианта в зависимости от выполнения условия.
2. Пытаюсь применить эту функцию к массивам а иМк и вывести результат в отдельный массив (таблицу) М.

Однако на втором этапе возникает ошибка:

Цитата:

StringJoin::string: "String expected at position 1 in (-1.04765)<>0."
Помогите, пожалуйста, понять природу этой ошибки и исправить ее.

pva 01-07-2013 22:32 2177665

A<>B - это операция StringJoin[A,B] - конкатенация строк. А не равно - сишное A!=B

имхо то же самое можно сделать проще: http://reference.wolfram.com/mathema...MapThread.html
Код:

M=MapThread[A,{a,Mk},2]

TaDa 19-08-2013 08:50 2203890

Существует ли способ задать в сумме Sum[] или произведении Product[] дополнительное условие на индексы? И в чем состоит этот способ?

Поясню на примере: я бы хотел реализовать в Wolfram Mathematica формулу Лагранжа для многомерной интерполяции. На нее можно взглянуть, например, здесь:

http://stu.sernam.ru/book_dig_m.php?id=15

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

AMDBulldozer 19-08-2013 20:25 2204256

Цитата:

Цитата TaDa
Существует ли способ задать в сумме Sum[] или произведении Product[] дополнительное условие на индексы? И в чем состоит этот способ? »

Если честно, никогда не сталкивался с подобной задачей, но, возможно, Вашу задачу решил бы самый простой подход - определить весовую функцию от индексов.
Допустим, Вы хотите вычислить след матрицы. Сделаем это, определив зависимости между индексами так, чтобы учитывались только элементы на диагонали матрицы (естественно, просто для примера - в реальной жизни любого человека, который считает след в Mathematica подобным образом надо срочно госпитализировать в Кащенко как идиота):

Aij = Table[A[i, j], {i, 10}, {j, 10}]
z[i_,j_] := If [ i==j, 1, 0 ]
Sum[Sum[z[i, j]Aij[[i, j]], {j, 10}], {i, 10}]

P.S. Простите, я понимаю, что подход очевидный и примитивный, но может быть найдете способ как-нибудь от него оттолкнуться?

pva 19-08-2013 20:48 2204272

http://reference.wolfram.com/mathema...=MapAt&lang=en
TaDa, больше налегай на поиск по словам в книжке (Mathematica Book)

TaDa 12-11-2013 21:23 2253177

Существует ли способ установить условия на переменную, которые соблюдались бы всюду по тексту программы?

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

Но, к сожалению, я не нашел подобной опции в справочнике.

AMDBulldozer 12-11-2013 21:39 2253193

TaDa, функцией Assuming не получится воспользоваться? Или добавить его через двойной амперсенд в Solve, чтобы получилась система неравенств?

TaDa 13-11-2013 04:49 2253396

AMDBulldozer, действительно, использование функции Assuming приводит к нужному результату. Большое спасибо!

TaDa 14-11-2013 20:14 2254726

Вложений: 1
Подскажите, пожалуйста, как реализовать прикрепленную формулу.

Product с Assumptions не приводят к результату, как и вариант с Assuming и зацикленным TimesBy. Во втором случае возвращает нетронутым исходный массив, в первом - возвращается нулевой массив (т.е. Null).

pva 15-11-2013 10:17 2255038

я не понял, как так k=1, k!=1

Обычно сама математика пишет такие формулы в виде
Код:

phi[m_][x_] := Product[(x-x[k])/(x[m]-x[k]), {k,1,n}]
При этом x объявлета как функция (по аналогии с константами интегрирования C[n])

Странно, что не получается реализовать её в виде таблицы, должно получиться:
Код:

x = Table[...]
phi[x1_]=Table[Times@@((x1-x)/(x[m]-x)), {m,1,Length[x]}]] (*здесь x1 должна быть таблицей длины Length[x] *)

Ещё вариант: (мой любимый, но без пол-литра не поймёшь, куда посылает)
Код:

x = Table[...]
phi[x1_]:=(Times@@((x1-x)/(#1-x))&)/@x (*здесь x1 должна быть таблицей длины Length[x] *)


TaDa 24-11-2013 14:27 2260817

pva, в формуле, к сожалению, ошибка, должно быть k != m.

Удалось реализовать это дело с помощью следующего кода:

Код:

Psi1[Nu_, m_] := Product[(Nu - NuRoots[[k]])/(NuRoots[[m]] - NuRoots[[k]]), {k, Delete[Range[1, n1], m]}]
В массиве NuRoots лежат точки; все это делается для получения аппроксимирующей функции, точнее - работает формула Гаусса-Кристоффеля для вычисления несобственного интеграла.

Тут возник еще один вопрос: существует ли способ скопировать код из Mathematica в Microsoft Word так, чтобы в документ пошла "красивая" запись кода? Может, через MathType как-нибудь?

AMDBulldozer 24-11-2013 15:44 2260838

Цитата:

Цитата TaDa
существует ли способ скопировать код из Mathematica в Microsoft Word так, чтобы в документ пошла "красивая" запись кода? »

Боюсь, что не могу подсказать - никогда не возникало такой необходимости. При желании всегда можно подготовить документ в самой Mathematica (написана же ней самой вся справочная система, правда?) и экспортировать в PDF. Посмотрите доступные типы в "Save as", может быть что-нибудь Вам подойдет. К тому же, для сохранения отдельных результатоы вычислений можно пользоваться функцией Export. Допустимые форматы экспорта содержатся в переменной $ExportFormats.

pva 25-11-2013 10:45 2261245

Цитата:

Цитата TaDa
Тут возник еще один вопрос: существует ли способ скопировать код из Mathematica в Microsoft Word так, чтобы в документ пошла "красивая" запись кода? Может, через MathType как-нибудь? »

Я всегда копировал как метафайл и вставлял картинкой. Это было в 4.1, сейчас не знаю, что в математике есть.
Плюсы: формулы набираются быстро и выглядят красиво (по сравнению с вордовским плагином)
Минусы: надо тащить с собой шрифты математики (штук 6). Иначе в документе каша.
Делал статьи полностью в математике - тоже вариант (потом можно экспортировать в латех).

Цитата:

Цитата TaDa
Product[(Nu - NuRoots[[k]])/(NuRoots[[m]] - NuRoots[[k]]), {k, Delete[Range[1, n1], m]}] »

а можно сделать так (используя свойства произведения):
Код:

phi[m_][x_] := Product[If[k==m,1,(x-x[k])/(x[m]-x[k])], {k,1,n}]
с табличным вариантом поможет комбинация Drop и MapIndexed (я уже полез в хелп за примером)

TaDa 10-12-2013 07:47 2269792

Вопрос немного не по теме, но я не стал создавать отдельной темы, поскольку вопрос, скорее всего, пустяковый.

Возможно, вы слышали про недавний сбой Яндекс.Диска, который повлек за собой серьезные нарушения в работе ОС. У меня, в частности, была затронута Wolfram Mathematica. По всей видимости, все ее файлы были удалены из реестра. Я переустановил Mathematica, но теперь работает только Kernel, а основная программа (если можно так ее называть) запустится не может. У меня Windows 7, в окне ошибки она выводит сообщение о том, что программа не работает, и предлагает отладить последнюю.

С откатом системы, видимо, не получится, поскольку старые и стабильные точки восстановления исчезли в результате сбоя Яндекс.Диска.

Словом, что посоветуете?


Время: 05:30.

Время: 05:30.
© OSzone.net 2001-