我想用枫树做以下事情 让
omega := z -> 2*<Re(z), Im(z), 1>/(1+abs(z)^2):
和
phi := -> z (l*z+a)/(1-l*conjugate(a)*z):
其中a是复杂的,l是真实的。 我认为Omega = omega(phi(z))并且我想评估diff(Omega,x)diff(Omega,y),但也计算一些限制,如
> expr := omega(phi(1/e));
> Omega := simplify(map(limit, expr, e = 0));
> expr2 := (omega(phi(1/(e^2*conjugate(z))))-Omega)/e^2;
> H := limit(expr2, e = 0);
不幸的是我已经尝试了所有的东西(Vector Calculus,Complex ......)而且我总是有问题,因为我使用矢量或因为变量很复杂。
有人知道编码此类问题的好方法吗? THX
答案 0 :(得分:1)
[编辑:]我无法告诉您对运算符phi
的原始定义是什么,因为原始帖子中存在语法错误(语法无效)。特别是我不知道你的意思,
phi := z -> (l*z+a)/(1-l*conjugate(a)*z):
,或者
phi := z -> z (l*z+a)/(1-l*conjugate(a)*z):
我用下面的前者。当然,结果取决于选择。
在上一个问题中,您使用evalc
进行了回答,根据该问题,所有未知数将被视为真实。
但是现在你似乎有了混合,l
被认为是真实的,而a
可能很复杂。
如前面的问题所示,另一种方法是对未知数使用假设,在这种情况下可以更好地控制你的混合。
请注意,默认情况下,a
会被视为可能很复杂。所以我们可以在l
上使用假设。
restart:
omega := z -> 2*<Re(z), Im(z), 1>/(1+abs(z)^2):
phi := z -> (l*z+a)/(1-l*conjugate(a)*z):
expr := omega(phi(1/e)):
map(limit,expr,e=0) assuming l::real:
map(simplify,%);
[ 2 Re(a) ]
[- ----------]
[ 2 ]
[ | a | + 1]
[ ]
[ 2 Im(a) ]
[- ----------]
[ 2 ]
[ | a | + 1]
[ ]
[ 2 ]
[ 2 | a | ]
[ ---------- ]
[ 2 ]
[ | a | + 1 ]
这是另一种获得结果的方法。我们可以让a=S+T*I
并使用evalc
来完全处理S
和T
(以及l
)纯粹是真实的假设。
map(limit,subs(a=S+T*I,expr),e=0) assuming l::real:
simplify(map(evalc,%));
[ 2 S ]
[- -----------]
[ 2 2 ]
[ S + T + 1]
[ ]
[ 2 T ]
[- -----------]
[ 2 2 ]
[ S + T + 1]
[ ]
[ 2 2 ]
[ 2 (S + T ) ]
[ ----------- ]
[ 2 2 ]
[ S + T + 1 ]