强制最大值认为平方根是虚数
Force maxima to think square root is imaginary
我想看看动态系统的椭圆轨迹如何随着不同的系统参数旋转。所以我尝试了
assume(c<0);
assume(b>0);
assume(b*c<-a^2);
A:matrix([a,b],[c,-a]);
eigenvalues(A);
我得到结果
[[-sqrt(b*c+a^2),sqrt(b*c+a^2)],[1,1]]
不过,我想要
[[-%i*sqrt(a^2+b*c),%i*sqrt(a^2+b*c)],[1,1]]
看来maxima并没有使用我的假设。我怎样才能让它使用这样的假设,还是我需要手动完成?
您可以定义一个简化规则:
(%i1) display2d: false $
(%i2) assume(c<0, b>0, b*c<-a^2) $
(%i3) A:matrix([a,b],[c,-a]) $
(%i4) negp(e):= is(sign(e)='neg) $
(%i5) matchdeclare(NN, negp) $
(%i6) tellsimpafter(sqrt(NN), -%i*sqrt(-NN)) $
(%i7) eigenvalues(A);
(%o7) [[%i*sqrt((-b*c)-a^2),-%i*sqrt((-b*c)-a^2)],[1,1]]
我想看看动态系统的椭圆轨迹如何随着不同的系统参数旋转。所以我尝试了
assume(c<0);
assume(b>0);
assume(b*c<-a^2);
A:matrix([a,b],[c,-a]);
eigenvalues(A);
我得到结果
[[-sqrt(b*c+a^2),sqrt(b*c+a^2)],[1,1]]
不过,我想要
[[-%i*sqrt(a^2+b*c),%i*sqrt(a^2+b*c)],[1,1]]
看来maxima并没有使用我的假设。我怎样才能让它使用这样的假设,还是我需要手动完成?
您可以定义一个简化规则:
(%i1) display2d: false $
(%i2) assume(c<0, b>0, b*c<-a^2) $
(%i3) A:matrix([a,b],[c,-a]) $
(%i4) negp(e):= is(sign(e)='neg) $
(%i5) matchdeclare(NN, negp) $
(%i6) tellsimpafter(sqrt(NN), -%i*sqrt(-NN)) $
(%i7) eigenvalues(A);
(%o7) [[%i*sqrt((-b*c)-a^2),-%i*sqrt((-b*c)-a^2)],[1,1]]