?

Log in

No account? Create an account

Previous Entry | Next Entry

Не помню, откуда взялся этот стиш и есть ли у него автор. В Сети находится только в несколько перевранном виде.

* * * 

Вот БЭСМ, которой владеет ВЦ.

А вот ввод,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.

А это — колода,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.

А вот лаборантка, младая и пышная,
Которая карту засунула лишнюю
В большую и важную очень колоду,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.

А это — АВОСТ,
К которому путь неизбежен и прост,
Когда лаборантка, младая и пышная,
Карту засунет заведомо лишнюю
В большую и важную очень колоду,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.

Tags:

Comments

( 180 comments — Leave a comment )
Page 1 of 2
<<[1] [2] >>
darth_vasya
May. 7th, 2009 10:49 am (UTC)
Прекрасно! В мемориз и к себе :)
slobin
May. 7th, 2009 11:32 am (UTC)
Гм... А ведь я ни разу не работал с перфокартами на БЭСМ. На ЕС -- работал, а на БЭСМ -- только с терминала. (В обоих случаях "работал" значит "учился": программы, которые не стыдно назвать работой, начались всё-таки с ДВК и им подобных).

... Удар ниже чёрного пояса ...

termometr
Nov. 8th, 2010 10:22 am (UTC)
Здравствуйте.

Спасибо, что предложили помощь по Вольфрам-математике.
Отдельное сообщество организовывать пока, наверное, нет смысла, поэтому почему бы блаародным донам не покидать кости прято тут, в этой теме?

вы не против?

тогда
вопрос №1.

Есть замкнутая система алгебраических уравнений.
Задача - исключить все, кроме одной, переменные и представить итоговое ур-е в наиболее простом виде.

In[2]:= Collect[Eliminate[{
rs*X == as*(Sm - S)*D1,
ro*X == Fin,
rp*X == ap*P*D1,
rs == D1 + ro + rp,
Nox*ro + Npx*rp == D1 + mx,

rs == as*ds*S},
{S, P, rp, rs, ro}], X, Simplify]

Out[2]= D1 Fin (Nox - Npx) + (ds Fin (Nox - Npx) - D1^2 (1 + Npx) +
as D1 ds Npx Sm) X - D1 ds (1 + Npx) X^2 == D1 mx X + ds mx X^2

на выходе получили правую часть не равную нулю, поэтому полином не максимально прост по форме. Как заставить программу перекидывать все с права налево автоматически?
fregimus
Nov. 8th, 2010 03:37 pm (UTC)
То есть, надо получить квадратное уравнение от X, да?

Collect не преобразует выражение. Результат Eliminate получается с ненулевой правой частью, а Collect собирает степени X слева и справа по отдельности. Передайте результат Eliminate еще одному вызову Simplify, т. е.

