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

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

Автор: popkov
Дата сообщения: 13.04.2008 19:00
Давайте упростим ещё дальше:
Integrate[E^(a*x), x]
ответ:
E^(a*x)/a
неверен при a=0... хоть вешайся - Mathematica не видит нулей! Это подлежащая фундаментальная недоработка, из которой растёт целый веер багов! Зная это простое правило, нетрудно найти тысячи багов, и хуже того - в более сложных случаях эта недоработка должна приводить именно к появлению совершенно непредсказуемых случайных частных решений, которые будут вводить в заблуждение пользователя! Причём именно тогда, когда ответ труднее всего проверить независимыми методами, а вручную - чрезвычайно трудоёмко!
Автор: vb2008
Дата сообщения: 13.04.2008 20:27
popkov writes


Цитата:
Давайте упростим ещё дальше:
Integrate[E^(a*x), x]
ответ:
E^(a*x)/a
неверен при a=0


А вот что дает мой любимчик Derive

LIM(INT(EXP(a*z),z),a,0)

z

..............................................

LIM(INT(EXP(a*z)*SINH(z),z),a,1)

#e^(2*z)/4-(2*z+1)/4

..............................................

LIM(INT(EXP(z)*SINH(a*z),z),a,1)

#e^(2*z)/4-(2*z+1)/4

..............................................

и, на закуску,

LIM(INT(COS(a*z)/SIN(z),z),a,1)

LN(SIN(z))
Автор: popkov
Дата сообщения: 13.04.2008 20:54
vb2008

Цитата:
А вот что дает мой любимчик Derive

Выходит, Derive круче! По крайней мере, в отношении интегрирования простых функций.
Автор: mumbojumbo
Дата сообщения: 17.04.2008 04:34

Цитата:
Еще хуже вот что. Даже предельный переход порождает мусор

Limit[Integrate[Cos[a z]/Sin[z], z], a -> 1]

Infinity


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

Limit[Assuming[a > 0 && z > Pi/2 && z < Pi,
Integrate[Cos[a t]/Sin[t], {t, Pi/2, z}]], a -> 1]

получим выражение эквивалентное Log[Sin[z]].

Почему при вычислении
Limit[Integrate[E^(a x), x],a->0]
Derive дает x для меня загадка, ведь предел
Exp[a x]/a при a->0 не существует.
Автор: popkov
Дата сообщения: 17.04.2008 11:37
mumbojumbo

Цитата:
выполнив

Limit[Assuming[a > 0 && z > Pi/2 && z < Pi,
Integrate[Cos[a t]/Sin[t], {t, Pi/2, z}]], a -> 1]

получим выражение эквивалентное Log[Sin[z]].

Что-то уж очень сложный ты пример приводишь. По-хорошему, следуя твоей логике и объяснениям Daniel Lichtblau (Wolfram Research), всё должно работать правильно при следующей записи:
[no]Limit[Integrate[Cos[a*t]/Sin[t], {t, m, n}], a -> 1][/no]
Однако на моём компьютере MathKernel после 23 минут работы над этой задачей отожрал 80Мб оперативки, и я его вырубил...
Сам Daniel Lichtblau в своём последнем сообщении на comp.soft-sys.math.mathematica заметил, что этот случай является "исключением", и связан с ограничениями функции Limit[].

Добавлено:
Хотя при указании конкретных пределов интегрирования ответ всё же правильный:
[no]int1 = Limit[Integrate[Cos[a*t]/Sin[t], {t, 2, 3}], a -> 1]
int2 = Integrate[Cos[t]/Sin[t], {t, 2, 3}]
N[int1 - int2, 30][/no]

ответ:
0.*10^-76 + 0.*10^-77*I
Автор: mumbojumbo
Дата сообщения: 18.04.2008 06:38
popkov

