Ru-Board.club
← Вернуться в раздел «Программы»

» Mathematica (математика)

Автор: sabio
Дата сообщения: 24.11.2008 15:00
a1ekseo

Цитата:
возможно ли в Mathematica видеть весь ход решения задачи?


про это написано в FAQ
Автор: Partner1
Дата сообщения: 25.11.2008 08:10
a1ekseo

Цитата:
возможно ли в Mathematica видеть весь ход решения задачи?

Те кто хорошо разбираются в программировании Mathematica, в принципе могут сами написать программу для вывода шагов решения. См. например для дифференцирования:
http://documents.wolfram.com/mathematica/Demos/Notebooks/Step-by-StepDifferentiation.html
(Тут применение правил преобразования (Rules), пока выражение не перестанет изменяться)
Автор: TomasVercetti
Дата сообщения: 25.11.2008 12:11
Скажите, пожалуйста, исходя из каких соображений нужно выбирать x0 в FindRoot[lhs==rhs, {x, x0}] ? (Или подскажите, где про это написано?)
Автор: Griefin
Дата сообщения: 25.11.2008 22:00
Очевидно, исходя из соображений близости x0 к корню. Mathematica по умолчанию использует метод Ньютона, который довольно плохо сходится, если точка выбрана неудачно. Самой быстрой сходимостью обладает метод Брента (Method -> "Brent"), ему в качестве входных данных нужна не одна точка, а интервал, внутри которого должен быть корень: {x,x0,x1}. Поэтому всегда лучше использовать именно его. Кроме того, нужно помнить, что все численные методы построены в предположении о том, что корень внутри интервала всего один.
Автор: TomasVercetti
Дата сообщения: 26.11.2008 23:17
Спасибо! В моём случае численный счёт находит корни только если совсем рядом с ними либо стартовые точки, либо интервалы указаны...

Добавлено
Предположим, корень равен 50. Если я его ограничиваю (45,55), то математика находит его. А если (20,80) - то нет. Как я понимаю, в последнем случае метод идёт более крупным "шагом" и потому пропускает корень. А как его заставить идти более мелким "шагом"?
Автор: infovarius
Дата сообщения: 28.11.2008 11:38
Вышла 7-я версия. Добавлено: отображение линий тока и прочих штучек для векторных полей, параллелизация многих функций, много встроенных данных (например, человеческий геном) и обработчиков изображений. Как насчёт взломчика?
Автор: Griefin
Дата сообщения: 29.11.2008 03:09
TomasVercetti
Метод Ньютона иногда промахивается, т.к. основан на вычислении производной. Используйте методы, основанные на постепенной локализации корня: бисекции, секущие, Брента (он точно есть в Mathematica 6). Написать функцию, которая постепенно разбивает большой интервал на несколько малых и делает там поиск корней -- довольно простое дело.
Автор: Widok
Дата сообщения: 01.12.2008 11:26
infovarius
варезный вопрос
Автор: popkov
Дата сообщения: 07.12.2008 21:06
TomasVercetti

Цитата:
Скажите, пожалуйста, исходя из каких соображений нужно выбирать x0 в FindRoot[lhs==rhs, {x, x0}] ? (Или подскажите, где про это написано?)

Задавая подобные вопросы, следует очертить саму проблему минимизации. В разных случаях эффективными оказываются различные алгоритмы. Ответьте на следующие вопросы:
1) Доступен ли аналитический вид производной минимизируемой функции?
2) Это случайно не задача минимизации суммы квадратов отклонений функции от экспериментальных точек (тогда если на 1-й вопрос ответ положительный, лучшего метода, чем алгоритм Левенберга-Марквардта, просто не существует!).
3) Монотонная функция или есть много локальных минимумов?
4) Если функция дискретная или имеет особые точки, обязательно надо это принять во внимание!
и т.д.
Метода, который подходил бы для всех задач минимизации, попросту не существует!
Автор: dipsy
Дата сообщения: 09.12.2008 23:10
Подскажите, как нормально делать экспорт нотбуков математики на русском языке?
(латех, пдф или еще что..)
Кто скажет также, почему при экспорте в латех юникод записывается странным образом..?
пример:\unicode{043f}\unicode{0440}\unicode{0438}\unicode{0432}\unicode{0435}\unicode{0442}
Автор: Partner1
Дата сообщения: 10.12.2008 08:31
TomasVercetti

