Bối cảnh toán học
Đặt A là ma trận N theo N gồm các số thực, ba vectơ của N số thực và vectơ xa N không biết số thực. Một phương trình ma trận là Ax = b.
Phương pháp của Jacobi như sau: phân tách A = D + R, trong đó D là ma trận của các đường chéo và R là các mục còn lại.
nếu bạn thực hiện một giải pháp đoán ban đầu x0, một giải pháp cải tiến là x1 = nghịch đảo (D) * (b - Rx) trong đó tất cả các phép nhân là phép nhân vectơ ma trận và nghịch đảo (D) là nghịch đảo ma trận.
Thông số kỹ thuật
- Đầu vào : Chương trình hoàn chỉnh của bạn sẽ chấp nhận làm đầu vào cho dữ liệu sau: ma trận A, vectơ b, dự đoán ban đầu x0 và số 'lỗi' e.
- Đầu ra : Chương trình phải xuất ra số lần lặp tối thiểu sao cho giải pháp mới nhất khác với giải pháp thực sự, nhiều nhất là e. Điều này có nghĩa là mỗi thành phần của vectơ ở cường độ tuyệt đối khác nhau nhiều nhất là e. Bạn phải sử dụng phương pháp Jacobi cho các lần lặp.
Làm thế nào dữ liệu được nhập là lựa chọn của bạn ; nó có thể là cú pháp của riêng bạn trên một dòng lệnh, bạn có thể lấy đầu vào từ một tệp, bất cứ điều gì bạn chọn.
Làm thế nào dữ liệu được xuất ra là lựa chọn của bạn ; nó có thể được ghi vào một tệp, được hiển thị trong dòng lệnh, được viết dưới dạng nghệ thuật ASCII, bất cứ thứ gì, miễn là nó có thể đọc được bởi con người.
Biết thêm chi tiết
Bạn không được đưa ra giải pháp thực sự: cách bạn tính toán giải pháp thực sự hoàn toàn phụ thuộc vào bạn. Bạn có thể giải quyết nó theo quy tắc của Cramer chẳng hạn, hoặc tính toán nghịch đảo trực tiếp. Điều quan trọng là bạn có một giải pháp thực sự để có thể so sánh với các lần lặp.
Chính xác là một vấn đề; một số "giải pháp chính xác" của mọi người để so sánh có thể khác nhau. Đối với mục đích của mã golf này, giải pháp chính xác phải đúng đến 10 chữ số thập phân.
Để hoàn toàn rõ ràng, nếu thậm chí một thành phần của giải pháp lặp hiện tại của bạn vượt quá thành phần tương ứng của nó trong giải pháp thực sự bởi e, thì bạn cần tiếp tục lặp lại.
Giới hạn trên đối với N thay đổi dựa trên phần cứng bạn đang sử dụng và thời gian bạn sẵn sàng dành để chạy chương trình. Đối với mục đích của mã golf này, giả sử tối đa N = 50.
Điều kiện tiên quyết
Khi chương trình của bạn được gọi, bạn có thể tự do cho rằng mọi thứ sau đây luôn được giữ:
- N> 1 và N <51, tức là bạn sẽ không bao giờ được đưa ra một phương trình vô hướng, luôn luôn là một phương trình ma trận.
- Tất cả các đầu vào là trên lĩnh vực của số thực, và sẽ không bao giờ phức tạp.
- Ma trận A luôn luôn sao cho phương thức hội tụ đúng với giải pháp thực, sao cho bạn luôn có thể tìm thấy một số lần lặp để giảm thiểu lỗi (như được định nghĩa ở trên) bên dưới hoặc bằng e.
- A không bao giờ là ma trận không hoặc ma trận danh tính, tức là có một giải pháp.
Các trường hợp thử nghiệm
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
Giải pháp thực sự là (0,586, 1.138). Lặp lại đầu tiên cho x1 = (5/9, 1), khác nhau hơn 0,04 so với giải pháp thực sự, bởi ít nhất một thành phần. Lấy một lần lặp khác mà chúng ta thấy, x2 = (0,555, 1.148) khác nhau ít hơn 0,04 so với (0,586, 1.138). Do đó, đầu ra là
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
Trong trường hợp này, giải pháp thực sự là (2.2, -0.8) và dự đoán ban đầu x0 đã có lỗi nhỏ hơn e = 1.0, do đó chúng tôi xuất 0. Đó là, bất cứ khi nào bạn không cần thực hiện phép lặp, bạn chỉ cần xuất ra
0
Đánh giá đệ trình
Đây là mã golf, với tất cả các sơ hở tiêu chuẩn không được phép. Chương trình hoàn thành chính xác ngắn nhất (hoặc hàm), tức là số byte thấp nhất sẽ thắng. Không khuyến khích sử dụng những thứ như Mathematica bao gồm rất nhiều bước cần thiết vào một chức năng, nhưng sử dụng bất kỳ ngôn ngữ nào bạn muốn.