Gói phần mềm tượng trưng cho biểu thức Matrix?


36

Chúng ta biết rằng là đối xứng và xác định dương. Chúng tôi biết rằng là trực giao:BMộtB

Câu hỏi: là đối xứng và tích cực xác định? Trả lời có.BMộtB

Câu hỏi: Một máy tính có thể cho chúng tôi biết điều này? Trả lời: Có lẽ.

Có bất kỳ hệ thống đại số tượng trưng nào (như Mathicala) xử lý và truyền bá các sự kiện đã biết về ma trận không?

Chỉnh sửa: Để rõ ràng tôi đang hỏi câu hỏi này về ma trận được xác định trừu tượng. Tức là tôi không có mục rõ ràng cho và , tôi chỉ biết rằng cả hai đều là ma trận và có những đặc điểm riêng như đối xứng, xác định dương, v.v ....MộtB


5
Cái tôi thiếu là phần mềm xử lý ma trận một cách tượng trưng (nghĩa là không phải là mảng). Tôi muốn có thể nói về một số ma trận đối xứng mà không phải băn khoăn về các mục của nó. C
JM

6
Có một vài dự án làm việc này. Tôi tình cờ quen thuộc với việc triển khai trong SymPy. Đó là lỗi nhưng dần dần được xây dựng.
MRocklin

4
Điều này nghe có vẻ như định lý tự động chứng minh. Bí quyết sau đó là bao gồm một bộ tiên đề đầy đủ trong động cơ của bạn để sau đó nó có thể được suy luận một cách hiệu quả bằng lý luận tự động (nghĩ PRITAL). Nếu tôi thiết kế một thứ như vậy, tài sản bạn trích dẫn ở trên chắc chắn là thứ tôi mã hóa như một mối quan hệ thực tế / đã biết hơn là cố gắng. Mặt khác, có Giáo sư Paolo Bientinesi tại Đại học RWTH Aachen. Trong luận án của mình, ông nói về đạo hàm tự động của các thuật toán đại số tuyến tính. Ông sử dụng Mathicala một cách tượng trưng. aices.rwth-aachen.de:8080/~pauldj
Lagerbaer

1
Tôi biết công cụ của Paolo và thư viện FLAME. Tôi không nghĩ rằng nó có thể làm điều này.
Matt Knepley

2
Tôi đồng ý rằng hệ thống đại số máy tính cho ma trận sẽ là tuyệt vời, nhưng dường như bị thiếu. Tôi đã đặt tiền thưởng để tăng cơ hội nhận được câu trả lời.
Ghi nhớ

Câu trả lời:


27

Chỉnh sửa: Điều này hiện đã có trong SymPy

$ isympy
In [1]: A = MatrixSymbol('A', n, n)
In [2]: B = MatrixSymbol('B', n, n)
In [3]: context = Q.symmetric(A) & Q.positive_definite(A) & Q.orthogonal(B)
In [4]: ask(Q.symmetric(B*A*B.T) & Q.positive_definite(B*A*B.T), context)
Out[4]: True

Câu trả lời cũ hơn cho thấy công việc khác

Vì vậy, sau khi xem xét một lúc, đây là những gì tôi đã tìm thấy.

Câu trả lời hiện tại cho câu hỏi cụ thể của tôi là "Không, không có hệ thống hiện tại nào có thể trả lời câu hỏi này". Tuy nhiên, có một vài điều dường như đến gần.

Đầu tiên, Matt Knepley và Lagerbaer đều chỉ ra làm việc bởi Diego Fabregat và Paolo Bientinesi . Công việc này cho thấy cả tầm quan trọng tiềm năng và tính khả thi của vấn đề này. Đó là một đọc tốt. Thật không may, tôi không chắc chắn chính xác cách thức hệ thống của anh ấy hoạt động hoặc khả năng của nó (nếu có ai biết về các tài liệu công khai khác về chủ đề này thì hãy cho tôi biết).

Thứ hai, có một thư viện đại số tenor được viết cho Mathicala gọi là xAct xử lý các đối xứng và một cách tượng trưng. Nó làm một số điều rất tốt nhưng không phù hợp với trường hợp đặc biệt của đại số tuyến tính.

Thứ ba, các quy tắc này được viết chính thức trong một vài thư viện cho Coq , một trợ lý chứng minh định lý tự động (tìm kiếm Google cho đại số tuyến tính / ma trận coq để tìm một số). Đây là một hệ thống mạnh mẽ mà không may đòi hỏi sự tương tác của con người.

Sau khi nói chuyện với một số người hoạt động theo định lý, họ đề nghị xem xét lập trình logic (ví dụ Prolog, mà Lagerbaer cũng đề xuất) cho loại điều này. Theo hiểu biết của tôi điều này chưa được thực hiện - tôi có thể chơi với nó trong tương lai.

Cập nhật: Tôi đã thực hiện điều này bằng hệ thống Maude . Mã của tôi được lưu trữ trên github


1
Khi tôi thấy rằng không có hệ thống tốt, bản năng đầu tiên của tôi là viết một chương trình prolog. :)
Ghi nhớ

1
Tôi đã thêm một liên kết ở phía dưới vào một dự án phụ của tôi liên quan đến vấn đề này.
MRocklin

4

