2016-03-07 18 views
5

Có chức năng tích hợp trong maxima để lấy từ hàm đa thức một danh sách với các hệ số của nó không? Và để có được mức độ đa thức?Hệ số đa thức maxima

Hàm tương tự nhất mà tôi tìm thấy là args, nhưng nó cũng trả về biến cùng với hệ số. Tôi có thể chấp nhận điều này, vẫn còn nhiều hơn khi sử dụng length cùng với args sẽ trả về mức độ. Vấn đề là args không hoạt động với đa thức độ 0.

Có chức năng nào khác để điều chỉnh tốt hơn cho các mục đích này không? Cảm ơn trước.

Trả lời

7

Để tính mức độ đa thức trong một biến, bạn có thể sử dụng hàm hipow.

(%i) p1 : 3*x^5 + x^2 + 1$ 
(%i) hipow(p1,x); 
(%o)        5 

Đối với một đa thức với nhiều hơn một biến, bạn có thể lập bản đồ hipow qua các biến được trả về bởi các listofvars chức năng, và sau đó đi tối đa của danh sách kết quả.

(%i) p2 : 4*y^8 - 3*x^5 + x^2 + 1$ 
(%i) degree(p) := if integerp(p) then 0 else 
      lmax(map (lambda([u], hipow(p,u)),listofvars(p)))$ 
(%i) degree(p1); 
(%o)        5 
(%i) degree(p2); 
(%o)        8 
(%i) degree(1); 
(%o)        0 

Các coeff hàm trả về hệ số x^n, trao coeff(p,x,n), vì vậy để tạo ra một danh sách các hệ số của một đa thức trong một biến, chúng ta có thể lặp qua quyền hạn của x, tiết kiệm các hệ số vào một danh sách.

(%i) coeffs1(p,x) := block([l], l : [], 
         for i from 0 thru hipow(p,x)  
          do (l : cons(coeff(p,x,i),l)), l)$ 
(%i) coeffs1(p1,x); 
(%o)      [3, 0, 0, 1, 0, 1] 

Và để tạo ra một danh sách các hệ số của một đa thức trong nhiều hơn một biến bản đồ coeffs1 qua listofvars,.

(%i) coeffs(p) := map(lambda([u], coeffs1(p, u)), listofvars(p))$ 
(%i) coeffs(p2); 
(%o) [[- 3, 0, 0, 1, 0, 4 y^8 + 1], 
     [4, 0, 0, 0, 0, 0, 0, 0, - 3 x^5 + x^2 + 1]] 
+0

mức độ của bạn chỉ ở mức tối đa, nhưng không phải là mức tối đa. Ví dụ sau có thể đưa ra mức độ (x^2 * y-x) = 3. –

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