es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo codificar manualmente la regresión de norma 1 como una función de matlab, utilizando el siguiente algoritmo.

No estoy segura de si lo que he hecho hasta ahora es correcto, y necesito ayuda con el paso iterativo ya que no entiendo lo que está sucediendo en el algoritmo. Aquí está mi código. La ayuda para terminarlo sería muy apreciada. Gracias.

“`function xopt = fuera(A, b)
%UNRESUMIDO2 Resumen de esta función va aquí
% Una explicación detallada va aquí
b</em>vect = b';
m = tamaño(A,1);
n = tamaño(1,A);
set<em>B = 1:n;
set</em>B<em>Comp = n+1:m;
M = inv(A(set</em>B, :));
is<em>opt = 0;
x</em>temp = M<em>b_vect(set_B);
h = A</em>x<em>temp – b</em>vect;
y<em>vect = zeros(m, 1);
y</em>vect(set<em>B</em>Comp) = sign(h(set<em>B</em>Comp));
y<em>vect(set</em>B) = -inv(A(set<em>B, :))<em>(A(set</em>B<em>Comp, :))'</em>y</em>vect(set<em>B</em>Comp);
abs<em>y</em>B = abs(y<em>vect(set</em>B));
if all(abs<em>y</em>B <= 1)
x<em>opt = x</em>temp;

else
all<em>index</em>y<em>vect</em>more<em>than</em>1 = find(abs(y<em>vect) >= 1);
set</em>B<em>index</em>y<em>vect</em>more<em>than</em>1 = intersect(set<em>B, all</em>index<em>y</em>vect<em>more</em>than<em>1);
s = set</em>B<em>index</em>y<em>vect</em>more<em>than</em>1(1);
y<em>s = y(s)
t</em>vect = zeros(m, 1);
temp = inv(A(set<em>B,:));
t</em>vect(set<em>B</em>Comp) = -(sign(y<em>s))<em>(y(set</em>B<em>Comp)).</em>(A(set</em>B_Comp, :)*temp(:, s));

cur<em>min = h(set</em>B<em>Comp(1))/t</em>vect(set<em>B</em>Comp(1)) + 1;
cur<em>r = set</em>B<em>Comp(1);
for j = set</em>B<em>Comp
h</em>j = h(j);
t<em>j = t</em>vect(j);
temp1 = abs(h<em>j)/t</em>j;
if (temp1 < cur<em>min) && (temp1 > 0)
cur</em>min = temp1;
cur<em>r = j;
end
end
r = cur</em>r;
set<em>B</em>new = union(setdiff(set<em>B, s), r);
set</em>B<em>Comp</em>new = setdiff(1:m,set<em>B</em>new);
x<em>new = inv(A(set</em>B<em>new, :))*b</em>vect(set<em>B</em>new);
end
x<em>opt = x</em>temp;
end“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Es difícil proporcionar ayuda con el paso iterativo sin saber a qué algoritmo se refiere.

    No obstante, al observar su código, hay un error en la línea donde se define la variable n. Debería ser n = size(A, 2); ya que quiere el número de columnas de la matriz A.

    Además, en el bloque else, calcula x_new pero no lo utiliza en la asignación final de x_opt. En su lugar, asigna x_temp a x_opt de nuevo. Puede que desee cambiar esta línea a x_opt = x_new;.

    Si proporciona más información sobre el algoritmo que está intentando implementar, es posible que podamos ofrecer ayuda más específica con el paso iterativo.

Comments are closed.