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

* * * 

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

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

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

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

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

(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)

Posted by [identity profile] termometr.livejournal.com - 2010-11-08 16:29 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2010-11-08 19:26 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2010-11-08 20:50 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2010-11-08 21:52 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2010-11-09 09:56 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2010-11-09 10:09 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2010-11-09 16:35 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2010-11-09 18:13 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2010-11-09 20:15 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2010-11-09 20:21 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2010-11-10 01:27 (UTC) - Expand

?PolynomialQ

Posted by [identity profile] termometr.livejournal.com - 2010-11-10 13:28 (UTC) - Expand

Re: ?PolynomialQ

Posted by [identity profile] termometr.livejournal.com - 2010-11-10 13:40 (UTC) - Expand

(no subject)

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

*******
Как подключить этот frontend ?
Замучился переносить из математики в Ворд и обратно, ибо Ворд не считает, а математика распечатывает мелким шрифтом.

(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 и попробуйте напечатать. Может, все и увеличится. Кажется, должно бы.

Posted by [identity profile] termometr.livejournal.com
Есть у меня подозрение, что при длительных расчетах математика начинает выдавать разные ответы на одни и те же задачи, запущенные в разное время.

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

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

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

(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)

Posted by [identity profile] fregimus.livejournal.com - 2010-11-10 16:32 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2010-11-10 17:05 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2010-11-10 20:57 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2010-11-10 21:54 (UTC) - Expand
Posted by [identity profile] termometr.livejournal.com
Допустим, что в системе уравнений (например, что я выше давал) ряд переменных ( C, S...) могут быть только положительными. Или даже так 0. <= C/Cm <=1. (действительные числа).

как дополнить систему уравнений такими условиями?
Posted by [identity profile] fregimus.livejournal.com
Зависит от того, что Вы с ними потом собираетесь делать. Дополнить систему уравнений можно с помощью 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
Posted by [identity profile] termometr.livejournal.com
Есть такая потребность использовать ф-ю типа

Y= a+b*X при X
[Error: Irreparable invalid markup ('<xc [...] при>') in entry. Owner must fix manually. Raw contents below.]

Есть такая потребность использовать ф-ю типа

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

Как это грамотно сделать и какие функции WM критичны (начинают виснуть)к таким "клюшкам", а какие - жуют?
Posted by [identity profile] fregimus.livejournal.com
а, 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]
Posted by [identity profile] termometr.livejournal.com
Ваша система solS1 слишком сложна для Reduce[], думаю. Удивительно, что Solve[] ее решает.

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

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

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

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

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



Posted by [identity profile] fregimus.livejournal.com
10. Никак. Если система уравнений в три этажа — скорее всего, она довольно сложная…

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

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

Out[46]= {4.563, 1377468}

4,5 секунды.

11. Кнопка F1, если ее нажать на функции, должна открыть Help. Он очень подробный и с примерами. Если она этого не делает, что-то не установлено, наверное, или сломалось.
Posted by [identity profile] termometr.livejournal.com
Вопрос 2.
бывает, что встречаются комплексы, которые хотелось бы заменить для дальнейшей работы на некие параметры (или переменные в зависимости от их природы)

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

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

Я так понял Ваше предложение о замене "скрытых комплексов", что надо найти их все в исходной системе вручную, заменить на переменные и тогда... Но это же не выход, если бы это было просто, то и ВМ была бы не нужна.
Может можно как-то иначе? Для качественного решения систем (символьных вычслений) это крайне полезное дело.
Posted by [identity profile] fregimus.livejournal.com
Я подумаю, погодите чуть-чуть.
Posted by [identity profile] termometr.livejournal.com
Есть в ВМ средства ввода таблиц? Как их импортировать или набивать вручную?
Есть ли инструменты для (не)линейной регрессии?

Имееццо таблица данных и вид апроксимирующих зависимостей.
Как средствами ВМ подобрать наиболее приемлемые коэффициенты 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

Я еще не надоел Вам? не сильно нагружаю?
Posted by [identity profile] fregimus.livejournal.com
Файлы можно читать функцией Import[]; см. тж. tutorial/ImportingAndExportingFiles (у Вас хелп отыскался?)

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

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

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


