Одна и та же ошибка и в Mathematica 7, и в Maple 11

Форум пользователей пакета Mathematica

Модератор: Admin

Selin
Сообщения: 43
Зарегистрирован: Чт апр 14, 2011 11:14 am

Одна и та же ошибка и в Mathematica 7, и в Maple 11

Сообщение Selin » Пт май 06, 2011 3:04 pm

Уважаемые форумчане. В Maple 11 с использованием algsubs не выполняется правильно простая подстановка. Не дает результата и использование функции ReplaceAll в Mathematica 7. Нельзя ли получить ваши соображения по этой задачке. Заранее благодарен.

> algsubs(f(t)^3 = h(t) + t*w(t), (g(t)^(f(t)^3) + g(t + sin(f(t)^3) + a))/f(t)^3);

(g(t)^(h(t) + t*w(t)) + g(t + sin(h(t) + t*w(t)) + a))/f(t)^3

In[234]:= ReplaceAll[(g[t]^f[t]^3 + g[t + Sin[f[t]^3] + a])/f[t]^3, f[t]^3 -> h[t] + t*w[t]]

Out[234]= (g[t]^(h[t] + t*w[t]) + g[a + t + Sin[h[t] + t*w[t]]])/f[t]^3

Aivar
Сообщения: 48
Зарегистрирован: Вт июл 13, 2004 4:00 pm

Сообщение Aivar » Вс май 08, 2011 2:20 pm

С Днем Победы!!!

