Solve least square error optimization

Dear all,
I've got the following optimization problem:
D1 = F1 (d1), D2 = F2(d2), D3 = F3(d3) are seperate functions for three different measurements
d1=ds1*x; d2=ds2*x; d3=ds3*x; ds123 is the sample measurement, and the x is the correction of the error.
To find the optimal correction value x, the following should be minimized:
min( (D1-D2)^2 + (D2-D3)^2 + (D3-D1)^2 , x)
This might be done using an optimization routine but becomes very slow if the number of measurements increases (in case of an image).
Is there a straight forward way to perfom, which is considerably faster?
many thanks in advance.
all the best,
Kees

5 Comments

Which functions have you tried that you consider to be slow? What optional inputs have you tried that may constrain the problem?
I use fmincon. It takes 0.07s, but an image of 800 x 1000 will take 14h.
Thus a direct way to get at least a first order approximation is sufficient.
I know that it can be calculated by the derivative == 0:
but how to find x?
It's not fmincon that is slow, it is your coding of the objective function. You should show that so that we can recommend how to optimize its execution time. Also, please clarify the dimension of the various quantities involved. Is x a scalar? You have only a single unknown? Similarly, are d1,2,3 array-valued or scalar-valued?
Thanks for considering my question.
This is basically my code:
function Main(ImgData)
% FuncModel and ParameterSet are known variables
for d = 1:3
F{d} = cfit(FuncModel, ParameterSet{d});
end;
x = ones(size(ImgData, 1),size(ImgData, 2));
x0 = 1;
for n1 = 1:size(ImgData, 1)
for n2 = 1:size(ImgData, 2)
[x(n1,n2),fval,exitflag,output] = fmincon(@(x)evalfnc(x, F,ImgData(n1,n2)), x0, [],[],[],[], 0.5, 1.5, []);
end;
end;
function v = evalfnc(x, F, ImgPixel)
for d=1:3
v(d) = F{d}(x*ImgPixel(d));
end;
v = (v(1)-v(2)).^2 + (v(2)-v(3)).^2 + (v(3)-v(1)).^2;
Indeed "x" is a scalar value, d1,2,3 are scalar values per measurement but stored as an array (three channel image).
Any chance you could attach a mat file with all the variables needed to run the code? It's just a lot faster for us mortals if we can step through the code rather than imagining it.

Sign in to comment.

Answers (0)

Asked:

on 2 Dec 2019

Commented:

on 3 Dec 2019

Community Treasure Hunt

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

Start Hunting!