Цитата:
Скажите, пожалуйста, исходя из каких соображений нужно выбирать x0 в FindRoot[lhs==rhs, {x, x0}] ? (Или подскажите, где про это написано?)

Для нахождения "хорошего" приближения к решению в одномерном случае удобно нарисовать график функции как показано ниже:
Plot[{lhs,rhs}, {x,a,b}]
В двумерном случае (пример)
ContourPlot[{Sin[x + y] == 1/3 + x, x + 2 y == 0}, {x, -4, 4}, {y,-5,5}]
Сразу "на глаз" видны начальные значения:
FindRoot[{Sin[x + y] == 1/3 + x, x + 2 y == 0}, {{x, -0,5}, {y, 0.5}}]

Добавлено:
dipsy
PDF из любой программы, где есть печать удобно делать программой PdfFactory Pro
ну или FinePrint:
http://forum.ru-board.com/topic.cgi?forum=35&topic=1402#1
Автор: TomasVercetti
Дата сообщения: 10.12.2008 19:54
Griefin, popkov, Partner1 - спасибо за советы!
Для поиска корней на интервале использую метод секущих. Функции на заданном интервале хорошие. Сейчас по картинкам и ориетируюсь (правда из книжки - спасибо за ContourPlot : )

Всем спасибо - всё решилось
Автор: AMD_ATHLON
Дата сообщения: 23.12.2008 23:49
Здраствуйте инетресует такой вопрос, есть ли в математике метод неопределенных коэффициентов и как его использовать? и есть ли функция прообразования комплексого числа из экспонинциальной формы записи в тригонометрическую? Есть функция, от которой я нахожу обратное преобразование лапласа, так вот мне нужно ответ просто записать там не в экспонентах., а чтобы косинусы были (s^2 + 5*s + 9)/((s^2 + 9)*(s^2 + 2*s + 5)) вот такой пример и спользовал эту функцию InverseLaplaceTransform
Автор: popkov
Дата сообщения: 24.12.2008 00:04
AMD_ATHLON
Цитата:
есть ли функция прообразования комплексого числа из экспонинциальной формы записи в тригонометрическую?
Поиск в справке быстро приводит к функции ExpToTrig[]. Хотя аргументы тригонометрических функций, выводимые ей, оказываются комплекными в твоём случае. Однако последующее применение FullSimplify[] позволяет избавиться от комплексных аргументов:

In[1]:=InverseLaplaceTransform[(s^2 + 5*s + 9)/((s^2 + 9)*(s^2 + 2*s + 5)),
s, t] // ExpToTrig // FullSimplify


Out[1]=(1/52)*(-20*Cos[3*t] + (20*Cos[2*t] - 9*Sin[2*t])/E^t + 30*Sin[3*t])
(Mathematica 7.0.0)

Добавлено:
Цитата:
Здраствуйте инетресует

Цитата:
прообразования комплексого

Цитата:
экспонинциальной
Режет слух. Иногда полезно бывает воспользоваться программой проверки орфоргафии - благо, их сейчас много, и они умеют встраиваться в браузеры...


Добавлено:

dipsy
Цитата:
Кто скажет также, почему при экспорте в латех юникод записывается странным образом..?
У Mathematica с не-ASCII-символами всегда были проблемы, и исправлять их они не спешат. Для качественного экпорта ноутбуков с такими символами (кроме символов шрифтов Mathematica) единственный выход - печать на виртуальный принтер (Acrobat Distiller для PDF - это классика, надёжнее ничего нет; для печати в EMF в системах NT не выше Windows XP SP2 идеально подходит PrintMirror, хотя и Mathematica в EMF экспортирует кириллицу нормально; однако EMF не является portable-форматом, и на Windows-компах с отсутствующими исходными шрифтами эти отсутствующие шрифты будут сбрасываться на первый по алфавиту шрифт в списке - Arial!).
Автор: AMD_ATHLON
Дата сообщения: 24.12.2008 14:53
popkov

Спасибо огромное.
Автор: Igorr
Дата сообщения: 28.12.2008 21:53
Подскажите, пожалуйста, где можно посмотреть алгоритм/код процедуры/подпрограммы, рассчитывающей гипергеометрическую функция 2F2?
Интересует любой вариант языка программирования, не только для Mathematica.

Добавлено:
интересует, конечно, не прямое суммирование
Автор: Griefin
Дата сообщения: 28.12.2008 23:18
Функции вида pFq уже реализованы, см. HypergeometricPFQ.
Автор: Igorr
Дата сообщения: 29.12.2008 00:46

