2014-04-18 20 views
5

Tôi đang sử dụng phần mềm tối đa để giúp tôi đơn giản hóa công thức. Thông thường, tôi có thể dễ dàng quản lý với subst, ratsubst, factor, ratsimp, ... Nhưng vẫn còn vài công thức mà tôi thấy khó để đơn giản hóa cách tôi muốn.đơn giản hóa các công thức trong phần mềm tối đa

  1. giả định rằng a> b và c> d, tôi muốn để đơn giản hóa các phần phân đoạn bắt đầu với một - đăng ký theo cách này:

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

    nhưng tôi không làm thế nào để làm điều đó. Dường như thuật toán mô-đun tối đa sẽ cố gắng sắp xếp các biến theo cách riêng của nó.

    Tôi đã tạo hàm tối đa của riêng mình để cố gắng đơn giản hóa các dấu trừ trừ vô dụng này.

    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)); 
    

    Tôi đã mong đợi no_minus (-a/(b-x)) sẽ trả lại/(x-b) nhưng không.

  2. Tôi muốn giới thiệu toán tử kết xuất mới để biểu thị rằng hai biểu thức xấp xỉ bằng nhau. Ví dụ: nếu x là xấp xỉ bằng y. Tôi muốn lưu ý nó

    x =~ y

    infix("=~").

Làm thế nào để cấu hình simplifier để khi đầu vào là

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

đầu ra là

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

Trả lời

5

Vâng, bạn có thể định nghĩa quy tắc đơn giản hóa thông qua tellsimp (và tellsimpafter, defrule, và defmatch). Có lẽ điều này là đủ để bắt đầu.

(%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

Cảm ơn bạn, đó thực sự là một khởi đầu tốt. Tôi chỉ cần thêm rbp = 80 và lbp = 80 để thoát khỏi dấu ngoặc đơn. Đây là những gì tôi cần để giải quyết toán tử "xấp xỉ" của tôi .; infix ("= ~"); matchdeclare ([aa, bb, cc], tất cả); tellimp ((aa = ~ bb) * cc, (aa * cc) = ~ (bb * cc)); tellimp ((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; infix ("= ~", 80,80); 2 * x + 3 = ~ 5 * y^2 + 6; (% -3)/2; "= ~" (2 * x, 3 * y + 4); % -4; – Arthur

Các vấn đề liên quan