Một cách khác để xem xét vấn đề này là xem xét các công cụ từ các vấn đề nghịch đảo rời rạc, đó là các vấn đề liên quan đến việc giải hoặc min | | A x - b | | 2 nơi A là rất ốm lạnh (tức là tỷ lệ giữa giá trị đặc biệt đầu tiên và cuối cùng σ 1 / σ n là lớn).Ax=bmin||Ax−b||2Aσ1/σn
Ở đây, chúng tôi có một số phương pháp để chọn tiêu chí dừng và đối với phương pháp lặp, tôi sẽ đề xuất tiêu chí đường cong L vì nó chỉ liên quan đến số lượng đã có sẵn (DISCLAIMER: Cố vấn của tôi đã tiên phong cho phương pháp này, vì vậy tôi chắc chắn thiên về phương pháp này nó). Tôi đã sử dụng điều này với thành công trong một phương pháp lặp.
Ý tưởng là theo dõi định mức dư và định mức giải pháp η k = | | x k | | 2 , trong đó x k là lần lặp thứ k . Khi bạn lặp lại, điều này bắt đầu vẽ hình dạng của L trong một biểu đồ loglog (rho, eta), và điểm ở góc của L là lựa chọn tối ưu.ρk=||Axk−b||2ηk=||xk||2xkk
Điều này cho phép bạn thực hiện một tiêu chí mà bạn để mắt đến khi bạn đã vượt qua góc (tức là nhìn vào độ dốc của ), sau đó chọn lặp đi lặp lại ở góc.(ρk,ηk)
Con đường tôi đã làm nó liên quan đến lưu trữ 20 lặp cuối cùng, và nếu gradient là lớn hơn so với một số ngưỡng 20 lần lặp liên tiếp, tôi biết rằng tôi là trên một phần thẳng đứng của đường cong và rằng tôi đã vượt qua góc. Sau đó, tôi lấy lần lặp đầu tiên trong mảng của mình (tức là lần lặp 20 lần trước) làm giải pháp của tôi.abs(log(ηk)−log(ηk−1)log(ρk)−log(ρk−1))
Ngoài ra còn có các phương pháp chi tiết hơn để tìm góc, và chúng hoạt động tốt hơn nhưng yêu cầu lưu trữ một số lượng đáng kể các lần lặp. Chơi xung quanh với nó một chút. Nếu bạn đang ở trong MATLAB, bạn có thể sử dụng Công cụ chính quy hóa hộp công cụ, thực hiện một số điều này (cụ thể là chức năng "góc" được áp dụng).
Lưu ý rằng phương pháp này đặc biệt phù hợp với các vấn đề quy mô lớn, vì thời gian tính toán thêm có liên quan là rất nhỏ.