fregimus: (engine)
[personal profile] fregimus
Не помню, откуда взялся этот стиш и есть ли у него автор. В Сети находится только в несколько перевранном виде.

* * * 

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

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

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

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

А это — АВОСТ,
К которому путь неизбежен и прост,
Когда лаборантка, младая и пышная,
Карту засунет заведомо лишнюю
В большую и важную очень колоду,
Которую ставят на вход того ввода,
Который умеет читать перфорацию
И, стало быть, может вводить информацию
В БЭСМ, которой владеет ВЦ.
Tags:
Page 1 of 8 << [1] [2] [3] [4] [5] [6] [7] [8] >>

(no subject)

2009-05-07 10:49 (UTC)
Posted by [identity profile] darth-vasya.livejournal.com
Прекрасно! В мемориз и к себе :)

(no subject)

2009-05-07 11:32 (UTC)
Posted by [identity profile] slobin.livejournal.com
Гм... А ведь я ни разу не работал с перфокартами на БЭСМ. На ЕС -- работал, а на БЭСМ -- только с терминала. (В обоих случаях "работал" значит "учился": программы, которые не стыдно назвать работой, начались всё-таки с ДВК и им подобных).

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

(no subject)

2010-11-08 10:22 (UTC)
Posted by [identity profile] termometr.livejournal.com
Здравствуйте.

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

вы не против?

тогда
вопрос №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)
Posted by [identity profile] fregimus.livejournal.com
То есть, надо получить квадратное уравнение от 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)

2010-11-08 15:50 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Да, и спрашивайте, пожалуйста — если я смогу ответить, я с удовольствием отвечу.

(no subject)

2010-11-08 16:29 (UTC)
Posted by [identity profile] termometr.livejournal.com
Спасибо большое, заработало! замучился копировать и руками приравнивать к нулю.

Вопрос 2.
бывает, что встречаются комплексы, которые хотелось бы заменить для дальнейшей работы на некие параметры (или переменные в зависимости от их природы)

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

(no subject)

2010-11-08 19:26 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Функция ReplaceAll (она же /.) sol1 имеет значение решения из предыдущего вычисления:

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), избавляясь от переменных в правой части второго. Если это удается, то замена получается.
Edited 2010-11-08 19:30 (UTC)

(no subject)

2010-11-08 20:50 (UTC)
Posted by [identity profile] termometr.livejournal.com
Спасибо!
а) 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)
Posted by [identity profile] fregimus.livejournal.com
Я неясно выразился, прошу прощения. Я присвоил sol1 результат предыдущего вычисления, вот так:

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)
Posted by [identity profile] termometr.livejournal.com
Спасибо Вам большое.

Можно будет обратиться к Вам позже при наличии вопросов?

(no subject)

2010-11-09 10:09 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Обязательно!

(no subject)

2010-11-09 16:35 (UTC)
Posted by [identity profile] termometr.livejournal.com
на другой системе конструкция Simplify@Eliminate на одних переменным обращает правую часть в ноль, а на других - нет. почему она работает не всегда?

сравните
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)
Posted by [identity profile] fregimus.livejournal.com
4. Интересно. Видимо, выражение не упрощается после переноса всего в одну часть. Например, если a+b==2a+c от этого упростится, то a+b==c+d — нет, а возможно, и усложнится в некоем смысле: в дереве этого выражения 4 листовых элемента, а в a+b-c-d==0 — пять.

Чтобы заставить функцию 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)
Posted by [identity profile] termometr.livejournal.com
мало чего понял.
буду пробовать.

мне бы тупо увидеть тексты на ввод в правильной последовательности и полные. Выводы, надеюсь, математика 6. сама даст поглядеть. :)

Спасибо.

(no subject)

2010-11-09 20:21 (UTC)
Posted by [identity profile] termometr.livejournal.com
упс.
я тут прочитал, что Вам написал и ужаснулся. Боюсьнеправильно быть понятым. Ваши комментарии очень ценны! Я говорил о том, что у меня пока трудности с выбором сухого остатка для ввода в программу.

Вопрос 6. А как вставлять в код ВМ комментарии, чтобы она не ругалась и не было эха?

(no subject)

2010-11-10 01:27 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Да в этой самой последовательности и вводите.

6. Если вы скармливате текстовые файлы с расширением .m прямо MathKernel, то комментарии (* вот такие *). Если вы используете frontend, то лучше всего писать текст в текстовых ячейках, ведь frontend — это целый текстовый процессор. Поставьте курсор в ячейку или между, и выберите из меню Format/Style/Text. Там же увидите shortcut для этого стиля (и других полезных), чтобы в это меню больше зазря не ходить. Можно, конечно, и (* *) писать в ячейках стиля Input, но они форматируются убого.
Posted by [identity profile] termometr.livejournal.com
ответ 6.
Если вы скармливате текстовые файлы с расширением .m прямо MathKernel, то комментарии (* вот такие *). Если вы используете frontend, то лучше всего писать текст в текстовых ячейках, ведь frontend — это целый текстовый процессор. Поставьте курсор в ячейку или между, и выберите из меню Format/Style/Text. Там же увидите shortcut для этого стиля (и других полезных), чтобы в это меню больше зазря не ходить. Можно, конечно, и (* *) писать в ячейках стиля Input, но они форматируются убого.

*******
Как подключить этот frontend ?
Замучился переносить из математики в Ворд и обратно, ибо Ворд не считает, а математика распечатывает мелким шрифтом.
Posted by [identity profile] termometr.livejournal.com
Есть у меня подозрение, что при длительных расчетах математика начинает выдавать разные ответы на одни и те же задачи, запущенные в разное время.

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

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

как работают и в чем разница операторов "=" и "==" ?

?PolynomialQ

2010-11-10 13:28 (UTC)
Posted by [identity profile] termometr.livejournal.com
Загнал вот такой текст:
===========================
(*Пример 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)
Posted by [identity profile] termometr.livejournal.com
В коде выше заменил
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)
Posted by [identity profile] fregimus.livejournal.com
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 и попробуйте напечатать. Может, все и увеличится. Кажется, должно бы.

(no subject)

2010-11-10 16:28 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Выходить из программы не надо, достаточно вырубить 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)

2010-11-10 16:32 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Вместо

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)
Posted by [identity profile] termometr.livejournal.com
спасибо за ответы. изучаю.
отпишусь позже.

(no subject)

2010-11-10 20:57 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Я Вас не запутываю, не лезу в детали слишком глубоко?
Page 1 of 8 << [1] [2] [3] [4] [5] [6] [7] [8] >>

Profile

fregimus: (Default)
fregimus

March 2014

S M T W T F S
       1
2 3456 78
910 1112 131415
16171819202122
23242526272829
3031     

Most Popular Tags

Page generated 2025-12-24 11:52

Expand Cut Tags

No cut tags