Student[Calculus1]

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

Модератор: Admin

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Student[Calculus1]

Сообщение masjanin » Чт дек 15, 2005 6:17 pm

вопрос по Student[Calculus1]. Вычисление интегралов в пошаговом режиме.
Пусть мы находимся в середине вычислений когда интеграл разбит (допустим) на сумму интегралов и спрашиваем хинт, мапле отвечает, например, сделаем замену.
Вопрос: как определить интеграл в котором делается замена, или вообще не замена, а к какому относится данный хинт. нужно знать сам интеграл или его адрес в выражении.

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 6:47 pm

А вы как пишите? Так:

Rule[Hint(%)](%);

Насколько я понял, если итеграл разбит на сумму, то Hint дает подсказку к первому слагаемому...

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 7:08 pm

А Вам с помощью пошагового вычисления и подмены "хинтов" удавалось взять интегралы, которые простым int Мапл не берет? Просто интересно....

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Чт дек 15, 2005 7:17 pm

Я не пробовал брать неберущиеся таким способом. А если хинт к первому, это хорошо, я замечал это, но все равно как то боязно, а вдруг нет, а откуда вам это известно?

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Чт дек 15, 2005 7:25 pm

А как найти самый первый интеграл в выражении побыстрее, а то на ум приходит не очень удобное. Например здесь:


zeta[1]*pi^2+xi*(Int(x,x)+Int(sin(x)^2,x));
\_____ ____/ \_____________ _____________/
......v....................v
это посчитанный...в этом интеграле сначала
интеграл..........вынесен множитель, а потом
..................разбит на сумму

вот интеграл Int(x,x) надо выделить
только это нужно сделать в общем случае, здесь пример

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 7:34 pm

А зачем его искать?... Ведь Rule сама его находит?.. Поясните.

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 7:37 pm

А если напишите:
Int( f(x) , x=a..b):
for i from 1 to 20 do Hint(%); Rule[%](%%); od;

То увидите все (или почти все :) ) мучения Мапла.


Дополнение, если напишите так:

Int( f(x) , x=a..b):
for i from 1 to 1000 do %:Hint(%); if % <> [] then Rule[%](%%); else break end if; od;

то увидите ВСЕ мучения! :)

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 8:01 pm

Понял, в чем ваш глюк.
Просто вы зря xi вынесли за скобки!
Напишите expand(%) и уже с этим работает! Все прекрасно решает!

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Чт дек 15, 2005 8:58 pm

Просили пояснить, поясняю - все мучения мапла я вижу, именно для этого все и затеялось, хочу запрограммить вывод решения в пошаговом режиме (с применением latex):
b
/
|g(x)dx+еще интеграл...
|
/
a
так вот мапл говорит:
[change, x=f(u)]
у меня:
сделаем замену переменной: x=f(u), dx=diff(f(u),u)*du, поменяем пределы интегрирования: (и здесь надо написать: xi[1]=f_обратная(x)|x=a,
xi[2]=f_обратная(x)|x=b),
но спрашивается какие пределы a и b конкретно, это я узнаю, если если буду знать к какому интегралу применяется хинт.
Так как я тоже теперь почему то верю, что хинт адресован к первому интегралу вопрос стоит в том как побыстрей выделить его из выражения.

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Чт дек 15, 2005 9:26 pm

я понял
ShowIncomplete(data)[1][2];
вопрос отпал.

Только не понятно почему ты написал что мы увидем ВСЕ мучения за 1000 шагов, я использовал while, навсякий случай.

masjanin
Сообщения: 80
Зарегистрирован: Вс дек 26, 2004 10:57 pm
Откуда: <<saransk>>

Сообщение masjanin » Чт дек 15, 2005 9:30 pm

упс, извиняюсь зы "тыкание", просто когда не вижу собеседника, представляю себе сверстника

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 9:31 pm

Я break использую. Т.ч. вылетает сразу, как посчитает.
Например,

zeta[1]*pi^2+xi*(Int(x,x)+Int(sin(x)^2,x)):
expand(%);
for i from 1 to 1000 do %:Hint(%); if % <> [] then rhs(Rule[%](%%)); else break end if; od;

Вылетает на 10 шаге. Но, конечно можно и через while.

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 9:32 pm

Да я молодой. :)

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 9:38 pm

Там в параллельной ветке обсуждалось как выделить интеграл. Вот как выделить првый:

zeta[1]*pi^2+xi*(Int(x,x=a..b)+Int(sin(x)^2,x=c..d));
In:=expand(%);

for i from 1 to nops(In) do if has([op(i,In)],Int) then break end if od;
op(i,In);

Break
Сообщения: 159
Зарегистрирован: Вс окт 09, 2005 2:10 am
Откуда: Петербург

Сообщение Break » Чт дек 15, 2005 10:10 pm

Вообще можно как ты, но

ShowIncomplete(data):
if whattype(%)='exprseq' then ShowIncomplete(data)[1,2] else ShowIncomplete(data)[2] end if; # так обрабатываем глюк с последним интегралом

op([2,2],%); # здесь выскочат приделы интегрирования


Удачи!

Если получится руссифицировать хинты и перевести в латех - скинь мне в ПМ, или выложи здесь. Любопытно посмотреть! :)