Цитата:
Что-то уж очень сложный ты пример приводишь. По-хорошему, следуя твоей логике и объяснениям Daniel Lichtblau (Wolfram Research), всё должно работать правильно при следующей записи:
Limit[Integrate[Cos[a*t]/Sin[t], {t, m, n}], a -> 1]
Однако на моём компьютере MathKernel после 23 минут работы над этой задачей отожрал 80Мб оперативки, и я его вырубил...


Правильно, должно, но только при определенных ограничениях на интервал (m,n). Так, если внутри этого интервала лежит хоть один нуль синуса, то интеграл расходится. А если мы хотим получить ответ побыстрее, то нужно "помочь" прогамме указав как можно больше информации о параметрах. Поэтому мой пример выполняется около минуты, а не полчаса. Вообще то глупо требовать от этой, равно как и любой другой программы интеллектуальных способностей, это всего лишь инструмент и голову он никогда не заменит.

Автор: amv
Дата сообщения: 23.04.2008 19:33
Может кому интересно:
The Russia, Belarus, and Ukraine Mathematica Tour 2008
http://www.wolfram.com/russia2008
Автор: Demon251
Дата сообщения: 28.04.2008 19:32
Люди, плиз, скажите, а можнт Математика6 выводить не только результат, но и само решение?
Автор: Cheery
Дата сообщения: 28.04.2008 19:38
Demon251

Цитата:
но и само решение?

нет
http://www.wolfram.com/products/student/mathforstudents/qa.html

Цитата:
I'm searching for a program that will show step by step how my equations are solved. Does Mathematica for Students have this capability?
Unfortunately, Mathematica will not provide step-by-step explanations for your solutions. However, a program could be written in Mathematica's high-level programming language to provide this feature.

Calculus WIZ, an interactive homework helper based on the most widely used calculus textbooks, will show you the steps for each calculus problem. Calculus WIZ is for use with Mathematica for Students and can be purchased at your local campus bookstore or directly from Wolfram Research.
Автор: popkov
Дата сообщения: 04.05.2008 08:07
Comparison of mathematical programs for data analysis
Автор: Griefin
Дата сообщения: 05.05.2008 05:41
Сравнение результатов 5-й и 6-й версий на современном железе (процессор Intel Core 2 Quad). По очкам Mathematica 6.0.2 выигрывает, особенно в решении линейных систем и умножении матриц. Но в элементарных функциях и численном интегрировании все равно уступает.
http://img337.imageshack.us/my.php?image=math6vs5ci4.png
Автор: popkov
Дата сообщения: 05.05.2008 07:13
Griefin
Спасибо за ценную инфу! Значит, они ещё и функцию Expand[] более тормознутой сделали в 6-ке. Хотя изменилось в ней только то, что она стала Listable. Похоже, они так топорно вносили изменения, что эта функция стала требовать почти на 30% больше времени.
Интересно, взятие обратной матрицы и нахождение корней полиномов тоже стало медленнее?
Автор: hirurgoid
Дата сообщения: 05.05.2008 08:28
чувачки, есть необходимость построить 3х мерную диаграмму рассеяния (scatter plot), по трём разным признакам...причем нужно как минимум две (а в идеале 6) разные группы данных как-то отличать (цвет, маркер)...Математика поможет?..это первое, что я нашел в гугле по поиску "three dimensional plotting"
сорри, если оффтоп
Автор: popkov
Дата сообщения: 05.05.2008 12:21
hirurgoid
На первый раз простительно, но "чувачки" здесь не лучшее обращение, если хочешь получить ответ. Mathematica поможет, но тебе лучше воспользоваться специализорованной программой типа Origin 8.
Автор: popkov
Дата сообщения: 08.05.2008 07:37
Да уж, ну и люди работают в Wolfram Research! Похоже, некоторые отделы по лени скоро смогут побить рекорды разработчиков EndNote!
В течение всей истории версий Mathematica не работает нормально экпорт в .pdf русскоязычного (или любого другого Unicode) текста. На сообщение об этом в группе новостей один из разработчиков дал "обнадёживающий" ответ:

Цитата:
These are known limitations in Mathematica's PDF export capabilities.
Rob
Wolfram Research

