Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Wolfram Mathematica | Математика

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Открыть новую тему     Написать ответ в эту тему

xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Wolfram Mathematica 14

Загрузка и поиск "лекарств"в "Варезнике"


 
Здесь обсуждаем вопросы языка Mathematica и программы, которая ИМХО лучше других выполняет свою задачу и, кроме, того очень точно соответствует своему названию, хотя там не забыли и про физиков и химиков и всех остальных:)

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 16:00 01-12-2003 | Исправлено: zAlAn711, 18:21 10-01-2024
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
в 8ке само по себе число рассчитывается правильно, но 5*1.234567e8 или 1.234567e8*5 уже нет.

В 7.01 то же самое, но если поставить скобки, то работает:
 
In[4]:= 5*(1.234567 e8)
 
Out[4]= 6.17284*10^8

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 07:53 25-02-2011
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TomasVercetti

Цитата:
само по себе число рассчитывается правильно, но 5*1.234567e8 или 1.234567e8*5 уже нет.

 
Вот более проработанный вариант:

Код:
 
In[1]:= MakeExpression[x : RowBox[{___, _RowBox, ___}], f_] :=  
 MakeExpression[Level[#, {-1}] & /@ x, f]
 
 
In[2]:= MakeExpression[
  RowBox[{afx___, m_ /; NumberQ[ToExpression[m]], "e", "-",  
    e_?(IntegerQ[ToExpression[#]] &), pfx___}], f_] :=  
 MakeExpression[RowBox[{afx, m <> "*^-" <> e, pfx}], f]
 
In[3]:= MakeExpression[
  RowBox[{afx___, m_ /; NumberQ[ToExpression[m]],  
    e_ /; StringMatchQ[e, "e" ~~ __?(IntegerQ[ToExpression[#]] &)],  
    pfx___}], f_] :=  
 MakeExpression[RowBox[{afx, m <> "*^" <> StringDrop[e, 1], pfx}], f]
 
In[4]:= 5*1.234567e8
 
Out[4]= 6.17284*10^8
 
In[5]:= 1.234567e8*5
 
Out[5]= 6.17284*10^8
 
In[6]:= 5*1.234567e8*5
 
Out[6]= 3.08642*10^9
 
In[7]:= 5*1.234567e-8*5
 
Out[7]=3.08642*10^-7
 

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 13:21 25-02-2011 | Исправлено: r_green, 16:12 25-02-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос к спецам системы, как можно проще реализовать фильтрацию таблиц по признаку одного из столбцов, т.е. имеется исходная числовая матрица "matr1" и необходимо из неё получить матрицу "matr2" элементы одного из столбцов которой содержат только определённые значения, либо значения лежащие в определённых границах (или наборе границ). В Excel просто, в SQL тоже просто, а тут в документации и продцедурах закопаешься .. третий день голову ломаю ..
 
Напр. из матрицы 1 получить матрицу 2 содержащую в первой колонне только значения "a" и из матрицы 1 получить матрицу 3 содержащую в третьей колонне только значения "4":
matr1>matr2
matr1>matr3
 
:
 
matr1=
a 6 5    
b 6 1    
a 3 4    
c 6 4    
a 8 4    
b 6 2

 
...
...
 
matr2=
a 6 5    
a 3 4    
a 8 4

 
matr3=
a 3 4    
c 6 4    
a 8 4

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 01:23 05-03-2011
Partner1



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vikkiv
Попробуйте так.

Код:
 
matr1 = {{a, 6, 5}, {b, 6, 1}, {a, 3, 4}, {c, 6, 4}, {a, 8, 4}, {b, 6,
     2}};
 
ind2 = Flatten[Position[matr1[[All, 1]], a]];
 
ind3 = Flatten[Position[matr1[[All, 3]], 4]];
 
matr2 = matr1[[ind2]];
 
matr3 = matr1[[ind3]];
 
{MatrixForm[matr2], MatrixForm[matr3]}
 

 
С помощью команды matr1[[All, 1]] мы выбираем из matr1 элементы 1 столбца. Position[...,a] находим позицию элементов равных a. ind2=Flatten[..] делаем плоский список индексов элементов столбца равных a. И используем список индексов для выборки строк из матрицы matr1[[ind2]].

Всего записей: 273 | Зарегистр. 28-11-2007 | Отправлено: 07:32 05-03-2011 | Исправлено: Partner1, 07:35 05-03-2011
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vikkiv

Цитата:
из матрицы 1 получить матрицу 2 содержащую в первой колонне только значения "a" и из матрицы 1 получить матрицу 3 содержащую в третьей колонне только значения "4"

 

Код:
 
In[1]:= matr1 = {{a, 6, 5}, {b, 6, 1}, {a, 3, 4}, {c, 6, 4}, {a, 8, 4}, {b, 6, 2}};
 
In[2]:= matr2 = Select[matr1, #[[1]] == a &]
 
Out[2]= {{a, 6, 5}, {a, 3, 4}, {a, 8, 4}}
 
In[3]:= matr3 = Select[matr1, #[[3]] == 4 &]
 
Out[3]= {{a, 3, 4}, {c, 6, 4}, {a, 8, 4}}
 

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 12:56 05-03-2011
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Partner1
r_green
 
Спасибо огромное, обе продцедуры работают отлично, а то раньше приходилось на SQL сервер с базой данных несколько разных запросов посылать, что значило лишний трафик и дополнительную нагрузку на общий сервер.
Теперь модель работает как часы..

Код:
 
In[1]:= Needs["DatabaseLink`"];
In[2]:= OpenSQLConnection[];
 
In[3]:= RunScheduledTask[{
 SQLExecute[..,..,..];
...
 Export["C:\\Inetpub\\wwwroot\\...html",..];
 Export["C:\\Inetpub\\wwwroot\\....jpg",..];
}, nnn];
 
In[4]:= RemoveScheduledTask[ScheduledTasks[]];
In[5]:= ScheduledTasks[]
In[6]:= SQLConnections[]
 

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 17:28 05-03-2011 | Исправлено: vikkiv, 17:57 05-03-2011
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
Возник вот такой вопрос: решаю численно диф. уравнение с разными параметрами, параметры устанавливаю с помощью правила подстановки, примерно так:
(простой пример гармонического осциллятора )
 
First[NDSolve[{x''[t] + w^2 x[t] == 0, x[0] == x0,  x'[0] == v0}, x, {t, 0, tmax}] /. {w -> 1., x0 -> 1,  v0 -> 0, tmax -> 10}]
 
При этом сначала выдается такое красное предупреждение  
NDSolve::ndnl: Endpoint tmax in {t,0.,tmax} is not a real number. >>
 
а потом правильный результат интегрирования. Можно ли избавиться от этого предупреждения? При этом желательно не просто его отключить, а правильно применить подстановку, чтобы оно вообще не возникало.
Спасибо!

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 16:38 11-03-2011 | Исправлено: Andrew10, 16:39 11-03-2011
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrew10

Код:
 
First[Hold@NDSolve[{x''[t] + w^2 x[t] == 0, x[0] == x0, x'[0] == v0}, x, {t, 0, tmax}] /. {w -> 1., x0 -> 1, v0 -> 0, tmax -> 10}]
 

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 19:56 11-03-2011
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
r_green
 Спасибо! Идея понятна, правда в такой форме функция First только снимает атрибут Hold, но не убирает одну пару скобок во вложенном списке, как это мне нужно. Поэтому окончательно необходимый результат получается таким образом:
 

Код:
First@ReleaseHold[
  Hold@NDSolve[{x''[t] + w^2 x[t] == 0, x[0] == x0, x'[0] == v0},  
     x, {t, 0, tmax}] /. {w -> 1., x0 -> 1, v0 -> 0, tmax -> 10}]
 

 
Еще раз спасибо!

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 22:26 11-03-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrew10
Вот более элегантное решение:
First[Unevaluated@
   NDSolve[{x''[t] + w^2 x[t] == 0, x[0] == x0, x'[0] == v0},  
    x, {t, 0, tmax}] /. {w -> 1., x0 -> 1, v0 -> 0, tmax -> 10}]
Здесь я с помощью Unevaluated одноразово защищаю от выполнения NDSolve[...], и его выполнение происходит уже после того, как замена выполнена.

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 13:30 12-03-2011
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
 
Спасибо! Буду иметь ввиду и этот способ.

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 15:09 12-03-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrew10
Способ с Unevaluated является официальным методом, позволяющим имитировать наличие Hold*-атрибута у функции, которая его не имеет. Для иллюстрации: если присвоить атрибут HoldFirst функции ReplaceAll (infix form этой функции - "/."), мы получим в точности тот же результат:

Код:
 
Unprotect[ReplaceAll]; SetAttributes[ReplaceAll, HoldFirst];
First@NDSolve[{x''[t] + w^2 x[t] == 0, x[0] == x0, x'[0] == v0},  
   x, {t, 0, tmax}] /. {w -> 1., x0 -> 1, v0 -> 0, tmax -> 10}
 

(Этот пример - только для иллюстрации. На практике следует пользоваться методом с Unevaluated, т.к. модификация встроенных функций - занятие опасное).

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 03:50 13-03-2011 | Исправлено: popkov, 03:57 13-03-2011
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Разрешите еще вопрос как знатоку: какую книгу Вы бы посоветовали для изучения Математики не на самом начальном уровне, а на следующих: так сказать на Intermediate Level и на  Advanced Level? Книг много, какую лучше всего читать. Может не одну, а пару - тройку?

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 11:53 13-03-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrew10
Книга Леонида Шифрина, которую я уже рекомендовал ранее, содержит материал уж как минимум Intermediate Level - точно (хотя написана так ясно, что подходит и для начального уровня). В конце книги есть список рекомендуемой литературы для дальнейшего изучения. Но задаваться вопросами и самостоятельно ставить эксперименты никто не запрещал - это и есть главный метод изучения! Причем разработчики с самого начала вполне открыто это демонстрировали (достаточно почитать The Mathematica Journal)!  
 
Кроме того, очень полезно регулярно тратить немного времени, чтобы прочитать ответы разработчиков и опытных пользователей на постоянно возникающие вопросы в официальной группе новостей, а также на сайте stackoverflow.com. Так можно узнать практические методы решения "нестандартных" задач, которые из документации не почерпнуть, а в руководствах легко проглядеть, не придав должного значения (если даже они там описаны).

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 13:01 13-03-2011 | Исправлено: popkov, 13:11 13-03-2011
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Спасибо!

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 13:07 13-03-2011
lesnikforum

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Установил на компьютере 8 версию математики и удивился, что она работает почти в 2 раза медленнее 6 версии. Решал систему трёх уравнений с помощью FindRoot. Кто-нибудь может прокомментировать?

Всего записей: 4 | Зарегистр. 18-03-2011 | Отправлено: 14:36 18-03-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lesnikforum
Да что тут комментировать, прогресс налицо:
Цитата:
Вот функция Solve.
 
Mathematica 5.1
{9.953 Second, Null}
 
Mathematica 7.0.1
{59.312, Null}
 
Mathematica 8.0.0
Method -> "Legacy"
{64.891, Null}  

Это результаты для задачи, описанной мной здесь.

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 17:12 18-03-2011
Moscow

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, недавно услышал, что Математика умеет подгружать информацию с определенных ресурсов, речь шла о Gulf Stream (Гольфстриме), обсчитывать какие-то характеристики, что-то еще делать... Кто-нибудь в курсе этой стороны Математики? Я понял, что я в этом полный чайник, не знаю даже, куда копать...

Всего записей: 215 | Зарегистр. 02-12-2004 | Отправлено: 21:18 18-03-2011
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov

Цитата:
Это результаты для задачи, описанной мной здесь

В 8.0.1, похоже, несколько исправили ситуацию - у меня на этой задаче 8-ка оказалась на 30% быстрее чем 7.01.
 
 
Добавлено:
Moscow

Цитата:
недавно услышал, что Математика умеет подгружать информацию с определенных ресурсов, речь шла о Gulf Stream (Гольфстриме), обсчитывать какие-то характеристики, что-то еще делать... Кто-нибудь в курсе этой стороны Математики?

Возможно, Вы имеете в виду интеграцию с Wolfram Alpha. Или, может быть, возможность обрабатывать данные из внешних источников.

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 21:20 18-03-2011
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
r_green

Цитата:
у меня на этой задаче 8-ка оказалась на 30% быстрее чем 7.01.  

Приятно слышать. Интересно было бы сравнить производительность на более широком наборе тестовых задач.
 
Кстати, проверьте, пожалуйста, воспроизводится ли в 8-ке следующий глюк MemoryConstrained предыдущих версий:
 
In[1]:= MaxMemoryUsed[]
MemoryConstrained[
  Quiet@Module[{f, n = 0},
     f[x_] := f[x + 1] + Plus @@ Table[Random[], {10^7}];
     Block[{$RecursionLimit = 3000}, f[0]]];, 90000000];
MaxMemoryUsed[]

Out[1]= 10757752
 
Out[3]= 291258232
 
(данный результат у меня получился в v.7.0.1).
 
Как видите, MathKernel  в пике "отъедает" дополнительные 260 Мб памяти, хотя уже при попытке захватить дополнительные 90 Мб выполнение должно было бы быть абортировано. Этот глюк, вероятно, зависит от операционной системы. Если не воспроизводится с текущими значениями, можно попробовать изменить их, - например, увеличить второй параметр MemoryConstrained, сделав его ближе к 260 Мб. Или/и увеличить $RecursionLimit. Или заменить Table[Random[], {10^7}] на Table[Random[], {10^7}, {10}].

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 23:52 18-03-2011 | Исправлено: popkov, 23:54 18-03-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Компьютерный форум Ru.Board » Компьютеры » Программы » Wolfram Mathematica | Математика


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru