Использование процедур в выражениях

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

Модератор: Admin

jambulat
Сообщения: 13
Зарегистрирован: Вт ноя 20, 2007 2:59 am

Использование процедур в выражениях

Сообщение jambulat » Чт янв 17, 2008 3:45 am

Мне всего лишь-то надо для данной конкретной задачи научиться выбирать "правильный" корень из комплексного числа, а именно его аргумент должен принадлежать заданному интервалу 0<=arg(sqrt(z))<Pi
Для этого я написал процедуру, которая делает то что мне нужно, но только с конкретными чилами, и в силу специфики Мапл, чтоли, я не могу ее использовать в символьных выражениях... Подскажите, пожалуйста, кто-нибудь альтернативу...
Вот моя процедура:

Код: Выделить всё

my_sqrt := proc(x) local t;
t:=sqrt(x);
if(argument(t)<Pi and argument(t)>=0)
then t;
else -t;
end if;
end proc;

aar
Сообщения: 100
Зарегистрирован: Чт авг 10, 2006 11:27 am

Сообщение aar » Чт янв 17, 2008 9:42 am

Дайте пример, как Вы хотите использовать процедуру в символьных выражениях.
Заметьте, что Maple просто так не определит Pi > 0

Код: Выделить всё

> evalb(Pi > 0);
                                   0 < Pi

Нужно делать, например, так

Код: Выделить всё

> evalb(evalf(Pi) > 0);
                                    true

jambulat
Сообщения: 13
Зарегистрирован: Вт ноя 20, 2007 2:59 am

Сообщение jambulat » Чт янв 17, 2008 1:50 pm

ну вот, такой вот гипотетический код:

Код: Выделить всё

restart;
> with(linalg):
>
> my_sqrt := proc(x) local t;
> t:=sqrt(x);
> if(argument(t)<Pi and argument(t)>=0)
> then t;
> else -t;
> end if;
> end proc;
>
> my_sqrt(2);#раньше вроде нормально вычислялось, а сейчас опять ругается...
>
> A:=(x,p)->matrix(2,2,[p,my_sqrt(x),my_sqrt(x),p]);
> C:=(x)->multiply(A(x,1),A(x,2));
> f:=(x)->C(x)[1,1];
> plot(f,1..10);

jambulat
Сообщения: 13
Зарегистрирован: Вт ноя 20, 2007 2:59 am

Сообщение jambulat » Чт янв 17, 2008 2:00 pm

А!!! Написал как Вы указали
if(evalf(argument(t))<evalf(Pi) and evalf(argument(t))>=0)
и все заработало! Спасибо!