Хорошо хоть какой-то ответ, но неужели за столько лет нельзя было справиться с юникодом? Уже давно существует полно свободных программ генерации pdf, с открытым кодом, которые это умеют! И всё, что они могут написать - что это "известное ограничение" Mathematica! Позор!



UPDATE: кстати, после того, как я написал сообщение аналогичного содержания (но в отличие от этого вполне корректное и спокойное, без малейших оскорблений: сказал, что слышать только "it is known" в ответ на сообщения о многолетних багах меня разочаровывают в WR) в ту группу новостей, меня там попросту забанили (а сообщение не пропустили). Вот и думай после этого, что за люди там работают и какую они ведут политику... и куда она их уводит...
Автор: hirurgoid
Дата сообщения: 11.05.2008 07:00
за дельный совет popkov'у (таксономический статус выбрать на свое усмотрение мега респект!..Origin8 прекрасно справился с 3д скаттером, так что я даже на радостях купил студенческую лицензию
еще раз спасибо!
Автор: KChernov
Дата сообщения: 14.05.2008 09:57
Подскажите хорошую книгу по 6-ке.
А то хелп встроенный какой-то недоделанный (например мало примеров)
Автор: popkov
Дата сообщения: 14.05.2008 11:40
KChernov

Цитата:
Подскажите хорошую книгу по 6-ке.
А то хелп встроенный какой-то недоделанный (например мало примеров)

Ты, наверное, с 5-кой не работал: там примеров раз в 40 меньше!
А хорошие, вроде как, книги (с примерами) - это, вероятно, в первую очередь работы M.Trott'а. Некоторые доступны на нашем трекере. и на torrents.ru.
Автор: KChernov
Дата сообщения: 15.05.2008 14:26
popkov

Цитата:
Ты, наверное, с 5-кой не работал: там примеров раз в 40 меньше!

Ну значит они работают в правильном направлении


Цитата:
А хорошие, вроде как, книги (с примерами) - это, вероятно, в первую очередь работы M.Trott'а.

Спасибо, посмотрю

Вот попробовал сделать пример из хелпа(tutorial/AnExampleDefiningYourOwnIntegrationFunction) - не получается:

Код: integrate[y_+z_,x_]:=integrate[y,x]+integrate[z,x]
integrate[c_y_,x_]:=c integrate[y,x]/;FreeQ[c,x]
integrate[c_,x_]:=cx/;FreeQ[c,x]
integrate[x_^n_.,x_]:=x^(n+1)/(n+1)/;FreeQ[n,x]&&n!=-1
integrate[1/(a_.x_+b_.),x_]:=Log[ax+b]/a/;FreeQ[{a,b},x]
integrate[Exp[a_.x_+b_.],x_]:=Exp[ax+b]/a/;FreeQ[{a,b},x]
integrate[a x + b x^2 + 3, x]
Автор: popkov
Дата сообщения: 15.05.2008 21:06
KChernov

Цитата:
Или я как-то не так делаю?

Подсказать ответ не могу, но сравнительно недавно в соответствующей группе новостей проскакивал вопрос про обучение Integrate. Рекомендую также выполнить поиск в отфильтрованном архиве этой группы (MathGroup Archive), хранящемся на сайте Wolfram Research (вообще, через справочную систему можно сразу задать поиск по всем сайтам Wolfram, включая архив этой группы - кнопка "Try your search on all Wolfram sites").

Добавлено:

Цитата:
Ну значит они работают в правильном направлении

