2010-02-09 28 views
8

Giả sử tôi có một danh sách các ma trận lưu trong biến G và áp dụng các hoạt động sau đây:Mathematica 7 có hỗ trợ đánh giá lười biếng không?

top[g_] = Minors[g] 
Diagonal[top /@ G] 

Minors trả về một ma trận trong đó mỗi phần tử là yếu tố quyết định với (i, j) hàng/col xóa, và Diagonal trả về danh sách các phần tử đường chéo của ma trận.

Câu hỏi của tôi là đánh giá các lệnh này - rõ ràng là tôi không muốn tất cả các mục được đánh giá. Là Mathematica lười biếng theo nghĩa là Diagonal được phân tích cú pháp đầu tiên mà chỉ trích xuất các yếu tố cần thiết từ trẻ vị thành niên hoặc là ma trận nhỏ được xây dựng và sau đó các yếu tố đường chéo của nó được kéo ra?

Đây là câu hỏi chung để đánh giá lười biếng, tuy nhiên là mới đối với Mathematica, tôi sẽ đánh giá cao bất kỳ mẹo nào về cách cải thiện cú pháp cho vấn đề cụ thể.

+0

G là ma trận hoặc danh sách ma trận? Bạn có ý định Bản đồ hàng đầu trên G không? và sau đó lấy Diagonal của một danh sách các ma trận? – Davorak

Trả lời

3

Đã muộn nên chỉ có một câu trả lời ngắn: điều tra Hold[] và người thân của nó. Với họ, bạn có thể thực hiện các chức năng đánh giá lười biếng. Hầu hết các hàm Mathematica nội tại không phải là lười, một số ít. Nói chung, với tư cách là người mới bắt đầu, bạn nên tránh thay đổi hành vi của các hàm nội tại của Mathematica, mặc dù nó rất thú vị để làm như vậy và có thể dễ dàng làm cho toàn bộ hệ thống không sử dụng được.

+1

Khi bạn có cơ hội, bạn có thể chỉnh sửa câu hỏi của bạn để cung cấp một ví dụ (có lẽ là một ví dụ cụ thể như đã nêu) ?. Trang web Mathematica, trong khi chứa đầy các ví dụ, dường như không làm bất cứ điều gì thực tế. – Hooked

1

Không có môn toán học nào không phải là nói chung.

top/@G 

Sẽ sản xuất ma trận Diagonal sẽ hoạt động. Vì trẻ vị thành niên không hoạt động trên các yếu tố riêng lẻ của ma trận, những gì bạn đang yêu cầu không phải là, từ kiến ​​thức của tôi, chỉ cần đánh giá lười biếng.

Tôi nghĩ rằng tôi có một giải pháp cho bạn.

Clear[f]; 
Diagonal[Minors[G,Length[G],f]]/.f->Det 

Giải pháp này sẽ chỉ tạo ra các phần nhỏ của các yếu tố đường chéo được tóm tắt bởi Diagonal. Nhưng tôi chỉ chuyển tính toán thừa sang vấn đề sử dụng bộ nhớ dư thừa. Kể từ khi submatrix của các yếu tố tắt đường chéo vẫn chỉ được sản xuất để được vứt bỏ. Tôi sẽ đăng lại nếu tôi nghĩ ra cách để ngăn chặn điều đó.

3

Bạn có thể giải quyết vấn đề này bằng việc xây dựng danh sách các trẻ vị thành niên chéo bởi bản thân và sau đó áp dụng Det, đối với một ma trận M:

Map[Det,Drop[Transpose[Drop[M,{#}]],{#}]& /@ Range[1,Dimensions[M][[1]]]] 

Đây là một chút của một cludge nhưng nó là nhanh hơn khoảng 50 lần hơn là sử dụng Mathematica được xây dựng trong Minors và chọn chỉ các phần tử đường chéo (được kiểm tra trên các ma trận ngẫu nhiên 100x100).

+0

(+1) Đối với các giải pháp thực tế cho vấn đề cụ thể (cảm ơn bạn!). Tôi đang chọn một câu trả lời khác vì câu hỏi là về đánh giá lười biếng trong Mathematica. – Hooked

+0

Không có vấn đề :-). – Timo

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