Edited 2010-11-12 04:43 (UTC)

Изюминг

2010-11-21 11:01 (UTC)
Posted by [identity profile] termometr.livejournal.com
Здравствуйте,
помогите, пожалуйста, понять логику функции 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. Меня зовут Леонид. А как зовут моего благодетеля, если не секрет?

Re: Изюминг

2010-11-21 14:26 (UTC)
Posted by [identity profile] fregimus.livejournal.com
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 2010-11-21 14:26 (UTC)

Re: Изюминг

Posted by [identity profile] termometr.livejournal.com - 2010-11-21 15:04 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] termometr.livejournal.com - 2010-11-21 15:06 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] fregimus.livejournal.com - 2010-11-21 15:14 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] termometr.livejournal.com - 2010-11-21 15:44 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] fregimus.livejournal.com - 2010-11-21 15:49 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] termometr.livejournal.com - 2010-11-21 16:12 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] termometr.livejournal.com - 2010-11-21 16:19 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] fregimus.livejournal.com - 2010-11-21 16:20 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] fregimus.livejournal.com - 2010-11-21 15:31 (UTC) - Expand

Re: Изюминг

Posted by [identity profile] termometr.livejournal.com - 2010-11-21 15:44 (UTC) - Expand

Диф. уравнения

2010-12-30 16:30 (UTC)
Posted by [identity profile] termometr.livejournal.com
Научите меня решать в ВМ дифуры. Пока хочу освоить простой пример - не получается. :(

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}]

спасибо!

Re: Диф. уравнения

2010-12-31 03:58 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Смотрите, сначала решаем уравнение, а результат сохраняем в переменную, скажем, 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}]
]

Значения я, конечно, взял с потолка — чтобы красивее нарисовалось.
Posted by [identity profile] termometr.livejournal.com
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}]]
Posted by [identity profile] fregimus.livejournal.com
mm[t_]= rs[t]-ro[t]-rp[t];
rp[t_]= (mm[t]+mx-Nox*ro[t])/Npx;

Взаиморекурсия получается, однако…

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2011-01-15 12:11 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2011-01-15 13:28 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2011-01-17 06:07 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2011-01-17 10:27 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2011-01-17 13:00 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2011-01-17 14:18 (UTC) - Expand

(no subject)

Posted by [identity profile] fregimus.livejournal.com - 2011-01-19 15:29 (UTC) - Expand

(no subject)

Posted by [identity profile] termometr.livejournal.com - 2011-01-19 15:51 (UTC) - Expand

Assumptions / Reduce

2011-09-01 12:44 (UTC)
Posted by [identity profile] termometr.livejournal.com
Здравствуйте!

Вот такой вот текст для поиска решений в символьном виде.
Вопросы: почему не действует 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]]

Re: Assumptions / Reduce

2011-09-01 21:54 (UTC)
Posted by [identity profile] fregimus.livejournal.com
Во-первых, лучшим стилем программирования будет не присваивать $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 2011-09-01 21:55 (UTC)

Re: Assumptions / Reduce

Posted by [identity profile] termometr.livejournal.com - 2011-09-02 07:29 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] termometr.livejournal.com - 2011-09-02 07:53 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] fregimus.livejournal.com - 2011-09-02 08:28 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] termometr.livejournal.com - 2011-09-02 08:33 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] termometr.livejournal.com - 2012-02-14 17:33 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] fregimus.livejournal.com - 2012-02-14 21:04 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] termometr.livejournal.com - 2011-09-02 08:31 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] fregimus.livejournal.com - 2011-09-02 08:53 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] termometr.livejournal.com - 2011-09-02 09:03 (UTC) - Expand

Re: Assumptions / Reduce

Posted by [identity profile] fregimus.livejournal.com - 2011-09-02 09:11 (UTC) - Expand

ClearAll[ "Global`*" ]

Posted by [identity profile] termometr.livejournal.com - 2011-09-02 11:48 (UTC) - Expand

Re: ClearAll[ "Global`*" ]

Posted by [identity profile] fregimus.livejournal.com - 2011-09-02 15:00 (UTC) - Expand

Re: ClearAll[ "Global`*" ]

