Matlab - Proceso iterativo, nivel básico

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Proceso iterativo, nivel básico

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 21/02/2012 18:05:34
Hola Almudena.
Al parecer quieres algo asi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
clear all
datos=4*rand(10,3);
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:
figure(gcf)
x=[0 length(V) length(V) 0 0 ];
y=[-0.5 -0.5 0.5 0.5 -0.5];
plot(V,'*')
hold on
plot(x,y,'r')
hold off
axis([0 length(V) min(V) max(V)])
grid
[pos_malos,repitencia]=find(-0.5<V & V<0.5); % buscame los que se salen de tolerancia
 
A(pos_malos,:)=[]



Saludos.
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
"Detalladar sus preguntas, para recibir respuestas acertadas"
[email protected], [email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Proceso iterativo, nivel básico

Publicado por Almudena (9 intervenciones) el 22/02/2012 10:43:53
Si...creo que si, que es lo que buscaba,

Muchas gracias!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar