Linprog optimisation with slack variable. How do I formulate the matices?

조회 수: 6 (최근 30일)
I am trying to do a basic linear fitting optimisation, but am not getting the results that I am expecting. I have generated data for x and y - x=linspace(0,1,50) and y = 4x-1. And need to use a slack variable.
My optimisation problem then becomes
min(a,b,s) s subject to -s <= a*x(i)+b-y(i) <= s
The code I am using to try and get a = 4 and b= -1 is:
% a b s
f = [0 ;0 ;1];
A1 = [ J ones(N,1)];
A2 = [-J ones(N,1)];
A = [A1 ;A2];
b1 = y;
b2 = -y;
b = [b1 ;b2];
[a b s] = linprog(f,A,b);
J has been defined as [x ones(50,1)]
Can anybody help me please?
Thanks in advance.

채택된 답변

Torsten
Torsten 2015년 7월 8일
A1 = [x,ones(N,1),-ones(N,1)];
A2 = [-x,-ones(N,1),-ones(N,1)];
A = [A1;A2];
b = [y;-y];
f = [0;0;1];
linprog(f,A,b)
Best wishes
Torsten.
  댓글 수: 4
Manie Conradie
Manie Conradie 2015년 7월 8일
편집: Manie Conradie 2015년 7월 8일
Managed to solve the problem. Although I cannot say what the problem was.
As you mentioned it is indeed the L-inf norm. But what boggles me, is where is the square of the error calculated in this implementation?
I am also doing one for the L-1 norm, and again I don't see where I should implement the absolute value part of the definition. Or is this the -s<f<s part of it?
Could you perhaps explain this to me please?
Thanks very much.
Manie
Manie Conradie
Manie Conradie 2015년 7월 8일
Sorry, mixing up the L-2 norm and the L-inf norm.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Torsten
Torsten 2015년 7월 8일
l_1-norm:
The problem can be formulated as
min: sum_i s_i
|a*x(i)+b-y(i)| <= s_i
or equivalently
min: sum_i s_i
-s_i <= a*x(i)+b-y(i) <= s_i
l_infinity norm:
The problem can be formulated as
min: s
|a*x(i)+b-y(i)| <= s
or equivalently
min: s
-s <= a*x(i)+b-y(i) <= s
Best wishes
Torsten.

카테고리

Help CenterFile Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by