Не помню, откуда взялся этот стиш и есть ли у него автор. В Сети находится только в несколько перевранном виде.
А вот ввод,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
А это — колода,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
А вот лаборантка, младая и пышная,
Которая карту засунула лишнюю
В большую и важную очень колоду,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
А это — АВОСТ,
К которому путь неизбежен и прост,
Когда лаборантка, младая и пышная,
Карту засунет заведомо лишнюю
В большую и важную очень колоду,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
* * *
Вот БЭСМ, которой владеет ВЦ.А вот ввод,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
А это — колода,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
А вот лаборантка, младая и пышная,
Которая карту засунула лишнюю
В большую и важную очень колоду,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
А это — АВОСТ,
К которому путь неизбежен и прост,
Когда лаборантка, младая и пышная,
Карту засунет заведомо лишнюю
В большую и важную очень колоду,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
(no subject)
2009-05-07 10:49 (UTC)(no subject)
2009-05-07 11:32 (UTC)... Удар ниже чёрного пояса ...
(no subject)
2010-11-08 10:22 (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
на выходе получили правую часть не равную нулю, поэтому полином не максимально прост по форме. Как заставить программу перекидывать все с права налево автоматически?
(no subject)
2010-11-08 15:37 (UTC)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)
2010-11-08 15:50 (UTC)(no subject)
2010-11-08 16:29 (UTC)Вопрос 2.
бывает, что встречаются комплексы, которые хотелось бы заменить для дальнейшей работы на некие параметры (или переменные в зависимости от их природы)
как, например, сделать подстановку параметра FinOP == Fin (-Nox + Npx) и далее преобразовать уравнение (в данном случае полином 2 степени) для поиска всех возможных скрытых и явных (или хотя бы явных) Fin (-Nox + Npx) с целью замены их на FinOP ?
(no subject)
2010-11-08 19:26 (UTC)In[6]:= sol1 /. Fin (-Nox + Npx) -> Finop
Out[6]= D1 Finop + (ds Finop + D1^2 (1 + Npx) +
D1 (mx - as ds Npx Sm)) X + ds (D1 + mx + D1 Npx) X^2 == 0
З. Ы. Это только явные, конечно. Для «скрытых» можно попытаться решить систему из исходного уравнения и замены FinOP == Fin (-Nox + Npx), избавляясь от переменных в правой части второго. Если это удается, то замена получается.
(no subject)
2010-11-08 20:50 (UTC)а) sol1 - почему-то у меня не работает. см. ниже. зато работает подстановка при прямом указании Out[#]
Однако после подстановки Finop почему-то перестает работать ф-я Collect :(
б)
А нельзя для тотальной замены и явных, и"скрытых" Fin (-Nox + Npx) использовать Collect & см. ниже - вроде получается...
Многабукф - скопировал удачные и неудачные попытки -
In[1]:= 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}], Fin (-Nox + Npx), Simplify]
Out[1]= Fin (-Nox + Npx) (D1 + ds X) +
X (D1^2 (1 + Npx) + ds mx X +
D1 (mx + ds (-as Npx Sm + X + Npx X))) == 0
In[2]:= sol1 /. Fin (-Nox + Npx) -> Finop
Out[2]= sol1
In[3]:= collect[Out[2], X, Simplify]
Out[3]= collect[sol1, X, Simplify]
In[4]:= 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[4]= 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
In[5]:= sol1 /. Fin (-Nox + Npx) -> Finop
Out[5]= sol1
In[6]:= Out[4] /. Fin (-Nox + Npx) -> Finop
Out[6]= D1 Finop + (ds Finop + D1^2 (1 + Npx) +
D1 (mx - as ds Npx Sm)) X + ds (D1 + mx + D1 Npx) X^2 == 0
In[7]:= 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}], Fin (-Nox + Npx), Simplify]
Out[7]= Fin (-Nox + Npx) (D1 + ds X) +
X (D1^2 (1 + Npx) + ds mx X +
D1 (mx + ds (-as Npx Sm + X + Npx X))) == 0
In[8]:= Out[7] /. Fin (-Nox + Npx) -> Finop
Out[8]= Finop (D1 + ds X) +
X (D1^2 (1 + Npx) + ds mx X +
D1 (mx + ds (-as Npx Sm + X + Npx X))) == 0
In[9]:= collect[Out[8], X, Simplify]
Out[9]= collect[
Finop (D1 + ds X) +
X (D1^2 (1 + Npx) + ds mx X +
D1 (mx + ds (-as Npx Sm + X + Npx X))) == 0, X, Simplify]
(no subject)
2010-11-08 21:52 (UTC)sol1 = 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]
После этого sol1 имеет значение (просто вычислите sol1). Out[n] то же самое, но удобнее нужные промежуточные результаты присваивать переменным. Только следите, чтобы имена этих переменных не совпали с каким-нибудь из символов в выражении.
(no subject)
2010-11-09 09:56 (UTC)Можно будет обратиться к Вам позже при наличии вопросов?
(no subject)
2010-11-09 10:09 (UTC)(no subject)
2010-11-09 16:35 (UTC)сравните
solC1 = Simplify@Collect[Simplify@Eliminate[{
rs*X == as*(Sm - S)*D1,
ro*X == ao*(Cm - C1)*Kla,
rp*X == P*D1,
rs == D1 + ro + rp,
Nox*ro + Npx*rp == D1 + mx,
rs == as*qsm/(Ks/S + 1),
ro == ao*qom/(Ko/C1 + 1)},
{X, S, P, rs, ro, rp}], C1, Simplify]
работает
а вот тут - не работает на той же системе -
solS = Simplify@Collect[Simplify@Eliminate[{
rs*X == as*(Sm - S)*D1,
ro*X == ao*(Cm - C1)*Kla,
rp*X == P*D1,
rs == D1 + ro + rp,
Nox*ro + Npx*rp == D1 + mx,
rs == as*qsm/(Ks/S + 1),
ro == ao*qom/(Ko/C1 + 1)},
{X, C1, P, rs, ro, rp}], S, Simplify]
вопрос 5:
Что означает черный цвет переменных? Если в системе переменные использовать C и D, вместо C1 и D1 - они будут черные. Зарезервированные операторы?
(no subject)
2010-11-09 18:13 (UTC)Чтобы заставить функцию Simplify всегда предпочитать форму сравнения с нулем, можно написать такую функцию для оценки результата:
preferEqual0[e_] := LeafCount[e] - 100 Count[e, _ == 0, {0, Infinity}]
Смысл в том, чтобы, упрощая, сильно (с весом 100) предпочесть выражения в форме _ == 0. Теперь, если мы возьмем значение, возвращенное Eliminate (оно длинное — точка с запятой запрещает печать)
solSraw = Eliminate[{rs*X == as*(Sm - S)*D1, ro*X == ao*(Cm - C1)*Kla,
rp*X == P*D1, rs == D1 + ro + rp, Nox*ro + Npx*rp == D1 + mx,
rs == as*qsm/(Ks/S + 1), ro == ao*qom/(Ko/C1 + 1)}, {X, C1, P, rs,
ro, rp}];
и просто скормим Simplify
Simplify[solSraw]
то получится то, что Вы видели во втором примере. Если, однако, дать Simplify оценочную функцию, которую мы определили выше, то получится форма с нулем справа
solS = Simplify[solSraw, ComplexityFunction -> preferEqual0]
Далее, поскольку форма содержит S в знаменателе, то Collect ничего хорошего не сделает. Вероятно, имеет смысл домножить на (Ks + S), тогда Collect вернет полиномиальное уравнение от S.
Collect[Expand[Simplify[solS[[1, 1]] (Ks + S)]], S, Simplify] == 0
Мне пришлось взять часть [[1, 1]] от выражения (см. Part[]), потому там вторым идет неравенство, которое Expand и Collect сбивает с толку, так что Ks + S != 0
я по дороге потерялподразумевается.5. Цвет означает, что символы определены. В частности, C и D — встроенные функции. Вычислите
?D
Попробуйте также ?solS.
(no subject)
2010-11-09 20:15 (UTC)буду пробовать.
мне бы тупо увидеть тексты на ввод в правильной последовательности и полные. Выводы, надеюсь, математика 6. сама даст поглядеть. :)
Спасибо.
(no subject)
2010-11-09 20:21 (UTC)я тут прочитал, что Вам написал и ужаснулся. Боюсьнеправильно быть понятым. Ваши комментарии очень ценны! Я говорил о том, что у меня пока трудности с выбором сухого остатка для ввода в программу.
Вопрос 6. А как вставлять в код ВМ комментарии, чтобы она не ругалась и не было эха?
(no subject)
2010-11-10 01:27 (UTC)6. Если вы скармливате текстовые файлы с расширением .m прямо MathKernel, то комментарии (* вот такие *). Если вы используете frontend, то лучше всего писать текст в текстовых ячейках, ведь frontend — это целый текстовый процессор. Поставьте курсор в ячейку или между, и выберите из меню Format/Style/Text. Там же увидите shortcut для этого стиля (и других полезных), чтобы в это меню больше зазря не ходить. Можно, конечно, и (* *) писать в ячейках стиля Input, но они форматируются убого.
Вопрос 6. Как вставлять комментарии?
2010-11-10 13:22 (UTC)Если вы скармливате текстовые файлы с расширением .m прямо MathKernel, то комментарии (* вот такие *). Если вы используете frontend, то лучше всего писать текст в текстовых ячейках, ведь frontend — это целый текстовый процессор. Поставьте курсор в ячейку или между, и выберите из меню Format/Style/Text. Там же увидите shortcut для этого стиля (и других полезных), чтобы в это меню больше зазря не ходить. Можно, конечно, и (* *) писать в ячейках стиля Input, но они форматируются убого.
*******
Как подключить этот frontend ?
Замучился переносить из математики в Ворд и обратно, ибо Ворд не считает, а математика распечатывает мелким шрифтом.
7. Как инициировать переменные?
2010-11-10 13:27 (UTC)Я поступаю тупо - сохраняю файлы, выхожу из программы, запускаю программу и по новой открываю файлы.
Как упростить инициализацию переменных?
каков ее механизм?
как работают и в чем разница операторов "=" и "==" ?
?PolynomialQ
2010-11-10 13:28 (UTC)===========================
(*Пример 1 *)
preferEqual0[e_]:=LeafCount[e]-100 Count[e,_==0,{0,Infinity}]
solSraw=Eliminate[{
rs*X==as*(Sm-S)*D1,
ro*X==ao*(Cm-C1)*Kla,
rp*X==P*D1,
rs==D1+ro+rp,
Nox*ro+Npx*rp==D1+mx,
rs==as*qsm/(Ks/S+1),
ro==ao*qom/(Ko/C1+1)},
{X,C1,P,rs,ro,rp}]
solS=Simplify[solSraw,ComplexityFunction->preferEqual0]
solS1=Collect[Expand[Simplify[solS[[1,1]] (Ks+S)/as]],S,Simplify]==0
?PolynomialQ
PolynomialQ[solS1, S]
a=CoefficientList[solS1, S]
b1=Simplify[a[[1]]]
b2=Simplify[a[[2]]]
b3=Simplify[a[[3]]]
b4=Simplify[a[[4]]]
========================
Он вроде бы и делает что надо, но явный полином 3 степени по S не воспринимается как полином, а значит не дает возможности упрощать и анализировать его коэффициенты.
Что делать?
Вы не против, если отдельные вопросы я буду размешать в отдельных ветках?
см.
http://fregimus.livejournal.com/53536.html?thread=3188256#t3188256
и
http://fregimus.livejournal.com/53536.html?thread=3188512#t3188512
Re: ?PolynomialQ
2010-11-10 13:40 (UTC)solS1=Collect[Expand[Simplify[solS[[1,1]] (Ks+S)/as]],S,Simplify]==0
на
solS1=Collect[Expand[Simplify[solS[[1,1]] (Ks+S)/as]],S,Simplify]
вроде заработало. В чем фишка?
Еще актуальней стал вопрос 7
http://fregimus.livejournal.com/53536.html?thread=3188512#t3188512
(no subject)
2010-11-10 16:08 (UTC)Вы в 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 и попробуйте напечатать. Может, все и увеличится. Кажется, должно бы.
(no subject)
2010-11-10 16:28 (UTC)Думаю, что проблема получается из-за того, что какие-то из переменных получают значения, а Вы хотите, чтобы они оставались символами. Переменную можно лишить значения оператором =.
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)
2010-11-10 16:32 (UTC)b1=Simplify[a[[1]]]
b2=Simplify[a[[2]]]
b3=Simplify[a[[3]]]
b4=Simplify[a[[4]]]
можно писать
{b1, b2, b3, b4} = Simplify /@ a
/@ — функция Map[], применить левый аргумент, функцию одного переменного, к каждому элементу списка — правого аргумента.
(no subject)
2010-11-10 17:05 (UTC)отпишусь позже.
(no subject)
2010-11-10 20:57 (UTC)