Posted by [identity profile] termometr.livejournal.com - 2011-09-02 16:52 (UTC) - Expand

Do

2011-09-02 16:51 (UTC)
Posted by [identity profile] termometr.livejournal.com
Вопросы:
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}]

Re: Do

2011-09-02 20:04 (UTC)
Posted by [identity profile] fregimus.livejournal.com
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, конечно — ничего дурного в ней нет.

Re: Do

Posted by [identity profile] termometr.livejournal.com - 2011-09-08 14:22 (UTC) - Expand
Posted by [identity profile] termometr.livejournal.com
Пусть некий Dcr4=Solve[.....] дает на выходе:

{{Dcr -> -0.00215559}, {Dcr -> 0.173893}, {Dcr -> 0.379266}, {Dcr ->
0.919777}}

Dcr4[[1]] дает не значение, а
{Dcr -> -0.00215559}


Как получить для дальнейшей работы сами значения&
допустим надо вычислить

D2minusD3= 0.173893 - 0.379266

то же самое при символьном результате:
{{Dcr -> -a}, {Dcr -> b+c}, {Dcr -> к (a-b)}, {Dcr -> 0}}

Posted by [identity profile] fregimus.livejournal.com
In[7]:= Dcr4 = {{Dcr -> -0.00215559}, {Dcr -> 0.173893}, {Dcr -> 0.379266}, {Dcr -> 0.919777}};

In[9]:= Dcr /. Dcr4[[1]] (* См. ReplaceAll[], x /. y сокр. запись ReplaceAll[x, y] *)

Out[9]= -0.00215559

In[10]:= Dcr /. Dcr4

Out[10]= {-0.00215559, 0.173893, 0.379266, 0.919777}

In[13]:= Dcr4[[1, 1]]

Out[13]= Dcr -> -0.00215559

Dcr4[[1, 1, 2]] (* x->y то же самое что Rule[x,y] *)

Out[14]= -0.00215559

In[15]:= Dcr /. Dcr4[[2 ;; 3]] (* Диапазон; см. Part[] *)

Out[15]= {0.173893, 0.379266}

In[16]:= Subtract @@ (Dcr /. Dcr4[[2 ;; 3]]) (* См. Apply[]; x @@ y сокр. запись Apply[x, y] *)

Out[16]= -0.205373

Все это работает и при символьном результате, само собой.
Posted by [identity profile] termometr.livejournal.com
(* Замучился вставлять заголовки столбцов в таблицу и не могу \
увеличить шрифт в таблице - невозможно читать. Как бы поэстетичней сделать? *)

SYSD10 = {rs[t] == (as qsm S[t])/(Ks/Sm + S[t]),
ro[t] == (ao qom CC[t])/(Ko/Cm + CC[t]),
Derivative[1][X][t] == (-DD + mm[t]) X[t],
Derivative[1][S][t] == DD (1 - S[t]) - (rs[t] X[t])/(as Sm),
Derivative[1][CC][t] == Kla (1 - CC[t]) - (ro[t] X[t])/(ao Cm),
Derivative[1][P][t] == DD (Pm - P[t]) + (rp[t] X[t])/ap}
SYSD11 = {(as qsm (Ks rrs + (-1 + rrs) Sm SS))/(Ks + Sm SS) == 0, (
ao qom (CC Cm (-1 + rro) + Ko rro))/(CC Cm + Ko) == 0,
dXdt + DD X - Dm X == 0, dSdt + DD (-1 + SS) + (qsm rrs X)/Sm == 0,
dCCdt + (-1 + CC) Kla + (qom rro X)/Cm == 0,
dPdt + DD PP - (rp X)/ap == 0}
T1name1 = {"Исходное уравнение", "Преобразованное уравнение"}
Tout1 = Table[ {SYSD10[[n1]], SYSD11[[n1]] } , {n1, 6 } ] ;
(*
Tout3=Append[List[ T1name1], Table[ {SYSD10[[n1]],SYSD11[[n1]] } , \
{n1,6 } ] ];
Tout5=Append[List[ T1name1],Tout1];
*)

Grid[Tout1
, Frame -> All, ItemSize -> 25, Spacings -> {Automatic, 2},
Alignment -> Left]
Posted by [identity profile] fregimus.livejournal.com
Вместо