Все представленные примеры и даже более в обоих пакетах решает одноименная процедура Subs проф. Аладьева (http://www.aladjev.narod.ru). Привожу несколько типичных примеров:

Mathematica 8
===========

In[11]:= Subs[(g[t]^f[t]^3 + g[t + Sin[f[t]^3] + a])/f[t]^3, f[t]^3, h[t] + t*w[t]]
Out[11]= (g[t]^(h[t] + t*w[t]) + g[a + t + Sin[h[t] + t*w[t]]])/(h[t] + t*w[t])

In[12]:= ReplaceAll[(a + 1/f[y]^2)/f[y]^2, f[y]^2 -> Sin[x] + Cos[x]]
Out[12]= (a + 1/f[y]^2)/f[y]^2

In[13]:= Subs[(a + 1/f[y]^2)/f[y]^2, f[y]^2, Sin[x] + Cos[x]]
Out[13]= (1 + a Cos[x] + a Sin[x])/(Cos[x] + Sin[x])^2

In[14]:= Subs[a/u^4 + b/u^2 + c + d*u^2 + e*u^4, u^2, v]
Out[14]= c + a/u^4 + e u^4 + b/v + d v

In[15]:= Subs[1/x^2, x^2, h]
Out[15]= 1/h

In[16]:= ReplaceAll[1/x^2, x^2 -> h]
Out[16]= 1/x^2

In[17]:= ReplaceAll[1 + 1/(x^2 + 1/(x^2 + 1/x^2)), x^2 -> h]
Out[17]= 1 + 1/(h + 1/(h + 1/x^2))

In[18]:= Subs[1 + 1/(x^2 + 1/(x^2 + 1/x^2)), x^2, h]
Out[18]= 1 + 1/(h + 1/(1/h + h))

In[19]:= ReplaceAll[x^2/(x^2 + 1/x^2) + b*x^2/(2 + x^2) + (c + 1)/x^2, x^2 -> y^2 + h]
Out[19]= (1 + c)/x^2 + (b (h + y^2))/(2 + h + y^2) + (h + y^2)/( h + 1/x^2 + y^2)

In[20]:= Subs[x^2/(x^2 + 1/x^2) + b*x^2/(2 + x^2) + (c + 1)/x^2, x^2, y^2 + h]
Out[20]= (1 + c)/(h + y^2) + (b (h + y^2))/(2 + h + y^2) + (h + y^2)/(h + y^2 + 1/(h + y^2))

Maple 11
=======

> Subs(f(t)^3 = h(t) + t*w(t), (g(t)^(f(t)^3) + g(t + sin(f(t)^3) + a))/f(t)^3);
(g(t)^(h(t) + t*w(t)) + g(t + sin(h(t) + t*w(t)) + a))/(h(t) + t*w(t))

> algsubs(f(y)^2 = sin(x), (a + 1/f(y)^2)/f(y)^2);
(a+1/(f(y)^2))/f(y)^2

> Subs(f(y)^2 = sin(x), (a + 1/f(y)^2)/f(y)^2);
(a*sin(x) + 1)/sin(x)^2

> Subs(u^2 = v, a/u^4 + b/u^2 + c + d*u^2 + e*u^4);
(a*v + b*u^4 + c*u^4*v + d*v^2*u^4 + e*u^8*v)/(u^4*v)

> Subs(x^2 = h,1/x^2);
1/h

> subs(x^2 = h, 1/x^2);
1/(x^2)

> algsubs(x^2 = h, 1/x^2);
1/(x^2)

> Subs(x^2=h, 1+1/(x^2+1/(x^2+1/x^2)));
(h^3+2*h+h^2+1)/(h*(h^2+2))

> subs(x^2=h, 1+1/(x^2+1/(x^2+1/x^2)));
1+1/(h+1/(h+1/(x^2)))

> algsubs(x^2=h, 1+1/(x^2+1/(x^2+1/x^2)));
1+1/(h+1/(h+1/(x^2)))

> subs(x^2 = y^2 + h, x^2/(x^2 + 1/x^2) + b*x^2/(2 + x^2) + (c + 1)/x^2);
(y^2+h)/(y^2+h+1/(x^2))+b*(y^2+h)/(2+y^2+h)+(c+1)/x^2

> algsubs(x^2 = y^2 + h, x^2/(x^2 + 1/x^2) + b*x^2/(2 + x^2) + (c + 1)/x^2);
(y^2+h)/(y^2+h+1/(x^2))+b*(y^2+h)/(2+y^2+h)+(c+1)/x^2

> Subs(x^2 = y^2 + h, x^2/(x^2 + 1/x^2) + b*x^2/(2 + x^2) + (c + 1)/x^2);
(2+3*c*y^4*h+2*c+h+y^2+4*y^2*h+2*h^2+9*y^4*h+9*y^2*h^2+4*y^6*h+6*y^4*h^2+4*y^2*h^3+b*y^8+4*b*y^6*h+6*b*y^4*h^2+4*b*y^2*h^3+2*b*y^2*h+4*c*y^2*h+3*c*y^2*h^2+2*y^4+3*y^6+3*h^3+y^8+h^4+b*y^4+b*h^4+b*h^2+2*c*y^4+2*c*h^2+c*y^6+c*h^3+c*y^2+c*h)/(y^4+2*y^2*h+h^2+1)/(2+y^2+h)/(y^2+h)

Я использую эту процедуру как в Mathematica 6/7/8, так и в Maple 10/11.

dims12
Сообщения: 37
Зарегистрирован: Чт янв 30, 2003 1:23 am

Сообщение dims12 » Пн май 09, 2011 10:34 am

Это происходит от того, что Математика автоматически преобразует выражение, с которым Вы оперируете.

Степень в знаменателе она представляет, как отрицательную степень:

In[58]:= 1/f[t]^3 // FullForm

Out[58]//FullForm= Power[f[t],-3]

В этом выражении, как видите, не присутствует того элемента, который нужно подвергнуть замене, поэтому, процедура замены не срабатывает.

Чтобы однократно задержать автоматические преобразования, можно использовать функцию Defer

In[61]:= ReplaceAll[
Defer[(g[t]^f[t]^3 + g[t + Sin[f[t]^3] + a])/f[t]^3],
f[t]^3 -> h[t] + t*w[t]]

Out[61]= (g[t]^(h[t] + t w[t]) + g[t + Sin[h[t] + t w[t]] + a])/(
h[t] + t w[t])

Чтобы полностью управлять задержками, надо использовать функцию Hold

Selin
Сообщения: 43
Зарегистрирован: Чт апр 14, 2011 11:14 am

Сообщение Selin » Пн май 09, 2011 2:35 pm

Ситуацию я выяснил сам, мне нужно было средство. Я получил ссылку на него от Aivar. Спасибо, скачал. все ОК!!!

Selin
Сообщения: 43
Зарегистрирован: Чт апр 14, 2011 11:14 am

Сообщение Selin » Пт июл 01, 2011 12:56 pm

Solution of the problem can be found in the book http://search.barnesandnoble.com/Modula ... 1596822689

xyz
Сообщения: 202
Зарегистрирован: Чт мар 24, 2005 3:42 pm

Сообщение xyz » Пн дек 24, 2012 4:11 pm

Книга http://www.aladjev.narod.ru/Mathematica.htm более доступна и, скорее всего, содержит более развитые средства для обеспечения алгебраических подстановок.

Vasiliev
Сообщения: 5
Зарегистрирован: Ср сен 05, 2012 10:41 am

Сообщение Vasiliev » Пн дек 24, 2012 7:50 pm

К сожалению, эта недоработка свойственна также и более старшим версиям и Maple (например, 15), и Mathematica (например, 8, 9). С упомянутым средством работаю в обоих системах.

Aivar
Сообщения: 48
Зарегистрирован: Вт июл 13, 2004 4:00 pm

Сообщение Aivar » Пн июн 29, 2015 12:36 pm

Эти и подобные проблемы обсуждаются в последней книге Аладьева В.З., которую можно бесплатно скачать с http://padabum.com/d.php?id=192097. Там же приведены интересные решения ряда подобных проблем.

PhD
Сообщения: 14
Зарегистрирован: Чт июн 13, 2013 7:09 pm
Откуда: Киев

Сообщение PhD » Вт ноя 10, 2015 4:29 pm

В пакете Аладьева AVZ_Package содержатся средства, успешно решающие данные проблемы. Архив с последней версией пакета, поддерживаемой Mathematica 10.3.0, можно свободно скачать здесь

https://yadi.sk/d/JAveYeaIjJ9Ci

Selin
Сообщения: 43
Зарегистрирован: Чт апр 14, 2011 11:14 am

Сообщение Selin » Сб ноя 14, 2015 11:57 am

Процедуру Substitution, решающую этот вопрос, обнаружил по адресу

http://bbian.webs.com/Files/Mathematica_Maple.pdf

на стр. 4. Проверка показала, что процедура носит достаточно общий характер.