function [ObjV]=objfuncGA(x,Xobs,Yobs,Zobs,Uxoss,Uyoss,Uzoss,ForwardModel,ni) % You can enter the objective function SourceType=ForwardModel(1); U_obs=[Uxoss, Uyoss, Uzoss]; % row vector of observed values U_obs=U_obs'; % column vector of observed values switch SourceType case 1 % sphere Xc=x(1); Yc=x(2); Zc=x(3); DeltaV=1; % least squares [Ux_calc,Uy_calc,Uz_calc]=deformation_sphere(Xobs,Yobs,Zobs,Xc,Yc,Zc,DeltaV,ni); % row vectors of computed deformation case 2 % rectangular prism SourceRotation=ForwardModel(2); Xc=x(1); Yc=x(2); depth=x(3); l_a=x(4); l_b=x(5); l_c=x(6); if SourceRotation==1 % yes rotation alpha=x(7); delta=x(8); gamma=x(9); else alpha=0; delta=0; gamma=0; end eps_0=1; % least squares [Ux_calc,Uy_calc,Uz_calc]=deformation_prism(Xobs,Yobs,Zobs,Xc,Yc,depth,l_a,l_b,l_c,alpha,delta,gamma,eps_0,ni); % row vectors of computed deformation case 3 % prolate or oblate ellipsoid SourceRotation=ForwardModel(2); Xc=x(1); Yc=x(2); depth=x(3); a=x(4); b=x(5); if SourceRotation==1 % yes rotation alpha=x(6); delta=x(7); gamma=x(8); else alpha=0; delta=0; gamma=0; end eps_0=1; % least squares [Ux_calc,Uy_calc,Uz_calc]=deformation_prolate_oblate_ellipsoid(Xobs,Yobs,Zobs,Xc,Yc,depth,a,b,alpha,delta,gamma,eps_0,ni); % row vectors of computed deformation case 4 % triaxial ellipsoid SourceRotation=ForwardModel(2); Xc=x(1); Yc=x(2); depth=x(3); a=x(4); b=x(5); c=x(6); if SourceRotation==1 % yes rotation alpha=x(7); delta=x(8); gamma=x(9); else alpha=0; delta=0; gamma=0; end eps_0=1; % least squares [Ux_calc,Uy_calc,Uz_calc]=deformation_triaxial_ellipsoid(Xobs,Yobs,Zobs,Xc,Yc,depth,a,b,c,alpha,delta,gamma,eps_0,ni); % row vectors of computed deformation case 5 % cylinder Xc=x(1); Yc=x(2); rho_radial_obs=sqrt((Xc-Xobs).^2+(Yc-Yobs).^2); % radial distance between source and observation points depth=x(3); R=x(4); h=x(5); eps_0=1; % least squares [Ur_calc,Uz_calc]=deformation_cylinder(rho_radial_obs,Zobs,depth,R,h,eps_0,ni); % row vectors of computed deformation % x and y components of radial deformation Ux_calc=Ur_calc.*(Xobs-Xc)./rho_radial_obs; % row vector Uy_calc=Ur_calc.*(Yobs-Yc)./rho_radial_obs; % row vector end U_calc=[Ux_calc,Uy_calc,Uz_calc]; % row vector of computed deformations U_calc=U_calc'; % column vector of computed deformations param=inv(U_calc'*U_calc)*U_calc'*U_obs; % parameter of the least square Ux=Ux_calc*param; % row vector Uy=Uy_calc*param; % row vector Uz=Uz_calc*param; % row vector % objective function ObjV = sqrt( 1/(length(Uxoss) + length(Uyoss) + length(Uzoss)) * (sum((Uxoss-Ux).^2) + sum((Uyoss-Uy).^2) + sum((Uzoss-Uz).^2)) );