Một số tính toán ma trận tượng trưng (ví dụ: hoàn thành ma trận khối) có thể được thực hiện với gói NCAlgebra http://www.math.ucsd.edu/~ncalg/ (chạy theo mathicala ).

Bergman http://servus.math.su.se/bergman/ là một gói trong Lisp với khả năng tương tự.

Một số giấy tờ có liên quan:
http://math.ucsd.edu/~helton/osiris/COMPALG2000/ohRevisIJC.pdf
http://math.ucsd.edu/~thesis/thesis/dkronewitter/dkronewitter.pdf
http: // www. tandfonline.com/doi/abs/10.1080/00207170600882346


3

CAS2x23x3B

Câu hỏi sau đó trở thành, còn Nma trận thứ nguyên thì sao? Có lẽ bạn có thể đưa ra một sơ đồ quy nạp trong đó N-1 x N-1giả sử là đúng và sau đó xây dựng một ma trận khối mới với kích thước tổng thể N x Nđể chứng minh rằng đó là xác định dương và đối xứng.

Vì vậy, câu hỏi cuối cùng, trong đó phần mềm nào phù hợp hơn cho nhiệm vụ (nếu có), kinh nghiệm của tôi đã có MATLAB/MuPadDerive(vẫn sử dụng nó) và cả hai đều không xử lý tốt các vectơ và ma trận. MATLABchia mọi thứ thành các thành phần và Derivecó thể khai báo Non-scalarsnhưng nó không áp dụng bất kỳ quy tắc đơn giản hóa nào cho chúng.

một×(b×c)= =(mộtb)c-(mộtc)b


2

Lâu rồi tôi mới sử dụng một trong hai gói này, nhưng tôi nghĩ rằng bạn có thể làm điều này bằng các ngôn ngữ như Mathicala thông qua việc sử dụng các xác nhận. Một cái gì đó giống như Assert [A, Symmetric] nói với Mathicala rằng A là một ma trận đối xứng, v.v. Hiện tại tôi không có quyền truy cập vào tiện dụng, vì vậy đây là thứ cần phải được kiểm tra.


1
Tôi nghĩ bạn có nghĩa là lệnh Mathicala Assumingthay vì Assert. Assumingsẽ áp dụng các giả định này khi đơn giản hóa hoặc tích hợp một biểu thức, nhưng tài liệu không rõ ràng về việc liệu các thuộc tính ma trận có được truyền bá hay không. Tôi đoán là các tính chất như vậy không được thực hiện thông qua các tính toán tượng trưng.
Geoff Oxberry

Đó có thể là sự thật. Như tôi đã nói, đây là một ngày trước đây (hồi tôi còn học đại học). Nhưng tôi nhớ có thể làm một cái gì đó như thế này một lần. (Có lẽ đó là với MuPad, như được triển khai trong Science WorkPlace.) Nhưng tôi không còn có quyền truy cập vào SWP để kiểm tra điều đó (chỉ dành cho Windows và tôi không có trình giả lập trên hộp của mình).
aeismail

MuPAD là một phần của Matlab. Theo tài liệu , việc sử dụng các giả định tương tự như Mathicala.
Geoff Oxberry

MuPAD chỉ có thể xử lý ma trận kích thước cố định và không đưa ra các giả định tùy ý như độ chính xác dương. Ngoài ra, nó không thể trả lời câu hỏi về tính dứt khoát tích cực của BAB 'ban đầu được hỏi.
Ghi nhớ

@Memming: Đủ công bằng. Như tôi đã nói, bộ nhớ MuPAD của tôi đã hết hạn, vì lần cuối tôi sử dụng chương trình này thường xuyên vào khoảng năm 2006 (khi tôi chuyển từ PC sang Mac).
aeismail

2

Maple 15 không thể làm điều đó. Nó không có thuộc tính "Trực giao" cho ma trận (mặc dù nó có Đối xứng và Tích cực).


1
Đã cập nhật lên Maple 16 -> không có thuộc tính "Trực giao".
GertVdE

1

Trong Mathematica ít nhất bạn có thể kiểm tra các thuộc tính này cho các ma trận cụ thể. Ví dụ: ma trận Anhư bạn mô tả:

In[1]:= A = {{2.0,-1.0,0.0},{-1.0,2.0,-1.0},{0.0,-1.0,2.0}};
        {SymmetricMatrixQ[A],PositiveDefiniteMatrixQ[A]}
Out[2]= {True,True}

Đối với ma trận B:

In[3]:= B = {{0, -0.80, -0.60}, {0.80, -0.36, 0.48}, {0.60, 0.48, -0.64}};
        Transpose[B] == Inverse[B]
Out[4]= True

Sau đó:

In[5]:= c = B.A.Transpose[B];
        {SymmetricMatrixQ[c],PositiveDefiniteMatrixQ[c]}
Out[6]= {True,True}

Ma trận toán học và tài liệu đại số tuyến tính


7
Theo hiểu biết của tôi, các vị từ ở trên đang xác minh thuộc tính đó cho một ma trận đã cho, thay vì truyền bá một cách tượng trưng các thuộc tính này như Matt yêu cầu ở trên.
Matt Knepley

À đúng rồi. Xin lỗi vì điều đó. Tôi đã hiểu nhầm.
lynchs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.