В отношении документации - да. Но одно то, что поиск в ней сделан на Жабе - уже явный признак деградации команды разработчиков! Подумать только, самая крутая и универсальная система компьютерной алгебры, в ядро которой уже давно встроены алгоритмы поиска, в т.ч. с использованием регулярных выражений, - и использует для поиска в своей документации громоздкую неповоротливую Жабу, которая отжирает в 2 (!) раза больше памяти, чем ядро программы во время активной работы! Жаба глючит и вызывает тем самым глюки ядра - потому что работает с ним в паре, жутко тормозит на слабых машинах (хотя ядро куда более сложные задачи выполняет быстро и без тормозов)! Меньше всего я ожидал увидеть в составе следующей версии - этого монстра, хотя дурные предчувствия были... После летающей 5-ки переход на 6-ку оказался безрадостным. Единственное оправдание - действительно круто расширенная, но всё ещё далеко не полная документация, и исправление жутко тупого "бага с пробелом" 5-ки, который и в версии 5.2 не исправили. Этот баг и вызывал у меня настоящие дурные предчувствия (не только он)... Его они исправили, но появление Жабы - это само по себе баг весом в две тонны...
Автор: mumbojumbo
Дата сообщения: 16.05.2008 04:06

Цитата:
Код:integrate[y_+z_,x_]:=integrate[y,x]+integrate[z,x]
integrate[c_y_,x_]:=c integrate[y,x]/;FreeQ[c,x]
integrate[c_,x_]:=cx/;FreeQ[c,x]
integrate[x_^n_.,x_]:=x^(n+1)/(n+1)/;FreeQ[n,x]&&n!=-1
integrate[1/(a_.x_+b_.),x_]:=Log[ax+b]/a/;FreeQ[{a,b},x]
integrate[Exp[a_.x_+b_.],x_]:=Exp[ax+b]/a/;FreeQ[{a,b},x]
integrate[a x + b x^2 + 3, x]

То есть почему-то срабатывает только первое правило
Или я как-то не так делаю?


Нужно быть внимательнее с синтаксисом, так во втором правиле между c_ и y_ должен стоять пробел или знак умножения (*), аналогичные ошибки и в остальных правилах.
Автор: KChernov
Дата сообщения: 16.05.2008 12:55
popkov
Спасибо, попробую


Цитата:
и использует для поиска в своей документации громоздкую неповоротливую Жабу

То то я удивлялся, а чего это она так тормозит

mumbojumbo

Цитата:
Нужно быть внимательнее с синтаксисом, так во втором правиле между c_ и y_ должен стоять пробел или знак умножения (*), аналогичные ошибки и в остальных правилах.

Спасибо, попробую, мб действительно в этом и дело
Только вот это я скопировал из их хелпа - так что это еще один его минус
Автор: vb2008
Дата сообщения: 16.05.2008 19:36
popkov writes

Цитата:
поиск в ней сделан на Жабе


Аффтар жжот!


Цитата:
использует для поиска в своей документации громоздкую неповоротливую Жабу, которая отжирает в 2 (!) раза больше памяти, чем ядро программы во время активной работы!


Аффтар, пеши есчо!!

(З.Ы.

Разработчику Жабы: Аффтар, выпей йаду! В Бабруйск, жывотное!)



Автор: DinaRest
Дата сообщения: 18.05.2008 22:05
Подскажите мне пожалуйста, как импортировать русский текст?
Автор: popkov
Дата сообщения: 19.05.2008 06:07
DinaRest

Цитата:
Подскажите мне пожалуйста, как импортировать русский текст?

По умолчанию команда Import[] распознаёт только ASCII и юникод (см. справку, ref/format/Text). Сохрани в кодировке Юникод (UTF-8) или (лучше) просто укажи точную кодировку файла:
Import["C:\1.txt", CharacterEncoding -> $SystemCharacterEncoding]

А зачем, если не секрет?
Автор: KChernov
Дата сообщения: 19.05.2008 15:45
Можно ли (и как лучше) решить следующие вопросы:
1. Решатели не определяют переменные, которые в них заданы.
То есть после команды типа
Код: a=5
Solve[a+b==10,b]
Автор: DinaRest
Дата сообщения: 19.05.2008 19:06

Цитата:
А зачем, если не секрет?

Надо для решения задачи... огромное спасибо за помощь, а то я уже сама придумала, как перевести эти иероглифы в русский текст!!!!
Автор: popkov
Дата сообщения: 19.05.2008 23:40
KChernov

