Proceso iterativo, nivel básico
Publicado por Almudena (9 intervenciones) el 21/02/2012 13:40:34
Hola!
Soy novatilla con esto del matlab y me surgen algunos problemas:
la cosa es sencilla, quiero ajustar una nube de puntos a una esfera y lo hago por mmcc:
x=datos(:,1); y=datos(:,2); z=datos(:,3); % Las matrices se conviernte en vectores columna
D=60;
xo=1009975.78;
yo=988478.44;
zo=99428.45;
% Ajuste de la esfera
r=sqrt((x-xo).^2+(y-yo).^2+(z-zo).^2); % Distancias radiales al centro
c_alfa =(x-xo)./r; % Cosenos directores
c_beta =(y-yo)./r;
c_gamma=(z-zo)./r;
d=r-D/2; % Distancias ortogonales
% Construccion de la matriz del sistema
A=[ c_alfa c_beta c_gamma 0.5*ones(size(d)) ];
u=A\d; % Resolución del sistema por MM.CC.
ro=[xo yo zo D];
ro=ro(1:3)'+u(1:3); % Nueva solución
D =D +u(4);
V=A*u-d; %residuos de las observaciones
sigma=sqrt(V'*V/(size(A,1)-size(A,2)));desviación típica, medida de dispersión
Y hasta aquí todo correcto pero, cuando llego aquí quiero decirle que me elimine las observaciones según un criterio y le digo:
pos_malos=find(-0.5<V<0.5) % buscame los que se salen de tolerancia
y ahora quiero que la matriz de diseño A, elimine esas observaciones que me han generado grandes residuos y que me repita el proceso pero con la matriz A pero sin esos valores
A(pos_malos,:)=[];
Y que me haga otra vez el ajuste....pero, no se si con un while o if...le doy vueltas y no resuelvo, si alguien es tan amable de echarme una mano.
Gracias
Un saludo
Soy novatilla con esto del matlab y me surgen algunos problemas:
la cosa es sencilla, quiero ajustar una nube de puntos a una esfera y lo hago por mmcc:
x=datos(:,1); y=datos(:,2); z=datos(:,3); % Las matrices se conviernte en vectores columna
D=60;
xo=1009975.78;
yo=988478.44;
zo=99428.45;
% Ajuste de la esfera
r=sqrt((x-xo).^2+(y-yo).^2+(z-zo).^2); % Distancias radiales al centro
c_alfa =(x-xo)./r; % Cosenos directores
c_beta =(y-yo)./r;
c_gamma=(z-zo)./r;
d=r-D/2; % Distancias ortogonales
% Construccion de la matriz del sistema
A=[ c_alfa c_beta c_gamma 0.5*ones(size(d)) ];
u=A\d; % Resolución del sistema por MM.CC.
ro=[xo yo zo D];
ro=ro(1:3)'+u(1:3); % Nueva solución
D =D +u(4);
V=A*u-d; %residuos de las observaciones
sigma=sqrt(V'*V/(size(A,1)-size(A,2)));desviación típica, medida de dispersión
Y hasta aquí todo correcto pero, cuando llego aquí quiero decirle que me elimine las observaciones según un criterio y le digo:
pos_malos=find(-0.5<V<0.5) % buscame los que se salen de tolerancia
y ahora quiero que la matriz de diseño A, elimine esas observaciones que me han generado grandes residuos y que me repita el proceso pero con la matriz A pero sin esos valores
A(pos_malos,:)=[];
Y que me haga otra vez el ajuste....pero, no se si con un while o if...le doy vueltas y no resuelvo, si alguien es tan amable de echarme una mano.
Gracias
Un saludo
Valora esta pregunta


0