2014-04-18 4 views
5

수식을 단순화하는 데 도움이되는 맥시마 소프트웨어를 사용하고 있습니다. 보통, subst, ratsubst, factor, ratsimp로 쉽게 관리 할 수 ​​있습니다 ... 그러나 내가 원하는 방식을 단순화하기가 어려운 수식이 아직 없습니다.맥시마 소프트웨어의 수식 단순화

  1. A> B와 C> D가, 내가 시작으로 분수를 단순화하고 싶습니다 가정 - 서명이 방법 :

    -(a - b)/(d - c) -> (a - b)/(c - d) 
    

    을하지만 난 그것을하지 않는 방법에 대해 설명합니다. maxima simplifier 알고리즘 은 자체 방식으로 변수를 정렬하려고합니다.

    이러한 쓸모없는 빼기 기호를 단순화하려고 최대 자체 함수를 만들었습니다.

    no_minus(fraction):= 
        block([simp:true, 
        numerat:expand(-ratnumer(fraction)), 
        denominat:expand(-ratdenom(fraction))], 
        block([simp:false], 
         numerat/denominat)); 
    -a/(b-x); 
    no_minus(-a/(b-x)); 
    no_minus(-a*b*c/(b-x*b*f-f)); 
    

    내가 no_minus는 (-a/(B-x는))는/(X-B)를 반환했을 것으로 예상 싶지만 그렇지 않았다.

  2. 저는 두 개의 표현식이 거의 동일하다는 것을 나타내는 새로운 중위 연산자를 소개하고자합니다. 예를 들어 x가 y와 거의 같은 인 경우 내가 주목하고 싶은 그것을 simplifier을 구성하는 방법

    x =~ y

    infix("=~").

되도록 입력

2*x+3 =~ u+v;
(%-3)/2;

을 때

출력 당신은 tellsimp (그리고 tellsimpafter, defruledefmatch)를 통해 단순화 규칙을 정의 할 수 있습니다,

x =~ (u+v-3)/2

답변

5

음이다. 아마 이것은 시작하기에 충분합니다.

(%i3) infix ("=~") $ 
(%i4) matchdeclare ([aa, bb, cc], all) $ 
(%i5) tellsimp ((aa =~ bb) * cc, (aa * cc) =~ (bb * cc)) $ 
tellsimp: warning: rule will treat '?mtimes' as noncommutative and nonassociative. 
(%i6) tellsimp ((aa =~ bb) + cc, (aa + cc) =~ (bb + cc)) $ 
tellsimp: warning: rule will treat '?mplus' as noncommutative and nonassociative. 
(%i7) (2*x + 3) =~ (u + v); 
(%o7) (2*x+3) =~ (v+u) 
(%i8) (% - 3)/2; 
(%o8) x =~ ((v+u-3)/2) 
+0

정말 고맙습니다. 방금 괄호를 없애기 위해 rbp = 80 및 lbp = 80을 추가했습니다. 이것이 내가 중급어 인 "approx"연산자를 해결하는 데 필요한 것입니다.; 중절 문자 ("= ~"); matchdeclare ([aa, bb, cc], 모두); tellsimp ((aa = ~ bb) * cc, (aa * cc) = ~ (bb * cc)); tellsimp ((aa = ~ bb) + cc, (aa + cc) = ~ (bb + cc)); (2 * x + 3) = ~ (5 * y^2 + 6); (% -3)/2; 2 * x + 3 = ~ 5 * y^2 + 6; (% -3)/2; 중절 ("= ~", 80,80); 2 * x + 3 = ~ 5 * y^2 + 6; (% -3)/2; "= ~"(2 * x, 3 * y + 4); % -4; – Arthur