constrainted regularization to solve ill conditioned problems?

I am trying to solve a matrix equation of the form Ax = b (solving for x with known A and b).
prior to trying regularisation I was using lsqlin (https://uk.mathworks.com/help/optim/ug/lsqlin.html) with the constraints lsqlin(C,d,[],[],[],[],lb,ub) where lb and ub are lower and upper bounds for the allowed values of my output vector. Some (but not all) of my vector values in x should not have negative values. My results are ill-conditioned. I was wondering if anyone is aware of any type of regularisation (e.g. Tikhonov) that has lb or ub constraints such that I can make some (but not all) of my values in x non-negative?
For context:
I have tried using Tikhonov regularisation (the example code given here: https://uk.mathworks.com/matlabcentral/fileexchange/130259-arls-automatically-regularized-least-squares?s_tid=prof_contriblnk - the response from 15 Mar 2024). The issue is that this code does not have any constraints.

 Accepted Answer

To implement Tikhonov regularisation in lsqlin,
C=...
d=...
lb=...
ub=...
beta=0.0001; %regularization weight
I=eye(numel(lb));
C=[C;beta*I];
d(height(C))=0;
x = lsqlin(C,d,[],[],[],[],lb,ub)

2 Comments

This scheme can also be modified to accomodate second order TV regularization,
I=diff(eye(numel(lb)));
Thanks that's super helpful, it looks like it's working! Just to future people looking at this, I think that d should be the vector you had before (without regularisation), with the zeros of height "I" (I=eye(numel(lb));) concatenated on the end.

Sign in to comment.

More Answers (0)

Categories

Find more on Mathematics in Help Center and File Exchange

Products

Release

R2022b

Asked:

on 2 May 2024

Edited:

on 2 May 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!