Tout1 = Table[ {SYSD10[[n1]], SYSD11[[n1]]}, {n1, 6 } ];

пишите

Tout1 = Transpose[ {SYSD10, SYSD11} ];

Увеличить шрифт. Самое простое — добавьте в список опций для Grid[] такую: BaseStyle -> Larger. Может быть списком (напр., BaseStyle -> {Larger, Orange, Italic}). См. Style[].

Заголовки. Идея в том, чтобы добавить элемент (список из двух элементов) к списку Tout1, где каждый элемент — заголовок, текст с форматированием. Например, так:

Grid[Prepend[Tout1, Style[#, {Bold, Blue}] & /@ T1name1],
Frame -> All, ItemSize -> 20, Spacings -> {Automatic, 2},
Alignment -> Left, BaseStyle -> {Larger}]
Posted by [identity profile] termometr.livejournal.com
Ниже дан текст, который Вы помогли сделать работоспособным. Помогите теперь, пожалуйста сравнить два выражения "на тавтологичность". Вроде должны быть тождественны, но нужно подтверждение от Вольфрама.
мои попытки неудачные.

Спасибо!
===================
"тянет!!!"
root1 = Reduce[rs == Dm + ro + rp && Nox*ro + Npx*rp == Dm + mx
&& rp >= 0 && ro >= 0 && rs >= 0
&& Npx > -1 && Nox >= 0 && mx >= 0 , {rs, ro, Dm, rp},
Reals] // FullSimplify
"проверка тождества - не работает"

root2 = Npx > -1 && Nox >= 0 &&
Dm + ro + rp ==
rs && ((mx == 0 && rs == 0 && ro == 0 && Dm == 0) || (mx > 0 &&
rs >= 0 && 0 <= ro <= (mx + rs)/(1 + Nox) &&
Dm == (-mx + Nox ro + Npx (-ro + rs))/(1 + Npx)))

root4 = Reduce[root1 && root2
, {Nox, Npx, mx, rs, ro, Dm, rp}, Reals] // FullSimplify

Equivalent[root1, root2] // TautologyQ

(* EOF *)
Posted by [identity profile] fregimus.livejournal.com
Не знаю, как просто проверить такие развесистые вещи на «одинаковость» — попробовал по-всякому, не получается. Если не просто, а по частям (там где границы условий), то сразу видно, что root1 и root4 не одинаковые:

In[39]:= Assuming[mx == 0 && rs > 0,
 {root1, root4} /. {Dm + ro + rp == rs -> True} // FullSimplify]

Out[39]= {Nox >= 0 && ro >= 0 && 1 + Npx > 0 && ro + Nox ro <= rs && Dm + Dm Npx + Npx ro == Nox ro + Npx rs,
          False}


Первое истинно при некоторых значениях параметров, второе всегда ложно. (подстановка Dm + ro + rp == rs -> True избавляется от единственного упоминания rp в обоих корнях).

Доб., а то сам засомневался: что в первом случае решение существует, можно проверить FindInstance. Я добавил rs > 0, иначе FindInstance найдет нули.

In[44]:= FindInstance[Nox >= 0 && ro >= 0 && 1 + Npx > 0 && ro + Nox ro <= rs && 
                         Dm + Dm Npx + Npx ro == Nox ro + Npx rs && rs > 0, 
                      {Nox, ro, Npx, rs, Dm}]

Out[44]= {{Nox -> 1, ro -> 1/4, Npx -> 0, rs -> 1, Dm -> 1/4}}
Edited 2012-02-16 09:01 (UTC)
Posted by [identity profile] termometr.livejournal.com
Вот еще подвис я. (
Есть неявная функция F(Dcr, par1, par2...)==0 .
Надо исследовать ее поведение для каждого из параметров при прочих равных стандартным значениям. Анализ чувствительности функции к изменению параметра, короче.

Внизу это я сделал, все работает.
Однако, прходится многократно повторять в тексте программы одно и то же )за исключением рассматриваемого параметра). Кроме того, есть подозрение, что надо следить за именами дабы не изменилось стандартное значение параметра.

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

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

{Ks = 0.099/100, Sm = 7.5/1, Ko = 0.00101, Cm = 0.0075, Kla = 1000.*1,
x0 = 1.5, s0 = 0.5/2, c0 = 1.0 , p0 = 0., Pm = 0,
as = 0.796, ao = 0.747, ap = 1.557, qsm = 1.886,
qom = 0.268 * 1.,
Nox = 1.592, Npx = 0.163 * 1 , mx = 0.0055}


FDCR[K_] := -(Kla Cm ao)/(Sm as) (1 + Nox) (Dcr +
mx/(1 + Nox)) (Dcr + mx - Nox ao*qom/(1 + Ko/Cm) ) (mx +
Dcr (1 + Nox) - Nox as*qsm ) +
Dcr (Dcr + mx) (Dcr + mx - Nox ao*qom ) (mx +
Dcr (1 + Nox) - Nox as*qsm/(1 + Ks/Sm) ) == 0 /. K -> X

FDCR[Kla]

ContourPlot[
{FDCR[ao] ,
Dcr == (-mx + (Nox - Npx) ao*qom/(1 + Ko/Cm) +
Npx as*qsm/(1 + Ks/Sm))/(1 + Npx) }
, { ao, 0 , 1 }, { Dcr, -0.1, 1.9} , FrameLabel -> Automatic ]
"График зависимости Dcr от _ao_ для кинетики с насыщением. !!!!"


ContourPlot[ {-(Kla Cm ao1)/(Sm as) (1 + Nox) (Dcr +
mx/(1 + Nox)) (Dcr + mx - Nox ao1*qom/(1 + Ko/Cm) ) (mx +
Dcr (1 + Nox) - Nox as*qsm )
+ Dcr (Dcr + mx) (Dcr + mx - Nox ao1*qom ) (mx +
Dcr (1 + Nox) - Nox as*qsm/(1 + Ks/Sm) ) == 0 ,

Dcr == (-mx + (Nox - Npx) ao1*qom/(1 + Ko/Cm) +
Npx as*qsm/(1 + Ks/Sm))/(1 + Npx) }

, { ao1, 0 , 1 }, { Dcr, -0.1, 1.9} , FrameLabel -> Automatic ]
"График зависимости Dcr от _ao_ для кинетики с насыщением. !!!!"

Posted by [identity profile] fregimus.livejournal.com
Не уверен, что понял вопрос. Так?

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

varplot[var_Symbol] :=
  Block[{Ks = 0.099/100, Sm = 7.5/1, Ko = 0.00101, Cm = 0.0075, 
    Kla = 1000.*1, x0 = 1.5, s0 = 0.5/2, c0 = 1.0, p0 = 0., Pm = 0, 
    as = 0.796, ao = 0.747, ap = 1.557, qsm = 1.886, qom = 0.268*1., 
    Nox = 1.592, Npx = 0.163*1, mx = 0.0055, varname = ToString[var]},
   Block[{var}, 
    ContourPlot[{-(Kla Cm ao)/(Sm as) (1 + Nox) (Dcr + 
           mx/(1 + Nox)) (Dcr + mx - Nox ao*qom/(1 + Ko/Cm)) (mx + 
           Dcr (1 + Nox) - Nox as*qsm) + 
        Dcr (Dcr + mx) (Dcr + mx - Nox ao*qom) (mx + Dcr (1 + Nox) - 
           Nox as*qsm/(1 + Ks/Sm)) == 0, 
      Dcr == (-mx + (Nox - Npx) ao*qom/(1 + Ko/Cm) + 
          Npx as*qsm/(1 + Ks/Sm))/(1 + Npx)}, {var, 0, 1}, {Dcr, -0.1,
       1.9}, FrameLabel :> {varname, Subscript[D, cr]}, 
     PlotLabel :> "График зависимости Dcr от " ~~ varname ~~ " для кинетики с насыщением"]]];

varplot[ao]
varplot[as]


Что происхосит: во-первых; я прячу переменные в блок, иначе непросто будет передать "ao" в функцию — вместо символа будет передаваться присвоенное значение. Внутренний блок переопределяет переменную, переданную как параметр, т. е. var подставляется при вычислении, получается Block[{ao},...]. Дальше понятно — ao во внутреннем блоке не имеет числового значения, остается как есть (вместо вашего ao1), а остальные параметры определены из списка во внешнем блоке.

Сразу много графиков можно построить так:

varplot /@ {ao, as, ap} // Column

Чтобы графики увеличить, добавьре опцию к ContourPlot:

ImageSize -> {400, Automatic}
Posted by [identity profile] termometr.livejournal.com
Не подскажете, как структуризировать полином?

"вот такая последовательность "
CL = CoefficientList[ FXP1 , X2 ]
FullSimplify[CL]

"дала :"

{-DD DK (1 + Ksr)^3 Y2 (DD + msY - ROS Y2 - Ymp) Ymp (DK Y2 +
DD Ymp), (1 + Ksr)^2 (DK^2 Y2^2 (DD + msY - ROS Y2)^2 +
DK Y2 (3 DD (DD + msY)^2 - (DD + msY) (DK (1 + Ksr) +
2 DD (2 + Kor) ROS) Y2 +
ROS (DK (1 + Ksr) + DD (1 + Kor) ROS) Y2^2) Ymp +
DD (DD (DD + msY)^2 - (DD + msY) (2 DK (2 + Ksr) +
DD (1 + Kor) ROS) Y2 +
2 DK (1 + Kor + Ksr) ROS Y2^2) Ymp^2 +
DD (-2 DD (DD + msY) + DK (1 + Ksr) Y2 +
DD (1 + Kor) ROS Y2) Ymp^3 + DD^2 Ymp^4), (1 +
Ksr) (-2 DK (DD + msY) Y2 (DD + msY - ROS Y2) (DD +
msY - (1 + Kor) ROS Y2) - (2 DD (DD + msY)^3 -
3 (DD + msY)^2 (DK (1 + Ksr) + DD (1 + Kor) ROS) Y2 + (DD +
msY) ROS (2 DK (2 + Kor) (1 + Ksr) +
DD (1 + Kor)^2 ROS) Y2^2 -
DK (1 + Kor) (1 + Ksr) ROS^2 Y2^3) Ymp + (2 DD (2 + Ksr) (DD +
msY)^2 - (DD + msY) (DK (1 + Ksr)^2 +
2 DD (1 + Kor) (2 + Ksr) ROS) Y2 +
ROS (DK (1 + Ksr)^2 + DD (1 + Kor)^2 ROS) Y2^2) Ymp^2 -
DD (1 + Ksr) (2 (DD + msY) - (1 + Kor) ROS Y2) Ymp^3), (DD +
msY) (DD + msY - (1 + Kor) ROS Y2) (DD +
msY - (1 + Ksr) Ymp) (DD +
msY - (1 + Kor) ROS Y2 - (1 + Ksr) Ymp)}

Есть у меня уверенность, что этот полином третей степени с переменной Х представим в виде сумму фактор-полиномов:

(X+A)(X+B)(X+C) + (X+D)(X+E)(X+F)

Есть ли способы представить его в такой форме?

вот с более простым у меня получилось так:

FORM01 = (DKla (1 + Kor) (ROS - rro) (-msY + rro Y2) (-msY + rro Y2 +
Ymp + Ksr Ymp) +
DD^2 (DKla (1 + Kor) (ROS - rro) - (1 + Ksr) (ROS + Kor ROS -
rro) rro Ymp) +
DD ((1 + Ksr) (ROS + Kor ROS - rro) rro Ymp (-msY + rro Y2 + Ymp) -
DKla (1 + Kor) (ROS - rro) (-2 msY + 2 rro Y2 + Ymp +
Ksr Ymp))) == 0



parts = { L1 -> DKla (1 + Kor) (ROS - rro) ,
R1 -> (1 + Ksr) (ROS + Kor ROS - rro) rro Ymp ,
Ymprrs -> (DD + msY - rro Y2 )}
partsR = parts /. {Rule -> Equal}

F3 = Assuming[ partsR , Simplify[ FORM01 ] ]

F3 /. parts

Спасибо!
Posted by [identity profile] fregimus.livejournal.com
Дайте мне немного времени, я не забыл. У меня два переезда и один ремонт, совсем времени нет ни на что.
Posted by [identity profile] termometr.livejournal.com
"занятный случай - BM не упрощает очевидное"
{"Naklon=",
1/2 (-1 + (-1 + Kor)/Sqrt[(1 + Kor)^2]) Qor, "Naklon=", -(Qor/(
1 + Kor))}
Simplify[1/2 (-1 + (-1 + Kor)/Sqrt[(1 + Kor)^2]) ]
FullSimplify[1/2 (-1 + (-1 + Kor)/Sqrt[(1 + Kor)^2]) ]


Posted by [identity profile] termometr.livejournal.com
http://iamphet.livejournal.com/502150.html?style=mine#t2370182
Posted by [identity profile] termometr.livejournal.com
Здравствуйте!

Не найдете время посмотреть? Рабочий код внизу.
SolveVAR8 - ничего не решает, но преобразовывает уравнения (немного упростив)поочередно к удобному виду - слева всегда только одна переменная. Важен порядок переменных.

SolveALL - решает одновременно все уравнения (если не зависнет) и максимально их упрощает. Но в левой части могут быть не только переменные.

Вопросы:
1. зачем в SolveVAR8 конструкция {SYSD11a=SYSout} - для резервирования памяти?
2.Можно ли обойтись в ней без DO и как?
3.Как ее заставить вместо Simplify делать FullSimplify?
4. как заставить SolveALL оставлять в левой части только переменные?

Спасибо!

====================

ClearAll[ "Global`*" ] (* стартовая зачистка всех переменных *)
(* привычная форма записи СУ *)
preferEqual0[e_] :=
LeafCount[e] - 100 Count[e, _ == 0, {0, Infinity}]; (* for f(x)==0 *)


SimSYS[SYS_ ] := Simplify[SYS , ComplexityFunction -> preferEqual0 ]

(* Приводит уравнения поодиночке к виду, где в левой части только \
переменная *)
SolveVAR8[ SYSout_, VARout_] := First[ Module[ {SYSD11a= SYSout},
{ (* :=First[ Module[ {SYSD11a=SYSout}, Важно! *)
Do[ SYSD11a[[n2]] =
Part[ Simplify@Solve[ SimSYS[ SYSout[[n2]] ] , VARout[[n2]] ],
1, 1 ] , {n2, 1, Length[ SYSout ] } ] ;
SYSD11a /. {Rule -> Equal} } ] ]

(* Решает все уравнения одновременно при заданных условиях *)
SolveALL[ Assum_, SYSout_, VARout_] :=
FullSimplify[
First[Assuming[Assum ,
Simplify@Solve[ SYSout, VARout ] /. {Rule -> Equal}] ] ]

(* Фукции табличной печати результатов *)
PrintEQn[MegaSYS_ , SYSNAME_ , Label_ ] := Labeled[ Grid[
Prepend[Transpose[MegaSYS], Style[#, {Bold, Blue}] & /@ SYSNAME ],
Frame -> All, ItemSize -> Automatic, Spacings -> {Automatic, 0.75},
Alignment -> Left, BaseStyle -> {Larger, 12} ,
ItemStyle ->
Directive[FontSize -> 12, Black,
ScriptSizeMultipliers -> 1.0] ] , Label ]

"Исходная система уравнений /СУ/ :"
sysNew = {rs*X == as*(Sm - S)*D1, ro == 0, rp*X == ap*P*D1,
rs == D1 + ro + rp, Nox*ro + Npx*rp == D1 + mx, rs == as*ds*S}

"Относительно переменных :"
VARout = {X, ro, rp, rs, D1, S}

sysNew1 = SolveVAR8[ sysNew, VARout ]

sysNew2 = SolveALL[ { C2 == 0 } , sysNew, VARout ]

PrintEQn[{ VARout, sysNew, sysNew1 , sysNew2} ,
{ "VARout", "sysNew", "SolveVAR8" ,
"SolveALL" } , "варианты преобразованния исходной СУ " ]

===========================

Posted by [identity profile] termometr.livejournal.com
http://gasloff.livejournal.com/1488244.html#comments

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 Summary

Page generated 2025-12-24 09:58

Expand Cut Tags

No cut tags