2009-12-02 12 views
5

Đối với một bài tập về nhà trong đại số tuyến tính, tôi đã giải quyết phương trình sau đây sử dụng \ điều hành của MATLAB (đó là cách khuyến khích làm việc đó):Làm cách nào để sử dụng xấp xỉ bình phương tối thiểu trong MATLAB?

 
A = [0.2 0.25; 0.4 0.5; 0.4 0.25]; 
y = [0.9 1.7 1.2]'; 
x = A \ y 

trong đó sản xuất các câu trả lời sau đây:

 
x = 
1.7000 
2.0800 

Đối với phần tiếp theo của nhiệm vụ, tôi phải giải phương trình tương tự bằng cách sử dụng xấp xỉ bình phương nhỏ nhất (và sau đó so sánh nó với giá trị trước để xem độ chính xác xấp xỉ).

Làm cách nào để tìm cách thực hiện điều đó trong MATLAB?

Công việc trước đây: Tôi đã tìm thấy hàm lsqlin, có vẻ như có khả năng giải các phương trình thuộc loại trên, nhưng tôi không hiểu đối số nào cung cấp nó cũng không theo thứ tự nào.

Trả lời

6

mldivide, ("\") cũng thực sự thực hiện điều đó. Theo documentation:

Nếu A là một m-by-n ma trận với m ~ = n và B là một vector cột với các thành phần m, hoặc một ma trận với một số cột như vậy, sau đó X = A \ B là giải pháp trong ý nghĩa bình phương tối thiểu cho hệ phương trình dưới hoặc quá xác định của phương trình AX = B. Nói cách khác, X giảm thiểu chỉ tiêu (A * X - B), chiều dài của vector AX - B. Xếp hạng k của A được xác định từ phân tách QR với xoay vòng cột (xem Thuật toán để biết chi tiết). Giải pháp tính toán X có tối đa k phần tử không phải trên mỗi cột. Nếu k < n, điều này thường không phải là giải pháp tương tự như x = pinv (A) * B, trả về một giải pháp bình phương nhỏ nhất.

Vì vậy, thực sự, những gì bạn đã làm trong bài tập đầu tiên là giải phương trình bằng LSE.

+0

Tất nhiên, việc chuyển nhượng thực tế sẽ ít phức tạp hơn những gì chúng tôi mặc dù. Bạn nói đúng rằng toán tử '\' thực sự liên quan đến một phép xấp xỉ bình phương nhỏ nhất. Chúng tôi đã nhận được câu trả lời chính xác ngay bây giờ, vì vậy cảm ơn! – Jakob

+0

Đó là nghĩa vụ phải được "\ nhà điều hành" nhưng có vẻ như các mã định dạng backticks nuốt toàn bộ dấu gạch chéo ngược (hoặc có lẽ tôi chỉ bỏ lỡ một phím tắt). – Jakob

2

Bài tập của bạn có liên quan đến việc mã hóa rõ ràng một phép tính gần đúng bình phương nhỏ nhất hay chỉ sử dụng một hàm khác có sẵn trong MATLAB? Nếu bạn có thể sử dụng một chức năng khác, một tùy chọn là LSQR:

x = lsqr(A,y);