Цитата:
но переменная b продолжает быть неинициализированна

Так и задумано, всё правильно. Переменная b является локальной переменной для Solve.

Цитата:
Конечно можно каждый раз делать переприсваивание, но мб есть более удобный способ (галочка, команда или опция)?

Насколько я знаю, нет - и не может быть, поскольку результат, выдаваемый Solve[] и Reduce[], может содержать условия, и вообще иметь сложную структуру. Solve[] выдаёт ответ в форме правил замены, для Reduce[] есть специальная команда, которая заставляет его делать то же. Чтобы воспользоваться результатом, надо использовать полученные правила:
bGlobal=b/.Solve[a+b==1,b]
Можно присвоить и b, но тогда повторное выполнение Solve будет приводить к ошибке, т.к. b уже будет иметь конкретное значение:
b=(b/.Solve[a+b==1,b])


Цитата:
Как правильно вставлять в Ноутбук текст? У меня не получается сразу вставлять так, чтобы субж не попробовал его выполнить То есть если потом уже вставить - нормально, а вот если сразу...

Не сталкивался с такой проблемой, опиши подробнее.
Автор: Griefin
Дата сообщения: 20.05.2008 19:26
Известно ли уважаемым пользователям, что в Mathematica крайне тормозная реализация функции Plot? Например, если вручную сделать таблицу точек, а затем нарисовать ее используя ListPlot, то получится в десятки раз быстрее, чем просто с Plot.
Автор: popkov
Дата сообщения: 21.05.2008 11:21
Griefin

Цитата:
Известно ли уважаемым пользователям, что в Mathematica крайне тормозная реализация функции Plot? Например, если вручную сделать таблицу точек, а затем нарисовать ее используя ListPlot, то получится в десятки раз быстрее, чем просто с Plot.

Ну да, и причины понять нетрудно. Например, построим график:
Plot[x, {x, 0, 10}]
А теперь посмотрим, как он выглядит "Изнутри":
%//InputForm
Нетрудно подсчитать, что прямая линия y=x построена как ломаная, состоящая из 77 отрезков!
Точно такой же график можно построить и иначе, по двум точкам:
ListPlot[{{0, 0}, {10, 10}}, Joined -> True]
Результат визуально идентичен, вероятность каких-либо искажений при импорте в другие приложения или выводе на печать близка к нулю, в отличие от первого варианта!

Однако вышесказанное - ещё цветочки! В случае, если функция не является гладкой во многих местах, возможны заметные тормоза из-за того, что Plot[] будет пытаться "уточнить" форму функции в местах большой кривизны!

Всё это - плата за универсальноть и, по сути, претензий к разработчикам по этому поводу у меня нет. Насколько я понимаю, Plot[] не пытается брать производные и на их основе выполнять анализ поведения функции. В общем-то, это наиболее простое и разумное поведение.


Гораздо хуже то, что разработчики не спешат исправлять очевидные баги в таких базовых функциях, как Show[], Export[] и т.п. Написав о нескольких таких багах в официальную группу новостей, я понял, почему авторы одной статьи о системах символьной математики назвали отношение разработчиков Mathematica к аргументированной критике в свой адрес "болезненным"! Вот как они себя ведут: на сообщения о реальных багах просто не отвечают, оставляя их безо всякого внимания. Многие такие сообщения не пропускают модераторы. Авторов таких сообщений банят после 2-3 постов о багах или после даже одного поста с действительно обоснованной, аргументированной критикой в адрес компании. На сообщения о тупейших недоработках, тянущихся десятилетиями от версии к версии, они отвечают, что "это известное ограничение". И, судя по тому, что пишут в группе новосей, никому до этого дела нет! Многие пользователи занимают следующую позицию: "чтобы извлечь больше пользы от программы, не следует бороться с ней!". И при этом забывают, что для извлечения большей пользы надо уметь использовать программу наиболее гибким образом, а при таком использовании неизбежно натыкаешься на тупые баги! А сообщать о них нельзя - разработчикам неприятно...

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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