Цитата:
см. HypergeometricPFQ

где?
Автор: Griefin
Дата сообщения: 29.12.2008 01:57
В Справке к Mathematica.
Автор: Igorr
Дата сообщения: 29.12.2008 02:12

Цитата:
В Справке к Mathematica

Я там не нашел
Цитата:
алгоритм/код процедуры/подпрограммы

Где конкретно?
Автор: popkov
Дата сообщения: 29.12.2008 03:56
Igorr
В Mathematica 7 в "Documentation Center" в строке поиска набираешь "HypergeometricPFQ", и сразу попадаешь на страницу соответствующей функции... Я не знаю, то ли это, что тебе нужно, но на вопрос ответил...
P.S. "Поиск" рулит... - это ключевое преимущество версий 6 и выше, согласно разработчикам, - пользуйся!
Автор: Igorr
Дата сообщения: 29.12.2008 04:22
popkov

Цитата:
на вопрос ответил...
P.S. "Поиск" рулит... - это ключевое преимущество версий 6 и выше, согласно разработчикам, - пользуйся!

Возможно, я чего-то не понимаю, но где там алгоритм/код вычисления функции? Как его найти?
Автор: popkov
Дата сообщения: 29.12.2008 05:38
Igorr

Цитата:
где там алгоритм/код вычисления функции? Как его найти?

Хм... Ты от коммерческого пакета ожидал открытости алгоритмов...? Это коммерческая тайна, так что и не надейся на их ракрытие! В самом лучшем случае разработчики в документации могут сослаться на оригинальные статьи в научных журналах - но это скорее исключение... Что ещё добавить? Слепо верь - или пользуйся пакетами с открытым исходным кодом (только сколько времени ты потратишь на изучение этого кода?).
Автор: Griefin
Дата сообщения: 29.12.2008 18:42
Igorr
Алгоритмы есть в научных работах по вычислительной математике. Не факт, что доступ к ним тоже будет открыт. Обычно, для более быстрого вычисления таких рядов люди пользуются асимптотическими формулами, аналитическим продолжением и интегральными представлениями (чтобы аппроксимировать Гауссовыми квадратурами). Эти вещи можно найти в справочнике, но программу нужно писать самому. Однако, даже прямое суммирование дает неплохие результаты, если ряд хорошо сходится. Я недавно считал нечто с функцией Аппеля F4, и для достижения точности в 6-м знаке после запятой мне хватило первых десяти членов ряда. Оценку остаточных членов ряда обычно изучают на 1-м или 2-м курсе.
Автор: Igorr
Дата сообщения: 29.12.2008 19:28
Griefin

Цитата:
Не факт, что доступ к ним тоже будет открыт.

Есть факты:
http://webscripts.softpedia.com/scriptDownload/Generalized-Hypergeometric-Function-Download-34003.html
http://www.ece.mtu.edu/faculty/wfp/codes.html
Но эти варианты (это одна и та же программа с небольшими модификациями) меня пока не устраивают. А вот в Mathematica расчет мне понравился - потому и спросил алгоритм в этой теме, а не в темах по изучению математики.
Автор: terminat0r
Дата сообщения: 29.12.2008 22:53
Igorr
Я когда-то интересовался этим вопросом. Фортрановский код pFq лежит в основе почти всех программ. Он кстати работоспособный, проверено.
Автор: Igorr
Дата сообщения: 29.12.2008 23:24
terminat0r
Какой код ты имеешь ввиду?
Если по приведенным мной ссылкам, то он много случаев не считает, например, при ((p>q && abs(z)>1) && p > 2), хотя Mathematica - считает.
Автор: Griefin
Дата сообщения: 30.12.2008 05:45
Igorr
В Mathematica используются символьные преобразования pFq в другие функции, а в этой программе тупо суммируется оборванный ряд. Кроме того, при p > q + 1 && z != 0 ряд расходится. Если есть какие-то специальные случаи, то стоит обратиться к справочнику Бейтмена и Эрдейи и внести их в эту программу.
Автор: Igorr
Дата сообщения: 30.12.2008 05:53
Griefin
при чем здесь
Цитата:
p > q + 1

Автор: Griefin
Дата сообщения: 30.12.2008 06:22
В общем случае, при p = q + 1 ряд сходится только при abs(z) < 1, за исключением неких частных значений параметров. Их просто надо добавить в эту программу.

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Идея несуществующей программы...


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.