In[2]:= Collect[Simplify @ Eliminate[{

ну и далее по тексту.

In[3]:= Collect[
Simplify@Eliminate[{rs*X == as*(Sm - S)*D1, ro*X == Fin,
rp*X == ap*P*D1, rs == D1 + ro + rp, Nox*ro + Npx*rp == D1 + mx,
rs == as*ds*S}, {S, P, rp, rs, ro}], X, Simplify]

Out[3]= D1 Fin (-Nox + Npx) + (D1^2 (1 + Npx) + ds Fin (-Nox + Npx) +
D1 (mx - as ds Npx Sm)) X + ds (D1 + mx + D1 Npx) X^2 == 0
(no subject) - termometr - Nov. 8th, 2010 04:29 pm (UTC) - Expand
(no subject) - fregimus - Nov. 8th, 2010 07:26 pm (UTC) - Expand
(no subject) - termometr - Nov. 8th, 2010 08:50 pm (UTC) - Expand
(no subject) - fregimus - Nov. 8th, 2010 09:52 pm (UTC) - Expand
(no subject) - termometr - Nov. 9th, 2010 09:56 am (UTC) - Expand
(no subject) - fregimus - Nov. 9th, 2010 10:09 am (UTC) - Expand
(no subject) - termometr - Nov. 9th, 2010 04:35 pm (UTC) - Expand
(no subject) - fregimus - Nov. 9th, 2010 06:13 pm (UTC) - Expand
(no subject) - termometr - Nov. 9th, 2010 08:15 pm (UTC) - Expand
(no subject) - termometr - Nov. 9th, 2010 08:21 pm (UTC) - Expand
(no subject) - fregimus - Nov. 10th, 2010 01:27 am (UTC) - Expand
?PolynomialQ - termometr - Nov. 10th, 2010 01:28 pm (UTC) - Expand
Re: ?PolynomialQ - termometr - Nov. 10th, 2010 01:40 pm (UTC) - Expand
(no subject) - fregimus - Nov. 8th, 2010 03:50 pm (UTC) - Expand
termometr
Nov. 10th, 2010 01:22 pm (UTC)
Вопрос 6. Как вставлять комментарии?
ответ 6.
Если вы скармливате текстовые файлы с расширением .m прямо MathKernel, то комментарии (* вот такие *). Если вы используете frontend, то лучше всего писать текст в текстовых ячейках, ведь frontend — это целый текстовый процессор. Поставьте курсор в ячейку или между, и выберите из меню Format/Style/Text. Там же увидите shortcut для этого стиля (и других полезных), чтобы в это меню больше зазря не ходить. Можно, конечно, и (* *) писать в ячейках стиля Input, но они форматируются убого.

*******
Как подключить этот frontend ?
Замучился переносить из математики в Ворд и обратно, ибо Ворд не считает, а математика распечатывает мелким шрифтом.
fregimus
Nov. 10th, 2010 04:08 pm (UTC)
Frontend - графическая оболочка. Если распечатывает, и к тому же мелким шрифтом — Вы в нем и работаете.

Вы в Windows работаете, да? Надо увеличить шрифт при распечатке — правильно? Это не очень просто, попробуйте, может, получится.

Format/Edit stylesheet... Откроется окно Style Definitions for ... (это тоже notebook). В нем будет всего одна ячейка: Ineriting style definitions from ...

Поставьте курсор ниже и нажмите, скажем, пробел. Добавится новая ячейка, как обычно при вводе. Дальше мы схитрим: нажмиет Ctrl+Shift+E. Ячейка превратится в описание структуры: Cell[....]. Выделите весь этот текст и замените на:

Cell[StyleData[All, "Printout", StyleDefinition -> None], Magnification->1.2]

Опять в этой ячейке нажмите Ctrl+Shift+E. Ячейка превратится в описание стиля: Local definitions for all styles in style environment Printout.

Перейдите в Ваш notebook и попробуйте напечатать. Может, все и увеличится. Кажется, должно бы.

Может, все и увеличится - termometr - Nov. 11th, 2010 03:14 pm (UTC) - Expand
termometr
Nov. 10th, 2010 01:27 pm (UTC)
7. Как инициировать переменные?
Есть у меня подозрение, что при длительных расчетах математика начинает выдавать разные ответы на одни и те же задачи, запущенные в разное время.

Я поступаю тупо - сохраняю файлы, выхожу из программы, запускаю программу и по новой открываю файлы.

Как упростить инициализацию переменных?
каков ее механизм?

как работают и в чем разница операторов "=" и "==" ?
fregimus
Nov. 10th, 2010 04:28 pm (UTC)
Выходить из программы не надо, достаточно вырубить kernel. Вычислите функцию Quit[] или то же самое в меню: Evaluation/Quit Kernel/Local

Думаю, что проблема получается из-за того, что какие-то из переменных получают значения, а Вы хотите, чтобы они оставались символами. Переменную можно лишить значения оператором =.

In[100]:=
a = 5;
a
Out[101]= 5
In[102]:=
a =.;
a
Out[103]= a

Оператор = присваивает значение символу (это функция Set[]). == — оператор сравнения, функция Equals[]

In[7]:= 2*2 == 4

Out[7]= True

In[8]:= 2*2 = 4

During evaluation of In[8]:= Set::write: Tag Times in 2 2 is Protected. >>

Out[8]= 4

Я написал в примере выше ==0, просто чтобы напечаталось как уравнение, потому что перед этим я сравнение с нулем откусил с помощью Part. A вообще любое выражение в математике — список вложенных списков с разными головами, которые можно посмотреть функцией FullForm[]

In[1]:= x + 1
Out[1]= 1 + x

In[2]:= x + 1 // FullForm
Out[2]//FullForm= Plus[1, x]

In[3]:= PolynomialQ[%, x]
Out[3]= True

In[4]:= x + 1 == 0
Out[4]= 1 + x == 0

In[5]:= FullForm[%]
Out[5]//FullForm= Equal[Plus[1, x], 0]

In[6]:= PolynomialQ[%, x]
Out[6]= False

x+1 — полином от x, а выражение x+1=0 полиномом от x не является. В этом есть определенная сермяжная правда зерно истины. Так что если Вам попадется уравниние с полиномом, то из него можно выбрать отдельно левую часть (или правую, где там плоином окажется) с помощью функции Part[]

In[9]:= mypol = x^2 + 5 x - 1 == 0
Out[9]= -1 + 5 x + x^2 == 0

In[10]:= mypol[[1]]
Out[10]= -1 + 5 x + x^2

In[11]:= mypol[[2]]
Out[11]= 0

In[12]:= mypol[[0]]
Out[12]= Equal

нулевая часть любого списка — его головной символ, head, который как бы задает тип этого списка.

mypol=. (* не забывайте сбасывать временные переменные, когда не нужны *)
(no subject) - fregimus - Nov. 10th, 2010 04:32 pm (UTC) - Expand
(no subject) - termometr - Nov. 10th, 2010 05:05 pm (UTC) - Expand
(no subject) - fregimus - Nov. 10th, 2010 08:57 pm (UTC) - Expand
(no subject) - termometr - Nov. 10th, 2010 09:54 pm (UTC) - Expand
termometr
Nov. 10th, 2010 09:53 pm (UTC)
8. Как задать неравенства?
Допустим, что в системе уравнений (например, что я выше давал) ряд переменных ( C, S...) могут быть только положительными. Или даже так 0. <= C/Cm <=1. (действительные числа).

как дополнить систему уравнений такими условиями?
fregimus
Nov. 11th, 2010 12:08 am (UTC)
Re: 8. Как задать неравенства?
Зависит от того, что Вы с ними потом собираетесь делать. Дополнить систему уравнений можно с помощью And[]: x^2==4 && x>0, но далеко не все функции это принимают. Ваша система solS1 слишком сложна для Reduce[], думаю. Удивительно, что Solve[] ее решает. В решение входит полтора миллиона членов, к сожалению:

In[18]:= (tempS1 = Solve[solS1 == 0, S]) // LeafCount

Out[19]= 1377468

Но Solve не принимает неравенств, только равенства и их отрицания:

Solve[solS1 == 0 && S > 0, S];

Solve::eqf: S>0 is not a well-formed equation. >>

А Reduce[] захлебнется от такого. Впрочем, попытайтесь оставить на ночь считаться — чем черт не шутит. Конечно, за 30 секунд не досчиталось (я Alt+. нажал):

In[21]:= tempS2 = Reduce[solS1 == 0 && 0 <= C1/Cm <= 1 && S > 0, Reals];

Out[21]= $Aborted

Хотя кое-чего попроще она, конечно, решает:

In[23]:= Reduce[x^2 == 4 && x > 0]

Out[23]= x == 2

Посмотрите на эти документы в хелпе:
tutorial/ComplexPolynomialSystems
tutorial/ManipulatingEquationsAndInequalitiesOverview
termometr
Nov. 11th, 2010 08:33 am (UTC)
9.Как задать функцию-клюшку?
Есть такая потребность использовать ф-ю типа

Y= a+b*X при XXc
она же Y= min(a+b*X , Yc)

Как это грамотно сделать и какие функции WM критичны (начинают виснуть)к таким "клюшкам", а какие - жуют?
fregimus
Nov. 11th, 2010 10:08 am (UTC)
Re: 9.Как задать функцию-клюшку?
а, b, Yc константы?

Ну, в общем, так и задаете, с помощью Min[] или Piecewise[]. В принципе, все функции нормально относятся, если только не пытаться сделать то, чего нельзя (производную посчитать, например, в точке излома).

In[34]:= Y[x_] := Min[2 x - 5, 3];
Plot[Y[x], {x, 1, 5}]

Out[35]= (картинко)

In[36]:= Reduce[Y[x] == 0, x, Reals]

Out[36]= x == 5/2

In[38]:= Reduce[Y[x] == 3, x, Reals]

Out[38]= x >= 4

In[37]:= D[Y[x], x]

Out[37]= Piecewise[{{2, x < 4}, {0, x > 4}},
Indeterminate]
termometr
Nov. 11th, 2010 08:51 am (UTC)
10. -11. О метапеременных и мощности процессора для BM
Ваша система solS1 слишком сложна для Reduce[], думаю. Удивительно, что Solve[] ее решает.

зато solS (см. выше) на моем уже зависает - не дожидался результата. Как много зависит от мощности процессора? Реально ли за счет мощности компа что-то сделать или ВМ-алгоритмы все предопределяют?

Как отличить ВМ-сложную задачу от ВМ-простой на вид?

11. Где найти список и описание всех доступных для какой-либо ф-ии опций и метапеременных?

например,
?Reduce
выдает
...
Reduce[expr,vars,dom] does the reduction over the domain dom...

причем, метапеременные expr,vars,dom из справки по ф-ии недоступны.



fregimus
Nov. 11th, 2010 10:13 am (UTC)
Re: 10. -11. О метапеременных и мощности процессора для BM
10. Никак. Если система уравнений в три этажа — скорее всего, она довольно сложная…

Уже зависает: у меня компутер слабенький, P4 3GHz. Наверное, в математике 7 немного лучше алгоритмы.

In[46]:= (tempS1 = Solve[solS1 == 0, S]) // LeafCount // Timing

Out[46]= {4.563, 1377468}

4,5 секунды.

11. Кнопка F1, если ее нажать на функции, должна открыть Help. Он очень подробный и с примерами. Если она этого не делает, что-то не установлено, наверное, или сломалось.
11. О метапеременных - termometr - Nov. 11th, 2010 11:28 am (UTC) - Expand
Re: 11. О метапеременных - fregimus - Nov. 12th, 2010 04:42 am (UTC) - Expand
termometr
Nov. 11th, 2010 09:02 am (UTC)
2. О поиске и замене "скрытых комплексов"
Вопрос 2.
бывает, что встречаются комплексы, которые хотелось бы заменить для дальнейшей работы на некие параметры (или переменные в зависимости от их природы)

как, например, сделать подстановку параметра FinOP == Fin (-Nox + Npx) и далее преобразовать уравнение (в данном случае полином 2 степени) для поиска всех возможных скрытых и явных (или хотя бы явных) Fin (-Nox + Npx) с целью замены их на FinOP ?

Ответ 2:
З. Ы. Это только явные, конечно. Для «скрытых» можно попытаться решить систему из исходного уравнения и замены FinOP == Fin (-Nox + Npx), избавляясь от переменных в правой части второго. Если это удается, то замена получается.
=================
Что-то ничего у меня устойчиво не вышло. :(
Странно, что одиночные переменные легко достаются функцией Collect (может еще какими?), а про комплексы... ВM в той же Collect, даже не знает, что, например, Fin (-Nox + Npx)= - Fin (Nox - Npx).

Я так понял Ваше предложение о замене "скрытых комплексов", что надо найти их все в исходной системе вручную, заменить на переменные и тогда... Но это же не выход, если бы это было просто, то и ВМ была бы не нужна.
Может можно как-то иначе? Для качественного решения систем (символьных вычслений) это крайне полезное дело.
fregimus
Nov. 11th, 2010 10:14 am (UTC)
Re: 2. О поиске и замене "скрытых комплексов"
Я подумаю, погодите чуть-чуть.
termometr
Nov. 11th, 2010 06:13 pm (UTC)
12. средства регрессии в ВМ
Есть в ВМ средства ввода таблиц? Как их импортировать или набивать вручную?
Есть ли инструменты для (не)линейной регрессии?

Имееццо таблица данных и вид апроксимирующих зависимостей.
Как средствами ВМ подобрать наиболее приемлемые коэффициенты k1-k4?
Тут 4 переменных в 2-х уравнениях. И таблица для этих 4-х переменных.
Вроде хватает, чтобы степени свободы перекрыть?

D; ao*ro; as*rs; ap*rp
0,025; 0,038; 0,086; 0
0,05; 0,062; 0,172; 0
0,1; 0,119; 0,317; 0
0,15; 0,187; 0,49; 0
0,2; 0,254; 0,663; 0
0,25; 0,335; 0,807; 0
0,28; 0,355; 0,98; 0,024
0,3; 0,292; 1,297; 0,372
0,35; 0,244; 2,479; 1,44
0,4; 0,177; 3,199; 2,092
============================
as*rs=k1*D + ao*ro + ap*rp

k2*ro + k3*rp = D + k4
===========================
ao=1,5
as=1,6
ap=3,1

Я еще не надоел Вам? не сильно нагружаю?
fregimus
Nov. 12th, 2010 04:39 am (UTC)
Re: 12. средства регрессии в ВМ
Файлы можно читать функцией Import[]; см. тж. tutorial/ImportingAndExportingFiles (у Вас хелп отыскался?)

Такого вида системы лучше решать, кажется, с помощью LeastSquares[]. Еще есть несколько — см
guide/CurveFittingAndApproximateFunctions и Tutorials под ней

Хелп-то нашелся?

P7 S. Вижу, нашелся.




Edited at 2010-11-12 04:43 am (UTC)
termometr
Nov. 21st, 2010 11:01 am (UTC)
Изюминг
Здравствуйте,
помогите, пожалуйста, понять логику функции Assuming. Если первый раз умножая и деля на какие-то комплексы параметров с горем пополам удается ее заставить сделать нужные замены, то повторно - ничего не получается.
Вот программа. Я добился почти всего, чего хотел, но в конце не могу сделать замену mxx== mx/(1+Nox).

Спасибо!
========================
preferEqual0[e_]:=LeafCount[e]-100 Count[e,_==0,{0,Infinity}];

solSraw1=Eliminate[{
rrs*X== Sm/qsm(1-SS)*D1,
rro*X== Cm/qom*(1-CC)*Kla,
Nox*as*qsm*rrs== (1+Nox)*D1+mx,
Nox*ao*qom*rro== D1+mx,
rrs== 1/(Ksr/SS+1),
rro== 1/(Kor/CC+1) },
{X, CC,SS,P, rrs,rro, rp }] ;

solSDp=Simplify[solSraw1,ComplexityFunction->preferEqual0]

solSDp9= Assuming[ {
FO== ao Nox qom ,
FS== as Nox qsm /(1+Nox),
FK== ao Cm Kla * (1+Nox)/(as Sm) },
Collect[Expand[Simplify[solSDp[[1,1]] *(1+Nox)/(as Sm) \
]],D1,Simplify]]
Collect[
CoefficientList[solSDp9 /(1+Nox)^2, D1] , mx, Simplify]

Assuming[
mxx== mx/(1+Nox),
Collect[
CoefficientList[solSDp9 , D1]*(1+Nox) , mxx, Simplify]]/(1+Nox)^3



2. Меня зовут Леонид. А как зовут моего благодетеля, если не секрет?
fregimus
Nov. 21st, 2010 02:26 pm (UTC)
Re: Изюминг
Tут ‘\’ просто лишний в четвертой формуле, да?

Я не совсем понимаю, чего Вы пытаетесь получить в последнем выражении. То, что написано, работает так. Внутренняя функция CoefficientList[] дает такой результат:

In[30]:= CoefficientList[solSDp9, D1]

Out[30]= {FK FO mx (mx - FS (1 + Nox)),
(-1 - Nox) (FK FO (FS - 2 mx + FS Nox) + mx^2 (-(1 + Ksr) mx + FS (1 + Nox))), (1 + Nox) (FK FO (1 + Nox) + mx (-2 FS (1 + Nox) + (1 + Ksr) mx (3 + Nox))),
(1 + Nox) ((1 + Ksr) mx (3 + 2 Nox) - as Nox qsm),
(1 + Ksr) (1 + Nox)^2}

Дальше Вы домножаете каждый член на (1 + Nox) и просите Collect представить каждое из этих четырех выражений в виде полинома от mxx. Но в них не входит mxx, поэтому ничего не выйдет. Вы объясните, что тут надо сделать.

Edited at 2010-11-21 02:26 pm (UTC)
Re: Изюминг - termometr - Nov. 21st, 2010 03:04 pm (UTC) - Expand
Re: Изюминг - termometr - Nov. 21st, 2010 03:06 pm (UTC) - Expand
Re: Изюминг - fregimus - Nov. 21st, 2010 03:14 pm (UTC) - Expand
Re: Изюминг - termometr - Nov. 21st, 2010 03:44 pm (UTC) - Expand
Re: Изюминг - fregimus - Nov. 21st, 2010 03:49 pm (UTC) - Expand
Re: Изюминг - termometr - Nov. 21st, 2010 04:12 pm (UTC) - Expand
Re: Изюминг - termometr - Nov. 21st, 2010 04:19 pm (UTC) - Expand
Re: Изюминг - fregimus - Nov. 21st, 2010 04:20 pm (UTC) - Expand
Re: Изюминг - fregimus - Nov. 21st, 2010 03:31 pm (UTC) - Expand
Re: Изюминг - termometr - Nov. 21st, 2010 03:44 pm (UTC) - Expand
termometr
Dec. 30th, 2010 04:30 pm (UTC)
Диф. уравнения
Научите меня решать в ВМ дифуры. Пока хочу освоить простой пример - не получается. :(

DSolve[{
x'[t] == Y*mmax*s[t]/(Ks + s[t])*x[t],
s'[t] == -mmax*s[t]/(Ks + s[t])*s[t],
x[0] == x0,
s[0] == s0
}, {x, s}, t]


Plot[
DSolve[{
x'[t] == Y*mmax*s[t]/(Ks + s[t])*x[t],
s'[t] == -mmax*s[t]/(Ks + s[t])*s[t],
x[0] == 1.,
s[0] == 10.,
mmax -> 0.5,
Y -> 0.5,
Ks -> 0.01
}, {x, s}, t]
, {t, 0, 1}]

спасибо!
fregimus
Dec. 31st, 2010 03:58 am (UTC)
Re: Диф. уравнения
Смотрите, сначала решаем уравнение, а результат сохраняем в переменную, скажем, dsol (не уверен, что это осмысленное решение, но пусть пока так):
dsol = DSolve[{x'[t] == Y*mmax*s[t]/(Ks + s[t])*x[t], 
   s'[t] == -mmax*s[t]/(Ks + s[t])*s[t], x[0] == x0, 
   s[0] == s0}, {x[t], s[t]}, t]

Мне сказали 4 предупреждения при решении. Не знаю, насколько это плохо.

Дальше, посмотрите на структуру результата:
{ { s[t] -> ... , x[t] -> ... } }

Те выражения от t, что Вы хотите нарисовать, отмечены многоточиями. именно их надо передать (как список из 2 элементов) функции Plot. Возьмем внутренний список ([[1...]]), затем все его элеменtы [[...Аll...]], затем второй элемент каждого [[...2]]:
dsol[[1, All, 2]]

Получился тот самый список функций, которые годятся для рисования. Теперь его можно передавать Plot. Фокус в том, что его еще надо пропустить через функцию Evaluate[], потому что Plot[] задерживает вычисление аргументов. Если этого не сделать, он все равно нарисует, но одним цветом оба графика, а так первый (это s[t]) будет синим, а второй, x[t], фиолетовым. В целом, получится вот что:
Block[{Ks = 1, s0 = 10, x0 = 1, Y = 3, mmax = 1},
 Plot[Evaluate[dsol[[1, All, 2]]], {t, 0, 1}]
]

Значения я, конечно, взял с потолка — чтобы красивее нарисовалось.
Re: Диф. уравнения - termometr - Dec. 31st, 2010 10:49 am (UTC) - Expand
Re: Диф. уравнения - fregimus - Dec. 31st, 2010 11:02 am (UTC) - Expand
Re: Диф. уравнения - termometr - Dec. 31st, 2010 11:24 am (UTC) - Expand
Re: Диф. уравнения - fregimus - Dec. 31st, 2010 11:39 am (UTC) - Expand
Re: Диф. уравнения - termometr - Dec. 31st, 2010 12:58 pm (UTC) - Expand
Re: Диф. уравнения - fregimus - Dec. 31st, 2010 11:45 am (UTC) - Expand
Re: Диф. уравнения - termometr - Dec. 31st, 2010 12:53 pm (UTC) - Expand
Re: Диф. уравнения - termometr - Jan. 14th, 2011 12:36 pm (UTC) - Expand
Re: Диф. уравнения - fregimus - Jan. 14th, 2011 12:49 pm (UTC) - Expand
Re: Диф. уравнения - termometr - Jan. 14th, 2011 01:00 pm (UTC) - Expand
Re: Диф. уравнения - fregimus - Jan. 14th, 2011 01:12 pm (UTC) - Expand
Re: Диф. уравнения - termometr - Jan. 14th, 2011 01:21 pm (UTC) - Expand
Re: Диф. уравнения - fregimus - Jan. 14th, 2011 01:30 pm (UTC) - Expand
Re: Диф. уравнения - termometr - Jan. 14th, 2011 01:40 pm (UTC) - Expand
Re: Диф. уравнения - fregimus - Jan. 14th, 2011 12:53 pm (UTC) - Expand
Re: Диф. уравнения - termometr - Jan. 14th, 2011 01:13 pm (UTC) - Expand
Re: Диф. уравнения - fregimus - Jan. 14th, 2011 01:26 pm (UTC) - Expand
Re: Диф. уравнения - fregimus - Jan. 14th, 2011 01:05 pm (UTC) - Expand
ЗАРАБОТАЛО!!! Спасибо! - termometr - Jan. 14th, 2011 01:23 pm (UTC) - Expand
termometr
Jan. 14th, 2011 05:42 pm (UTC)
Вроде собрал все как вы учили, а не работает. :(
DD=0.1
dsol7=Block[{Ks=0.1, Sm=10, Ko=0.01, Cm=0.0001, Kla=1000,
x0=1, s0=0.1, c0=0.0001, p0=0, Pm=0,
as=0.8, ao=0.7, ap=0.6,
qsm=1, qom=0.1,
Nox=0.5, Npx=0.05, mx=0.005},

mm[t_]= rs[t]-ro[t]-rp[t];
rp[t_]= (mm[t]+mx-Nox*ro[t])/Npx;
rs[t_]= as*qsm/(Ks/S[t]+1);
ro[t_]= ao*qom/(Ko/CC[t]+1);

NDSolve[{
X'[t]== (mm[t]-DD)*X[t],
S'[t]== - rs[t]*X[t]/as + (Sm-S[t])*DD,
CC'[t]== - ro[t]*X[t]/ao + (Cm-CC[t])*Kla,
P'[t]== + rp[t]*X[t]/ap + (Pm-P[t])*DD,
X[0]==x0, S[0]==s0, CC[0]==c0, P[0]==p0 },
{X[t], S[t], CC[t], P[t], mm[t], rs[t], ro[t], rp[t]},{t,0,10}]]
fregimus
Jan. 14th, 2011 06:31 pm (UTC)
Re: Вроде собрал все как вы учили, а не работает. :(
mm[t_]= rs[t]-ro[t]-rp[t];
rp[t_]= (mm[t]+mx-Nox*ro[t])/Npx;

Взаиморекурсия получается, однако…
(no subject) - fregimus - Jan. 15th, 2011 12:11 pm (UTC) - Expand
(no subject) - termometr - Jan. 15th, 2011 01:28 pm (UTC) - Expand
(no subject) - fregimus - Jan. 17th, 2011 06:07 am (UTC) - Expand
(no subject) - termometr - Jan. 17th, 2011 10:27 am (UTC) - Expand
(no subject) - fregimus - Jan. 17th, 2011 01:00 pm (UTC) - Expand
(no subject) - termometr - Jan. 17th, 2011 02:18 pm (UTC) - Expand
(no subject) - fregimus - Jan. 19th, 2011 03:29 pm (UTC) - Expand
(no subject) - termometr - Jan. 19th, 2011 03:51 pm (UTC) - Expand
Три колонки - fregimus - Aug. 22nd, 2011 10:03 am (UTC) - Expand
termometr
Sep. 1st, 2011 12:44 pm (UTC)
Assumptions / Reduce
Здравствуйте!

Вот такой вот текст для поиска решений в символьном виде.
Вопросы: почему не действует Assumptions и Reduce не видит ограничений на положительность параметров? Как это устранить?


X:= 0
(*
X:= mx
X:= 1/ Infinity
X:=0 *)
D1 := Dwo

$Assumptions=Smq>0&&CmK>0&&RSM>0&&ROM>0&&Nox>0&&Npx>0&&mx>0&&Ksr>0&&Kor>0 (*&&kkc>0*)

Reduce[{
(Smq*D1) (1-SS) == 0, (* SS== S/Sm *)
CmK (1-CC) == 0, (* CC== C/Cm *)
PP*D1 == 0, (* PP== -1*ap*(Pm-P) *)
RSMk*rrs== D1 + ROMk*rro + rp,
Nox*ROMk*rro + Npx*rp== D1 + mx, (* FO*rro + FS*rrs == FD, *)
rrs== (1+Ksr)/(Ksr/SS+1), (* rrs== 1/(Ksr/SS+1), RSMk == RSM/(1+Ksr), *)
rro== (1+Kor)/(Kor/CC+1) (* rro== 1/(Kor/CC+1), ROMk == ROM/(1+Kor), *)
}, { SS, CC, PP, rrs, rro, rp, Dwo}] (* X=0 *)

%[[1,All]]
fregimus
Sep. 1st, 2011 09:54 pm (UTC)
Re: Assumptions / Reduce
Во-первых, лучшим стилем программирования будет не присваивать $Assumptions, а пользоваться функцией Assuming. Вместо

$Assumptions = expr
Refine[...]

лучше писать

Assuming[ Refine[...], expr]

или даже

Refine[..., Assumptions->expr]

$Assumptions глобальная переменная, и, если значение нечаянно сохранится, то результаты вычислений в разных местах будут непредсказуемо другими.

Во-вторых, $Assumptions не влияет на Reduce. У нескольких функций (напр., Refine[]) есть опция Assumptions, и значение этой опции по умолчанию таково:

Assumptions :> $Assumptions

То есть значение переменной $Assumptions вычисляется и используется как значение опции при вычислении самой функции. Таким образом, $Assumptions влияет только на функции, у которых есть эта опция, а у Reduce[] ее нет. Нет его потому, что по форме и семантике выражение в Assumptions не отличается от первого аргумента Reduce[], и их легко объединить

Перепишите Ваше выражение

$Assumptions = assum
Reduce[{ex1,...,exN}, vars]

в виде

Reduce[{ex1,...,exN,assum}, vars]

и все будет пучком. Если пользуетесь блоком Assuming[], можно прямо писать

Assuming[ Reduce[{ex1,...,exN,$Assumptions}, vars], assum]

Edited at 2011-09-01 09:55 pm (UTC)
Re: Assumptions / Reduce - termometr - Sep. 2nd, 2011 07:29 am (UTC) - Expand
Re: Assumptions / Reduce - termometr - Sep. 2nd, 2011 07:53 am (UTC) - Expand
Re: Assumptions / Reduce - fregimus - Sep. 2nd, 2011 08:28 am (UTC) - Expand
Re: Assumptions / Reduce - termometr - Sep. 2nd, 2011 08:33 am (UTC) - Expand
Re: Assumptions / Reduce - termometr - Feb. 14th, 2012 05:33 pm (UTC) - Expand
Re: Assumptions / Reduce - fregimus - Feb. 14th, 2012 09:04 pm (UTC) - Expand
Re: Assumptions / Reduce - termometr - Sep. 2nd, 2011 08:31 am (UTC) - Expand
Re: Assumptions / Reduce - fregimus - Sep. 2nd, 2011 08:53 am (UTC) - Expand
Re: Assumptions / Reduce - termometr - Sep. 2nd, 2011 09:03 am (UTC) - Expand
Re: Assumptions / Reduce - fregimus - Sep. 2nd, 2011 09:11 am (UTC) - Expand
ClearAll[ "Global`*" ] - termometr - Sep. 2nd, 2011 11:48 am (UTC) - Expand
Re: ClearAll[ "Global`*" ] - fregimus - Sep. 2nd, 2011 03:00 pm (UTC) - Expand
Re: ClearAll[ "Global`*" ] - termometr - Sep. 2nd, 2011 04:52 pm (UTC) - Expand
termometr
Sep. 2nd, 2011 04:51 pm (UTC)
Do
Вопросы:
1. Я Вас еще не замучил? :)

2. Полностью ли процесс выполнения программы после стартовой строки ClearAll["Global`*"]
тождественен тому же процессу после команды из меню QUIT KERNEL?

3. Как компактизировать замену переменных? Почему в тексте ниже оно ругается на использование Do ?

=========================
ClearAll["Global`*"] (*стартовая зачистка всех переменных*)

SYSTEMST = {(Smq*D1) (1 - SS) == rrs*X,(*SS==S/Sm*)
CmK (1 - CC) == rro*X,(*CC==C/
Cm*)-1*ap*(Pm - P)*D1 == rp*X,(*PP==-1*ap*(Pm-P)*)
RSMk*rrs == D1 + ROMk*rro + rp,
Nox*ROMk*rro + Npx*rp == Dm + mx,(*FO*rro+FS*rrs==FD,*)
rrs == (1 + Ksr)*SS/(Ksr + SS),(*rrs==1/(Ksr/SS+1),RSMk==RSM/(1+
Ksr),*)rro == frro};

VARST00 = {X, SS, CC, P, D1, Dm, rrs, rro, rp}
VARSTWO = {0, SSwo, CCwo, Pwo, Dwo, Dmwo, rrswo, rrowo, rpwo}

SYSTEMST1 =
SYSTEMST /. {VARST00[[1]] -> VARSTWO[[1]],
VARST00[[2]] -> VARSTWO[[2]], VARST00[[3]] -> VARSTWO[[3]],
VARST00[[4]] -> VARSTWO[[4]], VARST00[[5]] -> VARSTWO[[5]],
VARST00[[6]] -> VARSTWO[[6]], VARST00[[7]] -> VARSTWO[[7]],
VARST00[[8]] -> VARSTWO[[8]], VARST00[[9]] -> VARSTWO[[9]]}
Row[{"получаем такую систему SYSTEMST1= ", SYSTEMST1}]

SYSTEMST2 = SYSTEMST /. {Do[VARST00[[n]] -> VARSTWO[[n]], {n, 9}]}
Row[{"получаем такую систему SYSTEMST1= ", SYSTEMST2}]
fregimus
Sep. 2nd, 2011 08:04 pm (UTC)
Re: Do
1. Нет, не волнуйтесь. Мне не трудно ни капли.

2. Нет. Во-первых, на другие контексты это не влияет — только на Global`. Значит, если Вы нечаянно поменяете глобальные значения (напр., $Assumptions), это изменение сохранится. Далее, символы остаются определенными, хотя и очищаются. В-третьих, атрибуты Locked и Protected не дадут ClearAll очистить символ (об этом печатается warning, если вы не отключаете его ф-цией Off[]).

Эти вещи, скорее всего, не важны в Вашем случае — кроме, разумеется, первого. С глобальными переменными надо быть осторожнее.

3. SYSTEMST1 = SYSTEMST /. Thread[VARST00 -> VARSTWO]

Вычислите отдельно Thread[VARST00 -> VARSTWO], и сразу все поймете.

Do[] поедает результат вычисления (а Table[] сохраняет структуру итератора; в этом смысле, различия между ними подобны оным в паре Scan[] и Map[]). Честно говоря, за 10 лет достаточно плотного знакомства с «Матемаикой» Do[] не пользовался ни разу. Но YMMV, конечно — ничего дурного в ней нет.
модификация списков - termometr - Sep. 3rd, 2011 06:54 am (UTC) - Expand
Re: модификация списков - fregimus - Sep. 3rd, 2011 07:02 am (UTC) - Expand
Re: модификация списков - termometr - Sep. 3rd, 2011 09:20 am (UTC) - Expand
Re: модификация списков - fregimus - Sep. 3rd, 2011 11:48 am (UTC) - Expand
Re: модификация списков - termometr - Sep. 3rd, 2011 12:01 pm (UTC) - Expand
Re: модификация списков - fregimus - Sep. 3rd, 2011 12:03 pm (UTC) - Expand
глобальный вопрос - termometr - Sep. 7th, 2011 04:12 pm (UTC) - Expand
Re: глобальный вопрос - fregimus - Sep. 7th, 2011 07:05 pm (UTC) - Expand
Re: глобальный вопрос - termometr - Sep. 7th, 2011 07:47 pm (UTC) - Expand
Re: Do - termometr - Sep. 8th, 2011 02:22 pm (UTC) - Expand
Page 1 of 2
<<[1] [2] >>
( 180 comments — Leave a comment )