├── LICENSE ├── README.md ├── core ├── .DS_Store ├── F.m ├── diags.m ├── getA.m ├── getG.m ├── getL.m ├── getP.m ├── misfit.m └── vec.m ├── example ├── camembert_reflection.m ├── camembert_transmission.m ├── deblending.m ├── marm.m ├── marm_20.dat ├── marm_50.dat └── marm_data.m ├── operators ├── opDFTR.m ├── opExtension.m ├── opLInterp1D.m ├── opLInterp2D.m ├── opSmooth.m ├── opSpline1D.m └── opSpline2D.m ├── optimization ├── BBiter.m └── SDiter.m └── startup.m /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 tleeuwen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | SimpleFWI 2 | ========= 3 | 4 | This code provides the basic building blocks to test optimization algorithms on seismic inverse problems. 5 | The canonical seismic waveform inversion problem is given by 6 | 7 | $$\min_{m} \sum_{i} \frac{1}{2}||P^TA(m)^{-1}q_i - d_i||_2^2 + \frac{\alpha}{2}||Lm||_2^2,$$ 8 | 9 | where $A(m)$ is the discretized Helmholtz operator $\omega^2 m + \nabla^2$ with absorbing boundary conditions, 10 | $P$ is the sampling operator, $q_i$ are the source vectors, $d_i$ are the observed data and $L$ is the discretized 11 | $\nabla$. 12 | 13 | The main function is *misfit.m*, which takes as input the medium parameters $m$ and the data $d_i$ (and definitions of $P$, $q_i$, $\omega$ etc.) and returns the misfit value, its gradient and a function handle to compute the action of the Gauss-Newton hessian. 14 | 15 | For an example, see */examples*, which uses a simple BB iteration to solve the optimization problem. 16 | To run these, you need to install the SPOT library: https://github.com/mpf/spot 17 | 18 | Feel free to contact me with any questions, suggestions, etc. 19 | 20 | Tristan van Leeuwen - T.vanLeeuwen@uu.nl 21 | 22 | -------------------------------------------------------------------------------- /core/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TristanvanLeeuwen/SimpleFWI/6990617ba9746b0a4cabf4e3d6c5916562df4784/core/.DS_Store -------------------------------------------------------------------------------- /core/F.m: -------------------------------------------------------------------------------- 1 | function [D,J] = F(m,Q,model) 2 | % Forward operator 3 | % 4 | % D = P^TA^{-1}(m)Q 5 | % 6 | % where P, Q encode the receiver and source locations and L is the first-order FD matrix 7 | % 8 | % use: 9 | % [D,J] = F(m,model); 10 | % 11 | % input: 12 | % m - squared-slownes [s^2/km^2] 13 | % Q - source weights, matrix of size ns x ns', where ns is the size of 14 | % the source grid (model.zs) and ns' determines the effective number of 15 | % sources. 16 | % model.h - gridspacing in each direction d = [d1, d2]; 17 | % model.n - number of gridpoints in each direction n = [n1, n2] 18 | % model.f - frequency [Hz]. 19 | % model.{zr,xr} - {z,x} locations of receivers [m] (must coincide with gridpoints) 20 | % model.{zs,xs} - {z,x} locations of sources [m] (must coincide with gridpoints) 21 | % 22 | % 23 | % output: 24 | % D - data matrix 25 | % J - Jacobian as Spot operator 26 | 27 | % size 28 | nr = length(model.zr); 29 | ns = length(model.zs); 30 | nf = length(model.f); 31 | nx = prod(model.n); 32 | 33 | % sampling operators 34 | Pr = getP(model.h,model.n,model.zr,model.xr); 35 | Ps = getP(model.h,model.n,model.zs,model.xs); 36 | 37 | % solve 38 | U = zeros(nx,ns,nf); 39 | D = zeros(nr,ns,nf); 40 | for k = 1:nf 41 | Ak = getA(model.f(k),m,model.h,model.n); 42 | U(:,:,k) = Ak\full(Ps'*Q); 43 | D(:,:,k) = model.w(k)*Pr*U(:,:,k); 44 | end 45 | D = D(:); 46 | % Jacobian 47 | J = opFunction(nr*ns*nf, nx, @(x,flag)Jmv(x,m,U,model,flag)); 48 | end 49 | 50 | 51 | function y = Jmv(x,m,U,model,flag) 52 | % size 53 | nr = length(model.zr); 54 | ns = length(model.zs); 55 | nf = length(model.f); 56 | nx = prod(model.n); 57 | 58 | %% get matrices 59 | Pr = getP(model.h,model.n,model.zr,model.xr); 60 | 61 | %% compute mat-vec 62 | if flag == 1 63 | y = zeros(nr,ns,nf); 64 | for k = 1:nf 65 | Rk = zeros(nx,ns); 66 | Ak = getA(model.f(k),m,model.h,model.n); 67 | Gk = @(u)getG(model.f(k),m,u,model.h,model.n); 68 | for l = 1:ns 69 | Rk(:,l) = -Gk(U(:,l,k))*x; 70 | end 71 | y(:,:,k) = model.w(k)*Pr*(Ak\Rk); 72 | end 73 | y = y(:); 74 | else 75 | y = zeros(nx,1); 76 | x = reshape(x,[nr,ns,nf]); 77 | for k = 1:nf 78 | Ak = getA(model.f(k),m,model.h,model.n); 79 | Gk = @(u)getG(model.f(k),m,u,model.h,model.n); 80 | Rk = Ak'\(conj(model.w(k))*(Pr'*x(:,:,k))); 81 | for l = 1:size(U,2) 82 | y = y - Gk(U(:,l,k))'*Rk(:,l); 83 | end 84 | end 85 | end 86 | 87 | end 88 | -------------------------------------------------------------------------------- /core/diags.m: -------------------------------------------------------------------------------- 1 | function A = diags(a) 2 | % construct sparse diagonal matrix 3 | % 4 | % use: 5 | % A = diags(A) 6 | % 7 | % input: 8 | % a - vector of length n 9 | % 10 | % output 11 | % A - nxn sparse matrix with a on the diagonal 12 | 13 | %% 14 | n = length(a(:)); 15 | A = spdiags(a(:),0,n,n); -------------------------------------------------------------------------------- /core/getA.m: -------------------------------------------------------------------------------- 1 | function A = getA(f,m,h,n) 2 | % Define 2D Helmholtz matrix with absorbing boundary conditions 3 | % 4 | % use: 5 | % A = getA(f,m,h,n) 6 | % 7 | % input: 8 | % f - frequency [Hz] 9 | % m - squared-slownes [s^2/km^2] 10 | % h - gridspacing in each direction d = [d1, d2]; 11 | % n - number of gridpoints in each direction n = [n1, n2] 12 | % 13 | % output: 14 | % A - sparse matrix 15 | % 16 | 17 | %% 18 | omega = 1e-3*2*pi*f; 19 | N = prod(n); 20 | 21 | D1 = spdiags(ones(n(1),1)*[-1 1]/h(1),[0:1],n(1)-1,n(1)); 22 | D2 = spdiags(ones(n(2),1)*[-1 1]/h(2),[0:1],n(2)-1,n(2)); 23 | L = -kron(speye(n(2)),D1'*D1) - kron(D2'*D2,speye(n(1))); 24 | 25 | a = ones(n); a(:,[1 end]) = .5; a([1 end],:) = .5; a = a(:); 26 | 27 | A = omega^2*diags(a.*m) + (2i*omega/h(1))*diags((1-a).*sqrt(m)) + L; -------------------------------------------------------------------------------- /core/getG.m: -------------------------------------------------------------------------------- 1 | function G = getG(f,m,u,h,n) 2 | % Define Jacobian matrix G(m,u) = d(A(m)*u)/dm 3 | % 4 | % use: 5 | % G = getG(f,m,u,d,n) 6 | % 7 | % input: 8 | % f - frequency [Hz] 9 | % m - squared-slownes [s^2/km^2] 10 | % u - wavefield 11 | % h - gridspacing in each direction d = [d1, d2]; 12 | % n - number of gridpoints in each direction n = [n1, n2] 13 | % 14 | % output: 15 | % G - sparse matrix 16 | % 17 | 18 | %% 19 | omega = 2*pi*f; 20 | N = prod(n); 21 | 22 | % % 23 | % w = [0 ones(1,n(1)-2) 0]; 24 | % if n(2)>1 25 | % w = w(:)*[0 ones(1,n(2)-2) 0]; 26 | % end 27 | % w = w(:); 28 | % 29 | % G = omega^2*spdiags(1e-6*w.*u,0,N,N) + 1i*omega*spdiags(1e-3*(1-w).*u./(2*sqrt(m)),0,N,N); 30 | 31 | %% 32 | omega = 1e-3*2*pi*f; 33 | N = prod(n); 34 | 35 | a = ones(n); a(:,[1 end]) = .5; a([1 end],:) = .5; a = a(:); 36 | 37 | G = omega^2*diags(a.*u) + (2i*omega/h(1))*diags(.5*(1-a).*u./sqrt(m)); 38 | -------------------------------------------------------------------------------- /core/getL.m: -------------------------------------------------------------------------------- 1 | function L = getL(h,n) 2 | % Define 2D first-order FD matrix [Dx;Dy] 3 | % 4 | % use: 5 | % L = getL(h,n) 6 | % 7 | % input: 8 | % h,n - gridspacing and number of gridpoints 9 | % 10 | % output 11 | % L - sparse matrix 12 | 13 | D1 = spdiags(ones(n(1),1)*[-1 1]/h(1),[0:1],n(1)-1,n(1)); 14 | D2 = spdiags(ones(n(2),1)*[-1 1]/h(2),[0:1],n(2)-1,n(2)); 15 | 16 | L = [kron(speye(n(2)),D1); kron(D2,speye(n(1)))]; 17 | end -------------------------------------------------------------------------------- /core/getP.m: -------------------------------------------------------------------------------- 1 | function P = getP(h,n,zt,xt) 2 | % Define sampling operator 3 | % 4 | % use: 5 | % P = getP(h,n,zt,xt) 6 | % 7 | % input: 8 | % h,n - gridspacing and number of gridpoints 9 | % zt,xt - arrays defining sampling points (must coincide with grid) 10 | % 11 | % output 12 | % P - spot operator 13 | 14 | 15 | z = [0:n(1)-1]*h(1); 16 | x = [0:n(2)-1]*h(2); 17 | 18 | P = opLInterp2D(z(:), x(:), [zt(:), xt(:)]); -------------------------------------------------------------------------------- /core/misfit.m: -------------------------------------------------------------------------------- 1 | function [f,g,H] = misfit(m,Q,D,alpha,model) 2 | % Evaluate least-squares misfit 3 | % 4 | % 0.5||P^TA^{-1}(m)Q - D||_{F}^2 + 0.5\alpha||Lm||_2^2, 5 | % 6 | % where P, Q encode the receiver and source locations and L is the first-order FD matrix 7 | % 8 | % use: 9 | % [f,g,H] = misfit(m,Q,D,model) 10 | % 11 | % input: 12 | % m - squared-slownes [s^2/km^2] 13 | % Q - source weights (see F.m) 14 | % D - single-frequency data matrix 15 | % alpha - regularization parameter 16 | % model.h - gridspacing in each direction d = [d1, d2]; 17 | % model.n - number of gridpoints in each direction n = [n1, n2] 18 | % model.f - frequency [Hz]. 19 | % model.{zr,xr} - {z,x} locations of receivers [m] (must coincide with gridpoints) 20 | % model.{zs,xs} - {z,x} locations of sources [m] (must coincide with gridpoints) 21 | % 22 | % 23 | % output: 24 | % f - value of misfit 25 | % g - gradient (vector of size size(m)) 26 | % H - GN Hessian (Spot operator) 27 | 28 | 29 | %% get matrices 30 | m = m(:); 31 | L = getL(model.h,model.n); 32 | 33 | 34 | %% forward solve 35 | [Dp,Jp] = F(m,Q,model); 36 | 37 | %% compute f 38 | f = .5*norm(Dp - D)^2 + .5*alpha*norm(L*m)^2; 39 | 40 | %% compute g 41 | g = Jp'*(Dp - D) + alpha*(L'*L)*m; 42 | 43 | %% get H 44 | H = Jp'*Jp + alpha*opMatrix(L'*L); 45 | 46 | end 47 | -------------------------------------------------------------------------------- /core/vec.m: -------------------------------------------------------------------------------- 1 | function x = vec(x) 2 | x = x(:); 3 | end -------------------------------------------------------------------------------- /example/camembert_reflection.m: -------------------------------------------------------------------------------- 1 | %% setup 2 | 3 | % defined model 4 | dx = 10; 5 | v = 2 + 0.25*phantom([1, .5, .5, 0, 0, 0],1e3/dx + 1); 6 | 7 | % initial model 8 | v0 = @(z,x)2 + 0*z; 9 | 10 | % set frequency, do not set larger than min(1e3*v(:))/(7.5*dx) or smaller 11 | % than 0.5 12 | 13 | f = [5 10 15]; 14 | w = [.25, 1, .25]; 15 | 16 | % receivers 17 | xr = dx:2*dx:1e3-dx; 18 | zr = 2*dx*ones(1,length(xr)); 19 | 20 | % sources 21 | xs = dx:2*dx:1e3-dx; 22 | zs = dx*ones(1,length(xr)); 23 | 24 | % regularization parameter 25 | alpha = 0; 26 | 27 | %% observed data 28 | 29 | % grid 30 | n = size(v); 31 | h = dx*[1 1]; 32 | z = [0:n(1)-1]*h(1); 33 | x = [0:n(2)-1]*h(2); 34 | [zz,xx] = ndgrid(z,x); 35 | 36 | % parameters 37 | model.f = f; 38 | model.w = w; 39 | model.n = n; 40 | model.h = h; 41 | model.zr = zr; 42 | model.xr = xr; 43 | model.zs = zs; 44 | model.xs = xs; 45 | 46 | % model 47 | m = 1./v(:).^2; 48 | 49 | % source 50 | Q = eye(length(xs)); 51 | 52 | % data 53 | D = F(m,Q,model); 54 | 55 | %initial model 56 | m0 = vec(1./v0(zz,xx).^2); 57 | 58 | %% inversion 59 | % misfit 60 | fh = @(m)misfit(m,Q,D,alpha,model); 61 | 62 | % Simple SD iteration 63 | [mk,hist] = BBiter(fh,m0,1e-3,50); 64 | 65 | %% plot 66 | vk = reshape(real(1./sqrt(mk)),n); 67 | 68 | figure; 69 | imagesc(x,z,v,[min(v(:)) max(v(:))]);title('ground truth');axis equal tight 70 | 71 | figure; 72 | imagesc(x,z,v0(zz,xx),[min(v(:)) max(v(:))]);title('initial');axis equal tight 73 | 74 | figure; 75 | imagesc(x,z,vk,[min(v(:)) max(v(:))]);title('final');axis equal tight 76 | 77 | figure; 78 | semilogy(hist(:,1),hist(:,2)/hist(1,2),hist(:,1),hist(:,3)/hist(1,3));title('convergence history');legend('f','|g|'); -------------------------------------------------------------------------------- /example/camembert_transmission.m: -------------------------------------------------------------------------------- 1 | %% setup 2 | 3 | % computational domain 4 | dx = 20; 5 | L = [1000, 1000]; 6 | 7 | % defined model 8 | v = @(z,x) 2 + 0.25*((z-L(1)/2).^2 + (x-L(2)/2).^2 < (min(L)/4).^2); 9 | 10 | % initial model 11 | v0 = @(z,x)2 + 0*z; 12 | 13 | % set frequency, do not set larger than min(1e3*v(:))/(7.5*dx) or smaller 14 | % than 0.5 15 | 16 | f = [2 3 4]; 17 | w = [.25,1,.25]; 18 | 19 | % receivers 20 | nrec = 10; 21 | zr = linspace(.1*L(1), .9*L(1), nrec); 22 | xr = .1*L(2)*ones(1,nrec); 23 | 24 | % sources 25 | nsrc = 10; 26 | zs = linspace(.1*L(1), .9*L(1), nsrc); 27 | xs = .9*L(2)*ones(1,nsrc); 28 | 29 | % regularization parameter 30 | alpha = 0; 31 | 32 | %% observed data 33 | 34 | % grid 35 | n = L/dx + 1; 36 | h = dx*[1 1]; 37 | z = [0:n(1)-1]*h(1); 38 | x = [0:n(2)-1]*h(2); 39 | [zz,xx] = ndgrid(z,x); 40 | 41 | % parameters 42 | model.f = f; 43 | model.w = w; 44 | model.n = n; 45 | model.h = h; 46 | model.zr = zr; 47 | model.xr = xr; 48 | model.zs = zs; 49 | model.xs = xs; 50 | 51 | % model 52 | m = 1./v(zz(:),xx(:)).^2; 53 | 54 | % source 55 | Q = eye(length(xs)); 56 | 57 | % data 58 | D = F(m,Q,model); 59 | 60 | %initial model 61 | m0 = vec(1./v0(zz,xx).^2); 62 | 63 | %% inversion 64 | % misfit 65 | fh = @(m)misfit(m,Q,D,alpha,model); 66 | 67 | % Simple SD iteration 68 | [mk,hist] = SDiter(fh,m0,1e-3,20,1e-4); 69 | 70 | %% plot 71 | vk = reshape(real(1./sqrt(mk)),n); 72 | vt = reshape(real(1./sqrt(m)),n); 73 | 74 | figure; 75 | imagesc(x,z,vt,[min(vt(:)) max(vt(:))]);title('ground truth');axis equal tight 76 | 77 | figure; 78 | imagesc(x,z,v0(zz,xx),[min(vt(:)) max(vt(:))]);title('initial');axis equal tight 79 | 80 | figure; 81 | imagesc(x,z,vk,[min(vt(:)) max(vt(:))]);title('final');axis equal tight 82 | 83 | figure; 84 | semilogy(hist(:,1),hist(:,2)/hist(1,2),hist(:,1),hist(:,3)/hist(1,3));title('convergence history');legend('f','|g|'); -------------------------------------------------------------------------------- /example/deblending.m: -------------------------------------------------------------------------------- 1 | %% setup 2 | 3 | % computational domain 4 | dx = 50; 5 | L = [2000, 3000]; 6 | 7 | % define model 8 | v = @(z,x) 2 + 0.5*(z>500) + 0.5*(z + 100*cos(1e-2*x) > 800) + 0.5*(z - 0.1*x > 1500); 9 | 10 | % initial model 11 | v0 = @(z,x)2 + 1e-3*z; 12 | 13 | % set frequency, wavelet etc. 14 | t = 0:1e-3:2; 15 | nt = length(t); 16 | f = 0:1/t(end):.5/(t(2)-t(1)); 17 | f0 = 5; 18 | t0 = 0.1; 19 | wt = (1 - 2*(pi*f0*(t-t0)).^2).*exp(-(pi*f0*(t-t0)).^2); 20 | wf = (2/sqrt(pi)/f0).*(f/f0).^2.*exp(-(f/f0).^2); 21 | If = find(wf/max(wf)>1e-3); 22 | nf = length(If); 23 | 24 | % receivers 25 | nrec = 50; 26 | zr = .1*L(1)*ones(1,nrec); 27 | xr = linspace(.25*L(2),.75*L(2),nrec); 28 | 29 | 30 | % sources 31 | nsrc = 2; 32 | zs = .1*L(1)*ones(1,nsrc); 33 | xs = linspace(.4*L(2),.6*L(2),nsrc); 34 | 35 | % regularization parameter 36 | alpha = 0; 37 | 38 | %% observed data 39 | % grid 40 | n = L./dx + 1; 41 | h = dx*[1 1]; 42 | z = [0:n(1)-1]*h(1); 43 | x = [0:n(2)-1]*h(2); 44 | [zz,xx] = ndgrid(z,x); 45 | 46 | % parameters 47 | model.f = f(If); 48 | model.w = wf(If); 49 | model.n = n; 50 | model.h = h; 51 | model.zr = zr; 52 | model.xr = xr; 53 | model.zs = zs; 54 | model.xs = xs; 55 | 56 | % model 57 | m = 1./v(zz(:),xx(:)).^2; 58 | 59 | % data 60 | Q = eye(nsrc); 61 | 62 | D = F(m,Q,model); 63 | save('data.mat','D'); 64 | 65 | %load('data.mat') 66 | 67 | %% Blending 68 | nsim = 2; 69 | a = 1 + 2*rand(nsrc,nsim); 70 | tau = .1 + .2*rand(nsrc,nsim); 71 | 72 | B = @(f) Q*a.*exp(1i*2*pi*f*tau); 73 | 74 | D = reshape(D,nrec,nsrc,length(If)); 75 | Y = zeros(nrec,nsim,length(If)); 76 | for k = 1:length(If) 77 | Y(:,:,k) = D(:,:,k)*B(f(If(k))); 78 | end 79 | 80 | 81 | %% deblending 82 | Y = reshape(Y,nrec,nsim,length(If)); 83 | X = zeros(nrec, nsrc,length(If)); 84 | for k = 1:length(If) 85 | %X(:,:,k) = Y(:,:,k)*B(f(If(k)))'; 86 | X(:,:,k) = Y(:,:,k)*B(f(If(k)))'*inv(B(f(If(k)))*B(f(If(k)))'); 87 | end 88 | 89 | %% Fourier transform 90 | Fr = opDFTR(nt); 91 | Rf = opRestriction(length(f),If); 92 | 93 | D = reshape(D,nsrc*nrec,[]); 94 | Y = reshape(Y,nsim*nrec,[]); 95 | X = reshape(X,nsrc*nrec,[]); 96 | 97 | Dt = Fr'*Rf'*D'; 98 | Yt = Fr'*Rf'*Y'; 99 | Xt = Fr'*Rf'*X'; 100 | 101 | %% 102 | Is = [1,2]; 103 | Iss = [1,2]; 104 | Dt = reshape(Dt,nt,nrec,nsrc); 105 | Yt = reshape(Yt,nt,nrec,nsim); 106 | Xt = reshape(Xt,nt,nrec,nsrc); 107 | 108 | figure; 109 | imagesc(x,z,v(zz,xx));axis equal tight 110 | 111 | figure; 112 | Dt = reshape(Dt,nt,nrec,nsrc); 113 | for k = 1:length(Is) 114 | subplot(1,length(Is),k);imagesc(xr,t,Dt(:,:,Is(k)));colormap(gray) 115 | end 116 | 117 | figure; 118 | Yt = reshape(Yt,nt,nrec,nsim); 119 | for k = 1:length(Iss) 120 | subplot(1,length(Iss),k);imagesc(xr,t,Yt(:,:,Iss(k)));colormap(gray) 121 | end 122 | 123 | figure; 124 | Xt = reshape(Xt,nt,nrec,nsrc); 125 | for k = 1:length(Is) 126 | subplot(1,length(Is),k);imagesc(xr,t,Xt(:,:,Is(k)));colormap(gray) 127 | end 128 | %% -------------------------------------------------------------------------------- /example/marm.m: -------------------------------------------------------------------------------- 1 | %% setup 2 | 3 | % read model, dx = 20 or 50 4 | dx = 50; 5 | v = dlmread(['marm_' num2str(dx) '.dat']); 6 | 7 | % initial model 8 | v0 = @(zz,xx)v(1)+.7e-3*max(zz-350,0); 9 | 10 | % set frequency, do not set larger than min(1e3*v(:))/(7.5*dx) or smaller 11 | % than 0.5 12 | 13 | f = [1 2 3]; 14 | 15 | % receivers, xr = .1 - 10km, with 2*dx spacing, zr = 2*dx 16 | xr = 100:2*dx:10000; 17 | zr = 2*dx*ones(1,length(xr)); 18 | 19 | % sources, xr = .1 - 10km, with 4*dx spacing, zr = 2*dx 20 | xs = 100:4*dx:10000; 21 | zs = 2*dx*ones(1,length(xs)); 22 | 23 | % regularization parameter 24 | alpha = 0; 25 | 26 | %% observed data 27 | % grid 28 | n = size(v); 29 | h = dx*[1 1]; 30 | z = [0:n(1)-1]*h(1); 31 | x = [0:n(2)-1]*h(2); 32 | [zz,xx] = ndgrid(z,x); 33 | 34 | % parameters 35 | model.f = f; 36 | model.n = n; 37 | model.h = h; 38 | model.zr = zr; 39 | model.xr = xr; 40 | model.zs = zs; 41 | model.xs = xs; 42 | 43 | % model 44 | m = 1./v(:).^2; 45 | 46 | % source 47 | Q = eye(length(xs)); 48 | 49 | % data 50 | D = F(m,Q,model); 51 | 52 | %initial model 53 | m0 = vec(1./v0(zz,xx).^2); 54 | 55 | %% inversion 56 | % misfit 57 | fh = @(m)misfit(m,Q,D,alpha,model); 58 | 59 | % Simple SD iteration 60 | [mk,hist] = SDiter(fh,m0,1e-3,10,1e-6); 61 | 62 | %% plot 63 | vk = reshape(real(1./sqrt(mk)),n); 64 | 65 | figure; 66 | imagesc(x,z,v,[min(v(:)) max(v(:))]);title('ground truth');axis equal tight 67 | 68 | figure; 69 | imagesc(x,z,v0(zz,xx),[min(v(:)) max(v(:))]);title('initial');axis equal tight 70 | 71 | figure; 72 | imagesc(x,z,vk,[min(v(:)) max(v(:))]);title('final');axis equal tight 73 | 74 | figure; 75 | semilogy(hist(:,1),hist(:,2)/hist(1,2),hist(:,1),hist(:,3)/hist(1,3));title('convergence history');legend('f','|g|'); -------------------------------------------------------------------------------- /example/marm_50.dat: -------------------------------------------------------------------------------- 1 | 1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5 2 | 1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5 3 | 1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5 4 | 1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5 5 | 1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5 6 | 1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5 7 | 1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5 8 | 1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5 9 | 1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.6115,1.6115,1.6115,1.6115,1.6115,1.6615,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.6115,1.6115,1.6115,1.6115,1.6115,1.6615,1.6615,1.6615,1.6615,1.532,1.532,1.532,1.532,1.532,1.6915,1.6115,1.6115,1.6115,1.6115,1.6115,1.5915,1.6615,1.6615,1.6615,1.532,1.6115,1.6915,1.6915,1.6115,1.6115,1.6615,1.5815,1.5415,1.7115,1.6615,1.7315,1.7315,1.5715,1.5715,1.7115,1.7115,1.6615,1.7315,1.6015,1.6015,1.6115,1.5415,1.6115,1.6115,1.7315,1.7315,1.7315,1.6015,1.6115,2.0472,2.0472,2.0472,1.9972,1.9972,1.9972,2.1072,2.1072,2.1072,2.1072,2.0172,2.0172,1.9772,1.9772,1.5415,1.5415,1.5415,1.5715,1.5715,1.7115,1.7115,1.7115,1.7115,1.7115,1.6615,1.6615,1.6615,1.7315,1.7315,1.6015,1.6015,1.6015,1.6015,1.6015,1.6015,1.6015,1.6015,1.6015,1.6015,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.5715,1.6115,1.6115,1.6115,1.6115,1.5415,1.5415,1.6115,1.6115,1.7315,1.7315,1.7315,1.6015,1.5515 10 | 1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.624,1.624,1.624,1.624,1.624,1.674,1.724,1.724,1.724,1.724,1.724,1.724,1.724,1.724,1.584,1.584,1.584,1.584,1.584,1.624,1.624,1.624,1.624,1.624,1.624,1.674,1.674,1.674,1.674,1.544,1.544,1.544,1.544,1.624,1.624,1.704,1.624,1.624,1.624,1.624,1.554,1.604,1.594,1.554,1.554,1.674,1.624,1.704,1.704,1.624,1.624,1.604,1.674,1.554,1.584,1.724,1.674,1.744,1.744,1.614,1.614,1.724,1.674,1.744,1.744,1.614,1.584,1.624,1.554,1.624,1.624,1.744,1.744,1.744,1.564,2.036,2.066,2.066,2.066,2.016,2.016,2.016,2.126,2.126,2.126,2.036,2.036,1.996,1.996,2.116,2.116,1.584,1.724,1.724,1.724,1.674,1.674,1.674,1.744,1.744,1.744,1.614,1.614,1.614,1.584,1.584,1.584,1.584,1.584,1.584,1.584,1.584,1.584,1.584,1.584,1.584,1.584,1.584,1.624,1.624,1.624,1.624,1.624,1.624,1.624,1.624,1.624,1.624,1.624,1.554,1.554,1.554,1.624,1.624,1.624,1.624,1.744,1.744,1.744,1.744,1.614,1.564,1.624,2.036 11 | 1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.5965,1.5965,1.5965,1.5965,1.6365,1.6365,1.6365,1.6365,1.6365,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.5565,1.5565,1.5565,1.5565,1.6365,1.6365,1.7165,1.7165,1.6365,1.6365,1.6365,1.6365,1.6365,1.6165,1.6865,1.6065,1.5665,1.5965,1.7365,1.6865,1.6865,1.7165,1.7165,1.6365,1.6365,1.6165,1.6065,1.5665,1.5965,1.6865,1.7565,1.7565,1.7565,1.6265,1.5965,1.6365,1.6865,1.7565,1.7565,1.6265,1.5965,1.6365,1.5665,1.6365,1.6365,1.7565,1.7565,1.6265,1.5765,2.0548,2.0848,2.0848,2.0848,2.0348,2.0348,2.1448,2.1448,2.1448,2.1448,2.0548,2.0148,2.0148,2.1348,2.1348,2.1348,2.1348,2.1348,1.6865,1.6865,1.7565,1.7565,1.6265,1.6265,1.6265,1.6265,1.5965,1.5965,1.5965,1.5965,1.5965,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.6365,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.5665,1.6365,1.6365,1.6365,1.6365,1.6365,1.7565,1.7565,1.7565,1.7565,1.6265,1.6265,1.5765,1.6365,2.0548,2.0848,2.0848 12 | 1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.699,1.699,1.699,1.699,1.699,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.609,1.609,1.609,1.609,1.609,1.649,1.649,1.649,1.649,1.699,1.699,1.699,1.699,1.699,1.699,1.569,1.569,1.569,1.569,1.569,1.649,1.649,1.649,1.649,1.729,1.729,1.649,1.649,1.649,1.649,1.579,1.629,1.619,1.579,1.579,1.749,1.749,1.699,1.699,1.769,1.769,1.769,1.649,1.629,1.699,1.579,1.579,1.749,1.699,1.769,1.769,1.639,1.639,1.609,1.649,1.579,1.649,1.769,1.639,1.609,1.649,1.579,1.649,1.649,1.769,1.769,1.639,1.589,2.0735,2.1035,2.1035,2.1035,2.0535,2.0535,2.1635,2.1635,2.1635,2.0735,2.0335,2.0335,2.1535,2.1535,2.1535,2.1535,2.0935,2.0935,2.0935,1.769,1.639,1.639,1.639,1.609,1.609,1.609,1.649,1.649,1.649,1.649,1.649,1.649,1.579,1.579,1.579,1.579,1.579,1.579,1.579,1.579,1.579,1.579,1.579,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.649,1.769,1.769,1.769,1.769,1.769,1.769,1.639,1.639,1.589,1.649,1.649,2.0735,2.1035,2.1035,2.0535,2.0535 13 | 1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7615,1.7615,1.7615,1.7615,1.7615,1.6215,1.6215,1.6215,1.6215,1.6215,1.6215,1.6615,1.6615,1.6615,1.6615,1.6615,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.5815,1.5815,1.5815,1.5815,1.5815,1.5815,1.6615,1.6615,1.6615,1.6615,1.6615,1.7415,1.6615,1.6615,1.6615,1.6615,1.6615,1.5915,1.6415,1.7115,1.5915,1.5915,1.6215,1.7615,1.7115,1.7115,1.7115,1.7815,1.7815,1.7815,1.6515,1.6515,1.6215,1.6315,1.5915,1.6215,1.7615,1.7115,1.7815,1.7815,1.6515,1.6515,1.6215,1.5915,1.5915,1.6615,1.7815,1.7815,1.6215,1.6615,1.6615,1.6615,1.7815,1.7815,1.7815,1.6515,1.6615,2.0922,2.1222,2.1222,2.1222,2.0722,2.0722,2.1822,2.1822,2.1822,2.0922,2.0522,2.1722,2.1722,2.1722,2.1722,2.1122,2.1122,2.1122,2.1122,2.1122,1.6215,1.6215,1.6215,1.6615,1.6615,1.6615,1.6615,1.6615,1.5915,1.5915,1.5915,1.5915,1.5915,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.6615,1.7815,1.7815,1.7815,1.7815,1.7815,1.7815,1.7815,1.7815,1.7815,1.7815,1.7815,1.7815,1.7815,1.6515,1.6515,1.6015,1.6015,1.6615,1.6615,2.0922,2.0922,2.1222,2.1222,2.0722,2.0722,2.1822,2.1822 14 | 1.724,1.724,1.724,1.724,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.634,1.674,1.674,1.674,1.674,1.674,1.724,1.724,1.724,1.724,1.724,1.724,1.594,1.594,1.594,1.594,1.594,1.594,1.674,1.754,1.754,1.754,1.754,1.754,1.754,1.674,1.674,1.674,1.674,1.674,1.604,1.654,1.654,1.724,1.604,1.604,1.604,1.634,1.774,1.724,1.724,1.724,1.794,1.794,1.794,1.664,1.664,1.634,1.674,1.674,1.674,1.774,1.724,1.724,1.794,1.794,1.664,1.634,1.674,1.604,1.674,1.674,1.794,1.794,1.614,1.674,1.674,1.674,1.794,1.794,1.794,1.664,1.674,2.111,2.141,2.141,2.141,2.091,2.091,2.201,2.201,2.201,2.111,2.071,2.191,2.191,2.191,2.131,2.131,2.131,2.131,2.131,2.131,2.131,1.634,1.674,1.674,1.674,1.604,1.604,1.674,1.674,1.674,1.674,1.674,1.674,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.794,1.664,1.664,1.664,1.664,1.614,1.614,1.614,1.674,1.674,2.111,2.111,2.141,2.141,2.141,2.091,2.091,2.201,2.201,2.111,2.191,2.191 15 | 1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6465,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.6065,1.6065,1.6065,1.6065,1.6065,1.6865,1.6865,1.6865,1.6865,1.7665,1.7665,1.7665,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6165,1.6665,1.6665,1.7365,1.6565,1.6165,1.6165,1.6165,1.6465,1.7865,1.7365,1.7365,1.7365,1.8065,1.8065,1.8065,1.8065,1.6765,1.6465,1.6465,1.6865,1.6865,1.6865,1.6165,1.6865,1.7365,1.7365,1.8065,1.8065,1.6765,1.6465,1.6865,1.6165,1.6865,1.6865,1.8065,1.8065,1.6265,2.1298,2.1298,2.1598,1.8065,1.8065,1.6765,1.6265,1.6865,2.1298,2.1598,2.1598,2.1098,2.1098,2.1098,2.2198,2.2198,2.1298,2.0898,2.0898,2.2098,2.2098,2.1498,2.1498,2.1498,2.1498,2.1498,2.1498,2.1498,1.9043,1.9043,1.9043,1.6165,1.6865,1.6865,1.6865,1.6865,1.6865,1.8065,1.8065,1.8065,1.8065,1.8065,1.8065,1.8065,1.8065,1.6765,1.6765,1.6765,1.6765,1.6765,1.6765,1.6765,1.6765,1.6765,1.6265,1.6265,1.6265,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,1.6865,2.1298,2.1298,2.1298,2.1598,2.1598,2.1598,2.1598,2.1098,2.1098,2.1098,2.2198,2.2198,2.1298,2.0898,2.2098,2.2098,2.1498,1.9043 16 | 1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.619,1.619,1.619,1.619,1.619,1.699,1.699,1.699,1.699,1.699,1.779,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.699,1.629,1.679,1.679,1.749,1.669,1.629,1.629,1.629,1.659,1.659,1.799,1.749,1.749,1.749,1.819,1.819,1.819,1.819,1.689,1.689,1.659,1.659,1.699,1.699,1.629,1.699,1.699,1.699,1.819,1.819,1.819,1.689,1.689,1.699,1.699,1.629,1.699,1.819,1.819,1.819,1.699,2.1485,2.1785,2.1785,2.1785,1.819,1.689,1.639,1.699,2.1485,2.1785,2.1785,2.1285,2.1285,2.1285,2.2385,2.2385,2.1485,2.1085,2.2285,2.2285,2.2285,2.1685,2.1685,2.1685,2.1685,2.1685,1.9858,1.9858,1.9858,1.9858,2.1258,1.9458,1.699,1.699,1.699,1.819,1.819,1.819,1.819,1.689,1.689,1.689,1.689,1.639,1.639,1.639,1.639,1.699,1.699,1.699,1.699,1.699,1.699,2.1485,2.1485,2.1485,2.1485,2.1485,2.1485,2.1485,2.1485,2.1785,2.1785,2.1785,2.1785,2.1785,2.1785,2.1285,2.1285,2.1285,2.1285,2.2385,2.2385,2.1485,2.1085,2.1085,2.2285,2.2285,2.1685,2.1685,1.9858,2.1258,2.1258 17 | 1.7115,1.7115,1.7115,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.6315,1.6315,1.6315,1.6315,1.6315,1.6315,1.6315,1.6315,1.6315,1.6315,1.6315,1.6315,1.7615,1.7615,1.7615,1.7615,1.7615,1.6315,1.6315,1.6315,1.6315,1.6315,1.6315,1.7115,1.7115,1.7115,1.7915,1.7915,1.7915,1.7915,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.7115,1.6415,1.6415,1.6915,1.7615,1.7615,1.6815,1.6415,1.6415,1.6415,1.6715,1.6715,1.6715,1.8115,1.7615,1.7615,1.7615,1.8315,1.8315,1.8315,1.7015,1.7015,1.7015,1.7015,1.6715,1.6715,1.7115,1.6415,1.6415,1.7115,1.7115,1.7115,1.8315,1.8315,1.8315,1.7015,1.7115,1.6715,1.7115,1.6415,1.6415,1.7115,1.8315,1.8315,1.8315,1.7115,2.1672,2.1972,2.1972,2.1972,2.1472,2.1472,1.7115,2.1672,2.1972,2.1972,2.1472,2.1472,2.1472,2.1472,2.2572,2.2572,2.1672,2.1272,2.2472,2.2472,2.1872,2.1872,2.1872,2.1872,2.1872,2.0673,2.0673,2.0673,2.2073,2.2073,2.0273,2.1273,1.9823,1.8778,1.8315,1.8315,1.8315,1.7015,1.7015,1.6515,1.7115,1.7115,1.7115,1.7115,1.7115,2.1672,2.1672,2.1672,2.1672,2.1672,2.1972,2.1972,2.1972,2.1972,2.1472,2.1472,2.1472,2.1472,2.1472,2.1472,2.1472,2.1472,2.1472,2.1472,2.1472,2.2572,2.2572,2.2572,2.2572,2.1672,2.1672,2.1272,2.1272,2.2472,2.2472,2.2472,2.1872,2.1872,2.1872,2.0673,2.2073,2.0273,2.0273,2.1273 18 | 1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.644,1.644,1.644,1.644,1.644,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.724,1.724,1.724,1.724,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.644,1.724,1.724,1.724,1.724,1.804,1.804,1.804,1.804,1.804,1.724,1.724,1.724,1.724,1.724,1.724,1.724,1.654,1.654,1.704,1.704,1.774,1.774,1.694,1.654,1.654,1.654,1.654,1.684,1.684,1.824,1.824,1.824,1.774,1.774,1.774,1.844,1.844,1.844,1.714,1.714,1.714,1.684,1.684,1.684,1.724,1.724,1.724,1.654,1.724,1.724,1.724,1.844,1.844,1.844,1.714,1.714,1.724,2.186,2.216,2.166,1.724,1.724,1.844,1.844,1.844,1.724,2.186,2.216,2.216,2.166,2.166,2.166,2.276,2.276,2.216,2.216,2.166,2.166,2.166,2.276,2.276,2.276,2.146,2.146,2.266,2.266,2.206,2.206,2.206,2.206,2.206,2.1488,2.1488,2.1488,2.2888,2.1088,2.2088,2.0138,1.909,1.909,1.909,1.844,1.714,1.664,1.724,1.724,2.186,2.186,2.216,2.216,2.216,2.216,2.166,2.166,2.166,2.166,2.166,2.166,2.276,2.276,2.276,2.276,2.276,2.186,2.186,2.186,2.186,2.186,2.186,2.146,2.146,2.146,2.146,2.266,2.266,2.266,2.266,2.266,2.206,2.206,2.206,2.206,2.1488,2.2888,2.2888,2.1088,2.1088,2.2088,2.0138,1.909,1.909 19 | 1.7865,1.7865,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.6565,1.8165,1.8165,1.8165,1.8165,1.8165,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.7365,1.6665,1.6665,1.7165,1.7865,1.7865,1.7065,1.7065,1.6665,1.6665,1.6665,1.6665,1.6965,1.6965,1.6965,1.8365,1.8365,1.8365,1.7865,1.7865,1.7865,1.8565,1.8565,1.8565,1.8565,1.7265,1.7265,1.6965,1.6965,1.6965,1.7365,1.7365,1.7365,1.7365,1.6665,1.7365,1.7365,1.7365,1.7365,1.8565,1.8565,1.8565,1.7265,1.7265,1.7365,2.2048,2.2348,2.2348,2.1848,2.1848,2.2948,1.8565,1.8565,1.7265,1.7365,2.2048,2.2348,2.2348,2.1848,2.1848,2.1848,2.2948,2.2948,2.2048,2.1848,2.1848,2.1848,2.1848,2.2948,2.2948,2.2048,2.1648,2.1648,2.2848,2.2848,2.2248,2.2248,2.2248,2.2248,2.2303,2.2303,2.2303,2.3703,2.1903,2.2903,2.0453,1.9402,1.9402,2.2902,2.2902,2.2902,1.6765,1.7365,2.2048,2.2348,2.2348,2.2348,2.1848,2.1848,2.2948,2.2948,2.2948,2.2948,2.2048,2.2048,2.2048,2.1648,2.1648,2.1648,2.1648,2.2848,2.2848,2.2848,2.2848,2.2848,2.2848,2.2848,2.2248,2.2248,2.2248,2.2248,2.2248,2.2248,2.2248,2.2248,2.2248,2.2248,2.2303,2.2303,2.3703,2.3703,2.3703,2.1903,2.1903,2.2903,2.2903,2.0453,1.9402,1.9402,1.9402,1.9402 20 | 1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.669,1.532,1.532,1.532,1.532,1.532,1.532,1.532,1.532,1.532,1.532,1.532,1.829,1.829,1.829,1.829,1.829,1.829,1.829,1.829,1.829,1.829,1.829,1.829,1.829,1.829,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.749,1.679,1.679,1.729,1.729,1.799,1.799,1.719,1.679,1.679,1.679,1.679,1.679,1.679,1.849,1.849,1.849,1.849,1.799,1.799,1.799,1.799,1.869,1.869,1.869,1.869,1.869,1.869,1.739,1.739,1.709,1.709,1.819,1.749,1.749,1.749,1.749,1.679,1.679,1.749,1.749,1.749,1.869,1.869,1.869,1.869,1.739,1.739,1.749,1.749,2.2235,2.2535,2.2035,2.2035,2.3135,2.3135,2.2235,2.1835,1.739,1.749,2.2235,2.2535,2.2535,2.2035,2.2035,2.2035,2.3135,2.3135,2.2235,2.3035,2.3035,2.2035,2.3135,2.3135,2.3135,2.2235,2.1835,2.1835,2.3035,2.3035,2.2435,2.2435,2.2435,2.2435,2.3118,2.3118,2.3118,2.4518,2.2718,2.3718,1.9715,1.9715,2.3215,2.3215,2.0515,2.0515,2.0515,1.584,2.2535,2.2535,2.2035,2.3135,2.3135,2.2235,2.2235,2.1835,2.3035,2.3035,2.3035,2.3035,2.2435,2.2435,2.2435,2.2435,2.2435,2.2435,2.2435,2.2435,2.2435,2.2435,2.3118,2.3118,2.3118,2.3118,2.3118,2.3118,2.3118,2.3118,2.3118,2.4518,2.4518,2.4518,2.4518,2.2718,2.2718,2.2718,2.3718,2.3718,2.0768,1.9715,1.9715,1.9715,1.9715,1.9715,1.9715,1.9715,1.9715 21 | 1.6815,1.6815,1.6815,1.6815,1.6815,1.6815,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.8415,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.7615,1.6915,1.6915,1.6915,1.6915,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.8115,1.8115,1.8115,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.8115,1.8115,1.7315,1.7315,1.7315,1.6915,1.6915,1.6915,1.6915,1.6915,1.7215,1.7215,1.8615,1.8615,1.8115,1.8115,1.8115,1.8115,1.8115,1.8115,1.8815,1.8815,1.8815,1.8815,1.8815,1.8815,1.7515,1.7515,1.7515,1.7215,1.7215,1.8315,1.7615,1.7615,1.7615,1.6915,1.6915,1.6915,1.6915,1.7615,1.7615,1.7615,1.7615,1.8815,1.8815,1.8815,1.7515,1.7515,1.7015,1.7615,1.7615,2.2422,2.2722,2.2722,2.2222,2.2222,2.3322,2.3322,2.2422,2.3222,2.3222,2.2622,2.2722,2.2722,2.2722,2.2222,2.2222,2.2222,2.3322,2.2422,2.2422,2.2022,2.3222,2.3222,2.3222,2.3322,2.2422,2.2422,2.2022,2.2022,2.3222,2.3222,2.2622,2.2622,2.2622,2.2622,2.3933,2.3933,2.5333,2.5333,2.4533,2.1083,2.0028,2.3528,2.3528,2.0828,2.0828,2.0828,1.584,1.584,1.584,2.2222,2.3322,2.2422,2.2022,2.3222,2.3222,2.2622,2.2622,2.2622,2.2622,2.3933,2.3933,2.3933,2.3933,2.5333,2.5333,2.5333,2.5333,2.5333,2.5333,2.5333,2.5333,2.3533,2.3533,2.3533,2.3533,2.3533,2.3533,2.3533,2.3533,2.3533,2.4533,2.4533,2.4533,2.4533,2.1083,2.1083,2.0028,2.0028,2.0028,2.0028,2.0028,2.0028,2.0028,2.0028,2.0028,2.3528,2.3528,2.3528 22 | 1.854,1.854,1.854,1.854,1.854,1.854,1.854,1.854,1.854,1.854,1.854,1.854,1.854,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.774,1.704,1.704,1.704,1.704,1.754,1.754,1.754,1.754,1.754,1.824,1.824,1.824,1.744,1.744,1.744,1.744,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.704,1.734,1.734,1.734,1.734,1.874,1.874,1.824,1.824,1.824,1.824,1.824,1.824,1.894,1.894,1.894,1.894,1.894,1.894,1.894,1.764,1.764,1.764,1.734,1.734,1.774,1.774,1.774,1.774,1.704,1.704,1.704,1.704,1.774,1.774,1.774,1.774,1.774,1.774,1.894,1.894,1.894,1.764,1.764,1.714,1.714,1.774,2.261,2.261,2.291,2.291,2.241,2.241,2.241,2.351,2.351,2.221,2.341,2.281,2.281,2.281,2.4748,2.291,2.241,2.241,2.241,2.351,2.261,2.261,2.221,2.341,2.341,2.341,2.281,2.281,2.221,2.221,2.341,2.341,2.341,2.281,2.281,2.281,2.281,2.4748,2.4748,2.6148,2.4348,2.5348,2.1398,2.034,2.384,2.114,2.114,2.114,1.584,1.584,2.114,2.114,2.114,2.114,2.341,2.341,2.281,2.281,2.4748,2.6148,2.6148,2.4348,2.4348,2.4348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.1398,2.1398,2.1398,2.1398,2.1398,2.1398,2.1398,2.034,2.034,2.034,2.034,2.034,2.034,2.034,2.034,2.034,2.034,2.034,2.034,2.034,2.384,2.384,2.384,2.384,2.384,2.384 23 | 1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7665,1.7665,1.7665,1.7665,1.7665,1.8365,1.8365,1.8365,1.8365,1.8365,1.8365,1.8365,1.7565,1.7565,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7165,1.7465,1.7465,1.7465,1.7465,1.7465,1.7465,1.7465,1.7465,1.7465,1.7465,1.7465,1.7465,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8365,1.8365,1.8365,1.8365,1.8365,1.9065,1.9065,1.9065,1.9065,1.9065,1.9065,1.9065,1.9065,1.7765,1.7765,1.7765,1.7465,1.7465,1.8565,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7165,1.7165,1.7165,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.7865,1.9065,1.9065,1.9065,1.9065,1.7765,1.7765,1.7865,1.7865,2.2798,2.2798,2.3098,2.3098,2.3098,2.3098,2.2598,2.2598,2.3698,2.3698,2.2798,2.2398,2.3598,2.2998,2.2998,2.2998,2.5563,2.6963,2.5163,2.2598,2.3698,2.3698,2.2798,2.2398,2.2398,2.3598,2.3598,2.3598,2.2998,2.2998,2.5563,2.5563,2.3598,2.3598,2.3598,2.2998,2.2998,2.2998,2.2998,2.5563,2.5563,2.6963,2.5163,2.6163,2.0652,2.0652,2.4152,2.1452,2.1452,1.584,1.584,2.1452,2.1452,2.1452,2.1452,2.1452,2.1452,2.2998,2.5563,2.6963,2.6963,2.5163,2.6163,2.6163,2.6163,2.1713,2.1713,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.0652,2.4152,2.4152,2.4152,2.4152,2.4152,2.4152,2.4152,2.4152,2.4152,2.4152,2.1452 24 | 1.729,1.729,1.729,1.729,1.779,1.779,1.779,1.779,1.779,1.779,1.779,1.779,1.779,1.849,1.849,1.849,1.849,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.729,1.759,1.759,1.759,1.759,1.759,1.759,1.759,1.759,1.759,1.899,1.899,1.899,1.899,1.899,1.899,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.919,1.919,1.919,1.919,1.919,1.919,1.919,1.789,1.789,1.789,1.759,1.759,1.869,1.869,1.869,1.799,1.799,1.799,1.799,1.799,1.729,1.729,1.729,1.729,1.799,1.799,1.799,1.799,1.799,1.799,1.799,1.799,1.799,1.919,1.919,1.919,1.919,1.789,1.789,1.799,1.799,2.2985,2.2985,2.3285,2.3285,2.3285,2.3285,2.3285,2.2785,2.2785,2.3885,2.3885,2.2985,2.2585,2.3785,2.3785,2.3185,2.3185,2.3185,2.6378,2.5978,2.6978,1.77,2.0965,2.2985,2.2985,2.2585,2.3785,2.3785,2.3785,2.3785,2.3185,2.3185,2.6378,2.6378,2.7778,2.5978,2.3785,2.3185,2.3185,2.3185,2.3185,2.6378,2.6378,2.7778,2.5978,2.6978,2.0965,2.4465,2.4465,2.1765,2.1765,1.584,2.1765,2.1765,2.1765,2.1765,2.4,2.4,2.4,2.4,2.7778,2.5978,2.6978,2.6978,2.2028,2.0965,2.0965,2.0965,2.0965,2.0965,2.0965,2.0965,2.0965,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.4465,2.1765,2.1765,2.1765,2.1765,2.1765,2.1765 25 | 1.7815,1.7815,1.7815,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.7715,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.8015,1.8015,1.8015,1.8015,1.8015,1.7715,1.7715,1.8815,1.8815,1.8115,1.8115,1.8115,1.8115,1.8115,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.7415,1.8115,1.8115,1.8115,1.8115,1.8115,1.8115,1.8115,1.8115,1.9315,1.9315,1.9315,1.9315,1.8015,1.8015,1.7515,1.8115,1.8115,2.3172,2.3172,2.3472,2.3472,2.3472,2.3472,2.3472,2.2972,2.2972,2.2972,2.2972,2.4072,2.4072,2.3172,2.3972,2.3972,2.3372,2.3372,2.3372,2.7193,2.8593,2.6793,2.7793,1.77,2.1278,2.131,2.1778,2.2772,2.3972,2.3972,2.3972,2.3372,2.3372,2.3372,2.7193,2.7193,2.8593,2.6793,2.7793,2.1278,2.3372,2.3372,2.3372,2.7193,2.7193,2.8593,2.6793,2.7793,2.1278,2.4778,2.4778,2.2078,2.1778,2.2078,2.2078,2.2078,2.2078,2.4,2.4,2.4,2.4,2.4,2.4,2.65,2.7793,2.2343,2.1278,2.1278,2.1278,2.1278,2.1278,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.4778,2.2078,2.2078,2.2078,2.2078,2.2078,2.2078,2.2078,2.2078,2.2078,2.2078,2.2078,2.2078 26 | 1.784,1.784,1.784,1.784,1.784,1.784,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.814,1.784,1.784,1.784,1.784,1.784,1.894,1.824,1.824,1.824,1.754,1.754,1.754,1.754,1.754,1.754,1.754,1.754,1.754,1.824,1.824,1.824,1.824,1.824,1.824,1.944,1.944,1.944,1.944,1.944,1.944,1.814,1.814,1.764,1.764,1.824,1.824,2.336,2.336,2.366,2.366,2.366,2.366,2.366,2.366,2.316,2.316,2.316,2.316,2.426,2.426,2.336,2.296,2.416,2.356,2.356,2.356,2.356,2.8008,2.9408,2.7608,2.8608,2.159,2.509,2.509,2.209,2.239,2.239,2.416,2.416,2.356,2.356,2.356,2.8008,2.8008,2.7608,2.8608,2.2658,2.159,2.509,2.209,2.8008,2.8008,2.8008,2.9408,2.7608,2.2658,2.159,2.509,2.509,2.239,2.239,2.239,2.239,2.239,2.4,2.4,2.4,2.4,2.4,2.4,2.65,2.65,3.55,2.159,2.159,2.159,2.159,2.509,2.509,2.509,2.509,2.509,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.239,2.209,2.209,2.209 27 | 1.8865,1.8865,1.8865,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.8265,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.7965,1.9065,1.9065,1.9065,1.9065,1.9065,1.9065,1.8365,1.8365,1.8365,1.8365,1.7665,1.7665,1.7665,1.8365,1.8365,1.8365,1.8365,1.8365,1.8365,1.8365,1.8365,1.8365,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.9565,1.8265,1.8265,1.7765,1.7765,1.8365,1.8365,2.3548,2.3548,2.3848,2.3848,2.3848,2.3848,2.3848,2.3848,2.3348,2.3348,2.3348,2.3348,2.3348,2.4448,2.4448,2.4448,2.3548,2.3148,2.4348,2.3748,2.3748,2.3748,2.3748,2.8823,3.0223,2.8423,2.8423,2.9423,2.1902,2.5402,2.5402,2.2402,2.2702,2.2702,2.2702,2.2702,2.2702,2.3748,2.8823,2.8823,3.0223,2.8423,2.9423,2.2973,2.1902,2.2702,2.2402,2.2702,2.2702,2.8823,3.0223,2.8423,2.2973,2.1902,2.5402,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.4,2.4,2.4,2.4,2.4,2.4,2.65,3.55,3.55,3.55,3.55,2.1902,2.5402,2.5402,2.5402,2.5402,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2702,2.2402,2.2402,2.2402,2.2402,2.2702,2.2702,2.2702,2.2702 28 | 1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.839,1.809,1.809,1.809,1.809,1.809,1.809,1.809,1.809,1.919,1.919,1.919,1.919,1.919,1.919,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.779,1.779,1.779,1.779,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.849,1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.969,1.839,1.839,1.839,1.839,1.789,1.849,1.849,2.3735,2.3735,2.4035,2.4035,2.4035,2.4035,2.4035,2.4035,2.4035,2.3535,2.3535,2.3535,2.3535,2.3535,2.4635,2.4635,2.4635,2.3735,2.3735,2.3335,2.4535,2.3935,2.3935,2.3935,2.3935,2.3935,3.1038,3.1038,2.9238,3.0238,2.3288,2.2215,2.5715,2.5715,2.2715,2.3015,2.3015,2.3015,2.3015,2.3015,2.5788,2.3088,2.9638,3.1038,2.9238,3.0238,2.3288,2.2215,2.5715,2.2715,2.3015,2.3015,2.4,2.4,2.9238,2.3288,2.2215,2.5715,2.3015,2.2715,2.3015,2.3015,2.3015,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.65,3.55,3.55,3.55,3.55,3.35,3.35,2.5715,2.5715,2.3015,2.3015,2.3015,2.3015,2.3015,2.3015,2.3015,2.2715,2.2715,2.2715,2.2715,2.2715,2.3015,2.3015,2.3015,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.2715,2.3015,2.3015,2.3015,2.3015,2.3015,2.3015,2.3015,2.3015,2.3015,2.3015 29 | 1.8515,1.8515,1.8515,1.8515,1.8515,1.8515,1.8515,1.8515,1.8215,1.8215,1.8215,1.8215,1.8215,1.8215,1.8215,1.8215,1.8215,1.8215,1.8215,1.8215,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.9315,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.7915,1.7915,1.7915,1.7915,1.7915,1.7915,1.7915,1.7915,1.7915,1.7915,1.7915,1.7915,1.7915,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.8615,1.9815,1.9815,1.9815,1.9815,1.9815,1.9815,1.9815,1.9815,1.9815,1.8515,1.8515,1.8515,1.8515,1.8515,1.8015,1.8615,1.8615,1.8615,2.3922,2.3922,2.4222,2.4222,2.4222,2.4222,2.4222,2.4222,2.4222,2.3722,2.3722,2.3722,2.3722,2.3722,2.3722,2.3722,2.4822,2.4822,2.4822,2.3922,2.3922,2.3522,2.4722,2.4122,2.4122,2.4122,2.4122,2.4122,3.0453,3.1853,3.0053,3.0053,3.1053,2.2528,2.2528,2.6028,2.3328,2.3028,2.3328,2.3328,2.3328,2.3328,2.3328,2.6103,2.3403,2.3403,2.3603,2.3603,3.1053,2.3603,2.2528,2.6028,2.3028,2.3328,2.3328,2.4,2.4,2.4,2.4,2.4,2.6028,2.3328,2.3028,2.3328,2.3328,2.3328,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.65,3.55,3.55,3.55,3.35,3.35,3.35,3.5,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3028,2.3028,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328,2.3328 30 | 1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.944,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.804,1.804,1.804,1.804,1.804,1.804,1.804,1.804,1.804,1.804,1.804,1.804,1.804,1.804,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.874,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.994,1.864,1.864,1.864,1.864,1.864,1.814,1.814,1.814,1.874,1.874,1.874,2.411,2.411,2.441,2.441,2.441,2.441,2.441,2.441,2.441,2.441,2.391,2.391,2.391,2.391,2.391,2.391,2.391,2.501,2.501,2.501,2.501,2.411,2.411,2.371,2.491,2.491,2.431,2.431,2.431,2.431,2.431,3.1268,3.2668,3.2668,3.0868,3.1868,2.3918,2.284,2.634,2.634,2.334,2.334,2.364,2.364,2.364,2.364,2.364,2.6418,2.3718,2.3718,2.3918,2.65,3.55,3.55,2.634,2.364,2.334,2.364,2.364,2.4,2.4,2.4,2.4,2.4,2.4,2.65,2.364,2.364,2.364,2.364,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.65,3.55,3.55,3.35,3.35,3.35,3.5,3.5,3.5,2.384,2.364,2.364,2.334,2.334,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.364,2.4,2.4,2.4 31 | 1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8165,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,1.8865,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,2.0065,1.8765,1.8765,1.8765,1.8765,1.8765,1.8765,1.8765,1.8765,1.8265,1.8265,1.8265,1.8265,1.8865,1.8865,1.8865,1.8865,2.4298,2.4298,2.4298,2.4598,2.4598,2.4598,2.4598,2.4598,2.4598,2.4598,2.4098,2.4098,2.4098,2.4098,2.4098,2.4098,2.4098,2.4098,2.4098,2.4098,2.5198,2.5198,2.5198,2.5198,2.4298,2.4298,2.3898,2.5098,2.5098,2.4498,2.4498,2.4498,2.4498,2.4498,2.4498,3.2083,3.3483,3.3483,3.1683,3.2683,2.4233,2.3152,2.3152,2.6652,2.3952,2.3652,2.3952,2.3952,2.3952,2.3952,2.3952,2.6733,2.6733,2.4033,2.4233,2.4233,2.65,3.55,3.55,3.55,3.35,2.3652,2.3952,2.3952,2.4,2.4,2.4,2.4,2.4,2.4,2.65,3.55,3.55,2.3952,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.65,3.55,3.55,3.35,3.35,3.5,3.5,3.5,2.4152,2.4152,2.4152,2.2952,2.3652,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.3952,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4 32 | 1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,1.899,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,2.019,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.889,1.64,1.899,1.899,1.899,1.899,1.899,1.899,1.899,2.4485,2.4485,2.4485,2.4485,2.4485,2.4485,2.4485,2.4785,2.4785,2.4785,2.4785,2.4785,2.4785,2.4785,2.4785,2.4785,2.4285,2.4285,2.4285,2.4285,2.4285,2.4285,2.4285,2.4285,2.4285,2.4285,2.4285,2.5385,2.5385,2.5385,2.5385,2.5385,2.5385,2.4485,2.4485,2.4085,2.5285,2.5285,2.4685,2.4685,2.4685,2.4685,2.4685,2.4685,3.2898,3.2898,3.4298,3.4298,3.2498,3.2498,3.3498,2.3465,2.3465,2.6965,2.4265,2.3965,2.3965,2.4265,2.4265,2.4265,2.4265,2.4265,2.7048,2.4348,2.4348,2.4548,2.65,2.65,3.55,3.55,3.55,3.35,2.4465,2.5965,2.4465,2.4,2.4,2.4,2.4,2.4,2.4,2.65,3.55,3.55,3.55,3.35,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.65,3.55,3.55,3.35,3.35,3.5,3.5,2.4465,2.4465,2.4465,2.3265,2.5965,2.4465,2.4265,2.4265,2.4265,2.4265,2.4265,2.4265,2.4265,2.4265,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.65 33 | 2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,2.0315,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.9015,1.64,1.64,1.64,1.64,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,1.9115,2.4672,2.4672,2.4672,2.4672,2.4672,2.4672,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4972,2.4472,2.4472,2.4472,2.4472,2.4472,2.4472,2.4472,2.4472,2.4472,2.4472,2.4472,2.4472,2.4472,2.5572,2.5572,2.5572,2.5572,2.5572,2.5572,2.5572,2.4672,2.4672,2.4672,2.4272,2.5472,2.5472,2.4872,2.4872,2.4872,2.4872,2.4872,2.4872,2.4872,3.3713,3.3713,3.5113,3.5113,3.3313,3.3313,3.4313,2.4863,2.3778,2.7278,2.7278,2.4578,2.4278,2.4578,2.4578,2.4578,2.4578,2.4578,2.7363,2.7363,2.4663,2.4863,2.4863,2.65,2.65,3.55,3.55,3.55,2.5773,2.4778,2.3578,2.4778,2.6778,2.4778,2.4,2.4,2.4,2.4,2.65,3.55,3.55,3.55,3.35,3.5,2.4778,2.4778,2.4,2.4,2.4,2.65,3.55,3.55,3.55,3.35,3.35,3.5,3.5,2.4778,2.4778,2.3578,2.6278,2.4778,2.6778,2.6778,2.4778,2.4578,2.4578,2.4578,2.4578,2.4578,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.4,2.65,2.65,3.55,3.55,3.55,3.55 34 | 1.914,1.914,1.914,1.914,1.914,1.914,1.914,1.914,1.914,1.914,1.914,1.914,1.914,1.914,1.64,1.64,1.64,1.64,1.64,1.64,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,1.924,2.486,2.486,2.486,2.486,2.486,2.486,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.516,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.466,2.576,2.576,2.576,2.576,2.576,2.576,2.576,2.576,2.486,2.486,2.486,2.446,2.446,2.566,2.566,2.566,2.506,2.506,2.506,2.506,2.506,2.506,2.506,2.506,3.4528,3.4528,3.5928,3.5928,3.4128,3.4128,3.5128,2.5178,2.409,2.759,2.759,2.489,2.459,2.489,2.489,2.489,2.489,2.489,2.489,2.7678,2.4978,2.4978,2.5178,2.5178,2.65,2.65,3.55,3.55,3.55,2.6088,2.509,2.389,2.659,2.709,2.509,2.509,2.439,2.509,2.4,2.65,3.55,3.55,3.55,3.35,3.5,2.509,2.389,2.659,2.509,2.65,3.55,3.55,3.55,3.55,3.35,3.5,3.5,2.509,2.509,2.389,2.659,2.509,2.709,2.709,2.509,2.509,2.509,2.509,2.489,2.489,2.4,2.4,2.4,2.4,2.4,2.4,2.65,2.65,2.65,2.65,2.65,3.55,3.55,3.55,3.55,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,3.55,3.55,3.55,3.55,3.55,3.55,3.35,3.35,3.35,3.35 35 | 1.9365,1.9365,1.9365,1.9365,1.9365,1.9365,1.9365,1.9365,1.9365,1.9365,1.9365,1.9365,2.5048,2.5048,2.5048,2.5048,2.5048,2.5048,2.5048,2.5048,2.5048,2.5048,2.5048,2.5048,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.5348,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.4848,2.5948,2.5948,2.5948,2.5948,2.5948,2.5948,2.5948,2.5948,2.5948,2.5948,2.5048,2.5048,2.5048,2.5048,2.4648,2.4648,2.4648,2.5848,2.5848,2.5848,2.5248,2.5248,2.5248,2.5248,2.5248,2.5248,2.5248,2.5248,2.5248,3.5343,3.5343,3.5343,3.6743,3.6743,3.4943,3.4943,3.5943,2.5493,2.4402,2.4402,2.7902,2.5202,2.4902,2.5202,2.5202,2.5202,2.5202,2.5202,2.5202,2.7993,2.7993,2.5293,2.5493,2.5493,2.65,2.65,2.65,3.55,3.55,3.35,2.6403,2.5402,2.6902,2.5402,2.7402,2.5402,2.5402,2.4702,2.5402,2.5402,2.7402,3.55,3.55,3.55,3.35,3.5,2.5402,2.5402,2.6902,2.5402,2.7402,2.5402,2.5402,3.55,3.35,3.35,3.5,3.5,2.5402,2.5402,2.4202,2.6902,2.5402,2.7402,2.7402,2.5402,2.5402,2.5402,2.5402,2.5402,2.5402,2.4,2.4,2.65,2.65,2.65,3.55,3.55,3.55,3.55,3.55,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.35,3.5,3.5,3.5,3.5,3.5 36 | 2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5535,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.5035,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.6135,2.5235,2.5235,2.5235,2.5235,2.5235,2.4835,2.4835,2.4835,2.4835,2.6035,2.6035,2.6035,2.6035,2.6035,2.5435,2.5435,2.5435,2.5435,2.5435,2.5435,2.5435,2.5435,2.5435,2.5435,3.6158,3.6158,3.6158,3.7558,3.7558,3.7558,3.5758,3.5758,3.6758,2.5808,2.4715,2.4715,2.8215,2.5515,2.5215,2.5515,2.5515,2.5515,2.5515,2.5515,2.5515,2.8308,2.8308,2.5608,2.5808,2.5808,2.65,2.65,2.65,3.55,3.55,3.55,2.6718,2.5715,2.4515,2.7215,2.5715,2.7715,2.5715,2.5015,2.5015,2.5715,2.5715,2.7715,2.874,2.874,2.7715,3.35,3.5,2.5715,2.5715,2.4515,2.5715,2.7715,2.5715,2.5715,2.5015,2.5715,3.35,3.5,3.5,2.5715,2.5715,2.4515,2.7215,2.7715,2.7715,2.5715,2.5715,2.5715,2.5715,2.5715,2.5715,2.5715,2.5015,2.5715,2.65,3.55,3.55,3.35,3.35,3.35,3.35,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,2.5715,2.5715,2.5715 37 | 2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.5222,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.6322,2.5422,2.5422,2.5422,2.5422,2.5422,2.5422,2.5422,2.5422,2.5422,2.5022,2.5022,2.5022,2.5022,2.6222,2.6222,2.6222,2.6222,2.6222,2.6222,2.6222,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,2.5622,3.6973,3.6973,3.6973,3.8373,3.8373,3.8373,3.6573,3.6573,3.7573,3.7573,2.5028,2.5028,2.8528,2.8528,2.5828,2.5528,2.5828,2.5828,2.5828,2.5828,2.5828,2.5828,2.8623,2.8623,2.5923,2.5923,2.6123,2.65,2.65,2.65,3.55,3.55,3.55,3.35,2.7033,2.6028,2.4828,2.7528,2.6028,2.8028,2.6028,2.5328,2.6028,2.6028,2.8028,2.874,2.874,2.874,2.8028,2.8028,4,3.5,2.6028,2.4828,2.7528,2.8028,2.8028,2.6028,2.5328,2.6028,2.6028,2.874,2.874,2.6028,2.4828,2.7528,2.6028,2.8028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.5328,2.6028,2.6028,2.6028,2.6028,3.35,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,3.5,3.5,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.6028,2.4828,2.4828 38 | 2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.651,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.561,2.521,2.521,2.521,2.521,2.521,2.521,2.521,2.521,2.521,2.521,2.521,2.521,2.521,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.641,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,2.581,3.7788,3.7788,3.7788,3.7788,3.9188,3.9188,3.9188,3.7388,3.7388,3.7388,3.8388,2.6438,2.534,2.534,2.884,2.884,2.614,2.584,2.614,2.614,2.614,2.614,2.614,2.614,2.8938,2.8938,2.6238,2.6438,2.6438,2.65,2.65,2.65,3.55,3.55,3.55,3.35,2.7348,2.634,2.514,2.784,2.634,2.634,2.834,2.564,2.634,2.634,2.834,2.874,2.874,2.874,2.834,2.834,4,4,4.45,4.45,4,2.784,2.834,2.834,2.634,2.564,2.634,2.634,2.874,2.874,2.834,2.834,2.634,2.834,2.834,2.634,2.634,2.634,2.634,2.564,2.564,2.634,2.634,2.634,2.634,2.834,2.783,2.783,2.783,3.5,3.5,2.634,2.634,2.634,2.634,2.634,2.634,2.514,2.514,2.514,2.514,2.514,2.514,2.514,2.514,2.514,2.514,2.514,2.514,2.514,2.634,2.634,2.634,2.634,2.634,2.634,2.634,2.634,2.634,2.514,2.514,2.514,2.514,2.514,2.514,2.784 39 | 2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.5398,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,2.6598,3,3,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,2.5998,3.8603,3.8603,3.8603,3.8603,4.0003,4.0003,4.0003,4.0003,3.8203,3.8203,3.8203,3.9203,2.6753,2.6753,2.5652,2.5652,2.9152,2.9152,2.6452,2.6152,2.6452,2.6452,2.6452,2.6452,2.6452,2.6452,2.9253,2.6553,2.6553,2.6753,2.6753,2.65,2.65,2.65,3.55,3.55,3.55,3.35,2.7663,2.6652,2.5452,2.8152,2.6652,2.6652,2.5952,2.6652,2.6652,2.6652,2.8652,3.0652,3.0652,3.0652,2.8652,2.8652,4,4,4,4.45,4,4,3.77,3.77,2.6652,2.6652,2.6652,2.5952,2.6652,2.8652,2.874,2.8652,2.8652,2.8652,2.8652,2.8652,2.6652,2.6652,2.6652,2.5952,2.5952,2.6652,2.6652,2.6652,2.8652,2.8652,2.783,2.783,2.8652,2.8652,2.8652,2.8652,2.6652,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.8152,2.8152,2.8152,2.8152,2.8152,2.8152,2.8152,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.5452,2.8152,2.8152,2.8152,2.8152,2.6652,2.6652 40 | 2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6785,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,2.6185,3.9418,3.9418,3.9418,3.9418,3.9418,4.0818,4.0818,4.0818,4.0818,3.9018,3.9018,3.9018,3.9018,3.9018,4.0018,2.7068,2.7068,2.5965,2.5965,2.9465,2.9465,2.6765,2.6465,2.6765,2.6765,2.6765,2.6765,2.6765,2.6765,2.9568,2.9568,2.6868,2.7068,2.7068,2.65,2.65,2.65,3.55,3.55,3.55,3.35,2.7978,2.6965,2.6965,2.5765,2.8465,2.6965,2.6265,2.6965,2.6965,2.6965,2.8965,2.8965,3.0965,3.0965,3.0965,2.8965,2.8965,4,4,4,4.45,4.45,4,4,3.77,2.5,2.5,2.5,2.5,2.6265,2.6965,2.8965,2.874,2.8965,2.8965,2.8965,2.8965,4,4,4,4.45,2.6265,2.6965,2.6965,2.6965,2.8965,2.783,2.783,2.8965,2.8965,2.8965,2.8965,2.8965,2.8965,2.8965,2.8965,2.5765,2.8465,2.8465,2.8465,2.6965,2.6965,2.6965,2.6965,2.6965,2.6965,2.6965,2.6965,2.6965,2.6965,2.6965,2.6965,2.6965,2.8465,2.8465,2.8465,2.8465,2.8465,2.8465,2.8465,2.8465,2.8465,2.8465,2.6965,2.6965,2.6965,2.6965,2.6965,2.8965,2.8965,2.8965 41 | 2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,2.6372,4.0233,4.0233,4.0233,4.0233,4.0233,4.0233,4.0233,4.0233,4.0233,4.0233,4.0233,4.1633,4.1633,4.1633,4.1633,3.9833,3.9833,3.9833,3.9833,3.9833,4.0833,4.0833,4.0833,2.7383,2.7383,2.6278,2.6278,2.6278,2.9778,2.9778,2.7078,2.6778,2.6778,2.7078,2.7078,2.7078,2.7078,2.7078,2.9883,2.9883,2.7183,2.7183,2.7383,2.7383,2.65,2.65,2.65,3.55,3.55,3.35,3.35,2.8293,2.7278,2.6078,2.6078,2.7278,2.6578,2.7278,2.7278,2.9278,2.9278,3.1278,3.1278,3.1278,2.9278,4,4,4,4,4,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.874,2.9278,2.9278,2.9278,4,4,4,4.45,4,4,3.77,2.7278,2.9278,2.783,2.783,2.9278,2.9278,2.9278,2.9278,2.9278,2.9278,2.9278,4,4,4,4,4,2.7278,2.9278,2.9278,2.9278,2.7278,2.7278,2.7278,2.7278,2.7278,2.7278,2.7278,2.9278,2.9278,2.9278,2.9278,2.9278,2.7278,2.7278,2.7278,2.7278,2.7278,2.9278,2.9278,2.9278,2.9278,2.9278,2.9278,2.9278,2.7278,2.7278,2.7278,2.7278,2.7278 42 | 2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,2.656,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.1048,4.2448,4.2448,4.2448,4.2448,4.2448,4.2448,4.2448,4.0648,4.0648,4.0648,4.0648,4.0648,4.1648,4.1648,4.1648,4.1648,2.7698,2.7698,2.7698,2.659,2.659,2.659,2.659,3.009,3.009,3.009,2.739,2.709,2.739,2.739,2.739,2.739,2.739,3.0198,3.0198,3.0198,2.7498,2.7498,2.7698,2.7698,2.65,2.65,2.65,3.55,3.55,3.35,3.35,2.8608,2.759,2.759,2.639,2.639,2.689,2.759,2.959,2.959,3.159,3.159,3.159,4,4,4,4,4,2.5,2.5,2.5,2.5,2.65,2.65,2.65,2.65,2.65,2.65,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.959,4,4,4.45,4,4,3.77,3.77,4,4,4,2.959,2.959,2.959,2.959,4,4,4,4,4,4,4,4,4,4,4,4,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.689,2.689,2.689,2.689,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.759,2.689,2.689,2.689,2.689,2.759 43 | 4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.1863,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.3263,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.1463,4.2463,4.2463,4.2463,4.2463,4.2463,4.2463,2.8013,2.8013,2.8013,2.8013,2.6902,2.6902,2.6902,2.6902,2.6902,2.6902,3.0402,3.0402,3.0402,3.0402,3.0402,2.7702,2.7402,2.7402,2.7702,2.7702,2.7702,2.7702,2.7702,3.0513,3.0513,3.0513,2.7813,2.7813,2.8013,2.8013,2.65,2.65,2.65,2.65,3.55,3.55,3.35,2.8923,2.7902,2.7902,2.6702,2.6702,2.7202,2.7902,2.7902,2.9902,3.1902,3.1902,4,4,4,4,2.5,2.5,2.5,2.5,2.65,2.65,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.44,4,3.77,4,4,4,2.5,2.5,2.5,2.5,2.5,4,4,4,4.45,4.45,4.45,4.45,4.45,4.45,4.45,4.45,4.45,4.45,4.45,4.45,3.1902,3.1902,3.1902,3.1902,3.1902,3.1902,3.1902,3.1902,2.9902,2.9902,2.9902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.7902,2.9902,2.9902,2.9902,3.1902 44 | 4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.4078,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.2278,4.3278,4.2278,4.2278,4.2278,4.3278,4.3278,4.3278,4.3278,4.3278,4.3278,4.3278,4.3278,4.3278,4.3278,2.8328,2.8328,2.8328,2.8328,2.8328,2.8328,2.8328,2.8328,2.8328,2.8328,2.7215,2.7215,2.7215,2.7215,2.7215,2.7215,2.7215,2.7215,2.7215,3.0715,3.0715,3.0715,3.0715,3.0715,3.0715,3.0715,3.0715,3.0715,2.8015,2.8015,2.7715,2.7715,2.7715,2.7715,2.8015,2.8015,2.8015,2.8015,3.0828,3.0828,3.0828,2.8128,2.8128,2.8328,2.8328,2.8328,2.65,2.65,2.65,2.65,3.55,3.55,3.35,3.35,2.9238,2.8215,2.7015,2.7015,2.7515,2.8215,3.0215,3.0215,3.2215,3.2215,4,4,4,2.5,2.5,2.5,2.65,2.44,2.44,2.44,2.44,2.44,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.65,2.65,2.65,2.5,2.5,2.5,2.5,2.5,4.45,4,4,4,4,4,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77,4,4,4,4,4,4,4,4,4,4,3.0215,3.0215,3.0215,3.2215,3.2215,3.2215,3.2215,3.2215,3.2215,3.2215,3.2215,3.2215,3.2215,3.2215,3.0215,3.0215,3.0215,3.0215,3.0215 45 | 4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,4.4093,2.8643,2.8643,2.8643,2.8643,2.8643,2.8643,2.8643,2.8643,2.8643,2.8643,2.8643,2.8643,2.7528,2.7528,2.7528,2.7528,2.7528,2.7528,2.7528,2.7528,2.7528,2.7528,2.7528,2.7528,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,3.1028,2.8328,2.8328,2.8328,2.8328,2.8328,2.8328,2.8028,2.8028,2.8028,2.8028,2.8028,2.8028,2.8028,2.8328,2.8328,2.8328,3.1143,3.1143,2.8443,2.8443,2.8443,2.8443,2.8643,2.8643,2.8643,2.8643,2.65,2.65,2.65,3.55,3.55,3.35,3.35,2.9553,2.9553,2.8528,2.7328,2.7328,2.7828,2.8528,3.0528,3.0528,3.2528,3.2528,4,4,2.5,2.5,2.65,2.44,2.44,2.44,2.44,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.65,2.65,2.65,2.65,2.65,2.65,2.5,2.5,2.5,3.77,4,4,4,4,4,4,4,4,4,4,4,4,4,3.77,4,4,4,4,4.45,4.45,4.45,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 46 | 2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,2.784,3.134,3.134,3.134,3.134,3.134,3.134,3.134,3.134,3.134,3.134,3.134,3.134,3.134,3.134,3.134,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.834,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.864,2.8758,2.8758,2.8758,2.8758,2.8758,2.8758,2.8758,2.8958,2.8958,2.8958,2.8958,2.8958,2.65,2.65,2.65,3.55,3.55,3.35,3.35,3.35,2.9868,2.9868,2.884,2.884,2.764,2.764,2.814,2.884,3.084,3.084,3.284,3.284,4,2.5,2.5,2.5,2.65,2.44,2.44,2.5,2.5,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,2.5,2.5,2.5,2.44,2.44,2.44,2.65,2.65,2.65,2.65,2.65,2.65,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3.77,3.77,3.77,3.77,3.77,4,4,4,4.45,4.45,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 47 | 2.8652,2.8652,2.8652,2.8652,2.8652,2.8652,2.8652,2.8652,2.8652,2.8652,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.8952,2.9073,2.9073,2.9073,2.9073,2.9073,2.9073,2.9073,2.9073,2.9273,2.9273,2.9273,2.9273,2.9273,2.9273,2.9273,2.65,2.65,2.65,3.0183,3.0183,3.0183,3.0183,3.0183,3.0183,3.0183,3.0183,3.0183,2.9152,2.9152,2.9152,2.7952,2.7952,2.9152,2.9152,2.9152,3.1152,3.1152,3.3152,3.3152,4,2.5,2.5,2.65,2.44,2.44,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.2,3.2,3.2,3.2,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.44,2.44,2.65,2.65,2.65,2.65,2.65,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,4,4,4,4,4,3.77,3.77,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4.45 48 | 2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9388,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,2.9588,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,3.0498,2.9465,2.9465,2.9465,2.9465,2.9465,2.9465,2.8265,2.8265,2.8265,2.8265,2.9465,2.9465,2.9465,2.9465,3.1465,3.1465,3.3465,3.3465,4,4,2.5,2.5,2.65,2.44,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.8,3.8,3.8,3.2,3.2,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.5,2.44,2.44,2.44,2.65,2.65,2.65,2.65,2.65,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,4,4,4,4,4,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77,3.77 49 | 3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,3.0813,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.9778,2.8578,2.8578,2.8578,2.8578,2.8578,2.8578,2.8578,2.8578,2.8578,2.8578,2.9778,2.9078,2.9778,2.9778,2.9778,3.1778,3.1778,3.1778,3.3778,3.3778,3.3778,4,2.5,2.5,2.65,2.44,2.44,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.55,3.55,3.55,3.55,3.55,3.55,3.55,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.55,3.55,3.55,3.8,3.8,3.2,3.2,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.44,2.44,2.44,2.44,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 50 | 2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,3.009,3.009,3.009,3.009,3.009,3.009,3.009,3.009,3.009,3.009,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,3.009,3.009,3.009,3.009,3.009,3.009,3.009,3.009,3.009,3.009,2.939,3.009,3.009,3.009,3.009,3.009,3.009,2.889,3.009,3.009,3.009,3.009,3.009,2.889,2.889,2.889,2.889,2.889,3.009,3.009,3.009,2.889,3.009,3.009,3.009,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,2.889,3.009,3.009,2.939,2.939,2.939,3.009,3.009,3.009,3.209,3.209,3.409,3.409,3.409,3.409,3.409,3.409,4,4,2.5,2.5,2.44,2.44,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.8,3.8,3.8,3.8,3.55,3.55,3.55,3.55,3.55,3.55,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.55,3.55,3.55,3.8,3.2,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.5,2.44,2.44,2.44,2.44,2.44,2.44,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.5,2.5,2.5,2.5,2.5,2.5,4,4,4,4,4,4,4.5,4.5,4.5,4.5,4.5,4.5,4.5 51 | 3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.0402,3.2402,3.2402,3.2402,3.4402,3.4402,3.4402,3.4402,3.4402,3.4402,3.4402,4,4,2.5,2.5,2.65,2.65,2.44,2.44,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.8,3.8,3.8,3.55,3.55,3.55,3.55,3.55,3.55,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.6,3.6,3.6,3.6,3.6,3.6,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.55,3.55,3.8,3.8,3.2,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.5,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5 52 | 3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.2715,3.2715,3.2715,3.2715,3.2715,3.2715,3.2715,3.4715,3.4715,3.4715,3.4715,3.4715,3.2715,3.2715,3.2715,3.2715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,3.4715,4,4,2.5,2.5,2.5,2.5,2.65,2.44,2.44,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.8,3.55,3.55,3.55,3.55,3.55,3.55,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.3,3.3,3.3,3.3,3.3,3.55,3.55,3.8,3.8,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.5,2.5,2.44,2.44,2.44,2.44,2.44,2.44,2.44,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5 53 | 3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,3.5028,4,4,4,2.5,2.5,2.5,2.5,2.5,2.65,2.65,2.44,2.44,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.55,3.55,3.55,3.55,3.55,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.6,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.6,3.6,3.6,3.3,3.3,3.3,3.3,3.55,3.55,3.8,3.2,3.2,3.2,2.5,2.5,2.5,2.5,2.5,2.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.56,4.56,4.23,4.23,3.38,3.38,3.38,3.38 54 | 2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.5,2.5,2.5,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.65,2.65,2.65,2.65,2.65,2.65,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.65,2.65,2.44,2.44,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.55,3.55,3.55,3.55,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.6,3.6,3.6,3.6,3.6,3.6,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.65,3.65,3.6,3.6,3.6,3.3,3.3,3.3,3.3,3.55,3.8,3.8,3.2,3.2,3.2,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.47,3.47,3.47,3.47,3.47,3.47,3.58,3.58,3.58,3.58,3.58,3.58,3.58,4.67,4.67,4.56,4.56,4.56,4.23,4.23,3.38 55 | 2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.44,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.65,2.44,2.44,2.44,2.5,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.8,3.55,3.55,3.55,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.6,3.6,3.6,3.6,3.65,3.65,3.65,3.65,3.65,3.65,3.65,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.65,3.6,3.6,3.6,3.3,3.3,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.3,3.3,3.3,3.3,3.3,3.3,3.47,3.47,3.47,3.47,3.47,3.58,3.58,3.58,3.58,3.58,3.58,4.67,4.67,4.56,4.56,4.56 56 | 4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.2,3.8,3.8,3.8,3.8,3.55,3.55,3.55,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.3,3.6,3.6,3.6,3.6,3.6,3.65,3.65,3.65,3.65,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.5,3.53,3.53,3.53,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.53,3.3,3.3,3.3,3.3,3.47,3.47,3.47,3.58,3.58,3.58,3.58,3.58,3.58,4.67,4.67 57 | 4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,3.3,3.3,3.3,3.3,3.3,3.6,3.6,3.6,3.65,3.65,3.65,3.65,3.65,3.5,3.5,4.23,4.23,4.56,4.56,4.56,4.67,4.67,4.67,3.58,3.58,3.58,3.58,3.47,3.47,3.3,3.53,3.53,3.53,3.53,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,3.53,3.53,3.53,3.53,3.53,3.3,3.3,3.3,3.47,3.47,3.47,3.47,3.58,3.58,3.58,3.58,3.58 58 | 4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,3.38,3.38,3.2,3.75,3.75,3.75,3.45,3.12,3.9,3.9,3.8,3.8,3.8,3.54,3.54,3.54,3.38,3.7,4.23,4.23,4.23,4.56,4.56,4.56,4.67,4.67,3.58,3.58,3.58,3.58,3.47,3.47,3.47,3.3,3.53,3.53,3.53,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4,4,4,4,4,4,4,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4.045,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,4.23,3.53,3.53,3.53,3.53,3.53,3.3,3.3,3.3,3.47,3.47,3.47,3.58,3.58 59 | 4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,3.6,3.55,3.55,3.2,3.2,3.6,3.6,4.44,4.44,4.55,4.55,3.5,3.5,3.5,3.38,3.38,3.38,3.38,3.38,3.38,3.2,3.75,3.75,3.75,3.45,3.12,3.9,3.9,3.8,3.8,3.8,3.54,3.54,3.54,3.38,3.7,4.23,4.23,4.23,4.56,4.56,4.67,4.67,4.67,3.58,3.58,3.58,3.58,3.47,3.47,3.3,3.53,3.53,3.53,4.23,4.23,4.23,4.23,4.23,4.23,4,4,4,4,4,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4.123,4,4,4,4,4,4,4,4,4,4,4,4,4,4.23,4.23,4.23,4.23,4.23,4.23,4.23,3.53,3.53,3.53,3.53,3.53,3.3,3.3,3.3,3.3,3.47 60 | 4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,3.3,3.3,3.2,3.2,3.2,3.05,3.05,3.05,3.55,3.55,3.55,3.25,3.25,3.7,3.7,3.6,3.6,3.55,3.55,3.2,3.2,3.2,3.6,4.12,4.44,4.55,4.55,4.55,3.5,3.5,3.5,3.38,3.38,3.38,3.38,3.2,3.2,3.75,3.75,3.75,3.45,3.12,3.9,3.9,3.8,3.8,3.8,3.54,3.54,3.54,3.38,3.7,4.23,4.23,4.23,4.56,4.56,4.67,4.67,3.58,3.58,3.58,3.58,3.47,3.47,3.47,3.3,3.53,3.53,3.53,4.23,4.23,4.23,4.23,4.23,4,4,4,4,3.8,3.8,3.8,4.2,4.2,3.8,3.8,3.8,4.4,4.4,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.4,4.4,4.4,3.8,3.8,3.8,3.8,3.8,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,3.8,3.8,3.8,3.8,4,4,4,4,4,4,4,4,4,4,4.23,4.23,4.23,4.23,4.23,3.53,3.53,3.53,3.53,3.53,3.3,3.3 61 | 4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,4.5,3.12,3.9,3.8,3.8,3.54,3.54,3.38,3.38,3.38,3.38,3.4,3.9,4.2,4.3,4.3,3.3,3.3,3.2,3.2,3.2,3.2,3.05,3.05,3.55,3.55,3.55,3.25,3.25,3.9,3.7,3.7,3.6,3.55,3.55,3.2,3.2,3.2,3.6,3.6,4.44,4.44,4.55,4.55,3.5,3.5,3.5,3.38,3.38,3.38,3.38,3.2,3.2,3.75,3.75,3.45,3.45,3.12,3.9,3.9,3.8,3.8,3.8,3.54,3.54,3.54,3.38,3.7,4.23,4.23,4.56,4.56,4.67,4.67,4.67,3.58,3.58,3.58,3.58,3.47,3.47,3.47,3.3,3.53,3.53,3.53,4.23,4.23,4.23,4.23,4,4,4,4,3.8,3.8,3.8,4.2,4.2,3.8,3.8,3.8,4.4,4.6,4.6,4.6,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.7,4.6,4.6,4.6,4.6,4.6,4.6,4.6,4.4,4.4,4.4,3.8,3.8,3.8,3.8,4.2,4.2,4.2,4.2,4.2,4.2,4.2,4.2,3.8,3.8,3.8,4,4,4,4,4,4,4,4,4.23,4.23,4.23,4.23,4.23,3.53,3.53,3.53,3.53 62 | -------------------------------------------------------------------------------- /example/marm_data.m: -------------------------------------------------------------------------------- 1 | %% setup 2 | 3 | % read model, dx = 20 or 50 4 | dx = 20; 5 | v = dlmread(['marm_' num2str(dx) '.dat']); 6 | 7 | % initial model 8 | v0 = @(zz,xx)v(1)+.7e-3*max(zz-350,0); 9 | 10 | % frequency 11 | T = 10; % 10 seconds of data 12 | dt = 0.001; % sampling 13 | f = [0:1/T:30]; 14 | 15 | % wavelet 16 | f0 = 10; 17 | t0 = 0.1; 18 | w = f.^2.*exp(-(f/f0).^2).*exp(1i*2*pi*f*t0); 19 | 20 | % receivers, xr = .1 - 10km, with 2*dx spacing, zr = 2*dx 21 | xr = 100:2*dx:10000; 22 | zr = 2*dx*ones(1,length(xr)); 23 | 24 | % sources, xr = .1 - 10km, with 4*dx spacing, zr = 2*dx 25 | xs = 100:4*dx:10000; 26 | zs = 2*dx*ones(1,length(xs)); 27 | 28 | % regularization parameter 29 | alpha = 0.1; 30 | 31 | %% observed data 32 | % grid 33 | n = size(v); 34 | h = dx*[1 1]; 35 | z = [0:n(1)-1]*h(1); 36 | x = [0:n(2)-1]*h(2); 37 | [zz,xx] = ndgrid(z,x); 38 | 39 | % parameters 40 | model.n = n; 41 | model.h = h; 42 | model.zr = zr; 43 | model.xr = xr; 44 | model.zs = zs; 45 | model.xs = xs; 46 | 47 | % model 48 | m = 1./v(:).^2; 49 | 50 | %% data 51 | D = zeros(length(xr),length(xs),length(f)); 52 | for k = 1:length(f) 53 | model.f = f(k); 54 | D(:,:,k) = w(k)*full(F(m,model)); 55 | end 56 | D = permute(D,[3,1,2]); 57 | 58 | %% Fourier transformatie 59 | t = (0:dt:T)'; 60 | Dt = zeros(length(t),length(xr),length(xs)); 61 | for k = 1:length(f) 62 | %Dt = Dt + exp(-1i*2*pi*f(k)*t)*reshape(D(:,:,k),1,[]) + exp(1i*2*pi*f(k)*t)*reshape(conj(D(:,:,k)),1,[]); 63 | Dt = Dt + exp(-1i*2*pi*f(k)*t).*D(k,:,:) + exp(1i*2*pi*f(k)*t).*conj(D(k,:,:)); 64 | end 65 | 66 | %% 67 | imagesc(Dt(:,:,1) + Dt(:,:,100),[-1 1]*1e2) -------------------------------------------------------------------------------- /operators/opDFTR.m: -------------------------------------------------------------------------------- 1 | classdef opDFTR < opSpot 2 | % SPOT operator: DFT of real signal; output contains non-negative 3 | % frequencies only. The adjoint is exact, at the expense of the inverse 4 | % which differs roughly a factor two. 5 | % 6 | % use: 7 | % F = opDFTR(n) 8 | % 9 | % input: 10 | % n - length of input vector 11 | % 12 | % output: 13 | % F - FFT for real signals of length n, output will be of length floor(n/2) + 1 14 | % 15 | 16 | % Author: Tristan van Leeuwen 17 | % Seismic Laboratory for Imaging and Modeling 18 | % Department of Earch & Ocean Sciences 19 | % The University of British Columbia 20 | % 21 | % Date: February, 2012 22 | % 23 | % You may use this code only under the conditions and terms of the 24 | % license contained in the file LICENSE provided with this source 25 | % code. If you do not agree to these terms you may not use this 26 | % software. 27 | 28 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 29 | % Properties 30 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 31 | properties 32 | 33 | end 34 | 35 | 36 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 37 | % Methods 38 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 39 | methods 40 | 41 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 42 | % Constructor 43 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 44 | function op = opDFTR(n) 45 | 46 | m = floor(n/2) + 1; 47 | 48 | op = op@opSpot('opDFTR', m, n); 49 | op.cflag = 1; 50 | op.linear = 1; 51 | op.children = []; 52 | op.sweepflag = true; 53 | op.m = m; 54 | op.n = n; 55 | 56 | end %constructor 57 | 58 | function out = test(op) 59 | x = randn(op.n,10); 60 | 61 | xt1 = DFTR(op.m,op.n,x,1); 62 | xt2 = fft(x)/sqrt(op.n); 63 | xt3 = DFTR(op.m,op.n,xt1,-1); 64 | 65 | if mod(op.n,2)==1 66 | w = repmat([1; 2*ones(op.m-1,1)],1,10); 67 | else 68 | w = repmat([1; 2*ones(op.m-2,1); 1],1,10); 69 | end 70 | e1 = norm(xt1 - w.*xt2(1:op.m,:),'fro'); 71 | %e2 = norm(x - xt3,'fro'); 72 | 73 | x = randn(op.n,1); 74 | y = DFTR(op.m,op.n,x,1); 75 | e3 = abs((DFTR(op.m,op.n,x,1)'*y)/(x'*DFTR(op.m,op.n,y,-1)) - 1); 76 | 77 | if~(e1<1e-10); fprintf(2,'opDFTR: fft test failed, error = %g\n',e1); end 78 | if~(e3<1e-10); fprintf(2,'opDFTR: adjoint test failed, error = %g\n',e3);end 79 | 80 | out = (e1<1e-10)&(e3<1e-10); 81 | end 82 | 83 | 84 | 85 | end 86 | 87 | 88 | methods ( Access = protected ) 89 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 90 | % Multiply 91 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 92 | function out = multiply(op,in,mode) 93 | if mode==1 94 | out = DFTR(op.m,op.n,in,1); 95 | else 96 | out = DFTR(op.m,op.n,in,-1); 97 | end 98 | 99 | end %multiply 100 | 101 | end %protected methods 102 | 103 | end %classdef 104 | 105 | 106 | function output = DFTR(m,n,input,flag) 107 | 108 | nc = size(input,2); 109 | if flag == 1 110 | tmp = fft(input)/sqrt(n); 111 | if mod(n,2) == 1 112 | output = tmp(1:m,:) + [zeros(1,nc); conj(tmp(end:-1:m+1,:))]; 113 | else 114 | output = tmp(1:m,:) + [zeros(1,nc); conj(tmp(end:-1:m+1,:)); zeros(1,nc)]; 115 | end 116 | else 117 | if mod(n,2) == 1 118 | tmp = [input ; conj(input(end:-1:2,:))]; 119 | else 120 | tmp = [input ; conj(input(end-1:-1:2,:))]; 121 | end 122 | output = ifft(tmp)*sqrt(n); 123 | end 124 | end 125 | 126 | -------------------------------------------------------------------------------- /operators/opExtension.m: -------------------------------------------------------------------------------- 1 | classdef opExtension < opSpot 2 | % Extension operator. Pads input with constant values or zeros. 3 | % 4 | % use: 5 | % op = opExtension(n,nb,flag) 6 | % 7 | % input: 8 | % n - length of input 9 | % nb - number of points to add left nb(1) and right nb(2). If 10 | % length(nb)=1, use the same number of each side. 11 | % flag - 0: padd with zeros, 1: padd with boundary value. 12 | % 13 | 14 | % Author: Tristan van Leeuwen 15 | % Seismic Laboratory for Imaging and Modeling 16 | % Department of Earch & Ocean Sciences 17 | % The University of British Columbia 18 | % 19 | % Date: February, 2012 20 | % 21 | % You may use this code only under the conditions and terms of the 22 | % license contained in the file LICENSE provided with this source 23 | % code. If you do not agree to these terms you may not use this 24 | % software. 25 | 26 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 27 | % Properties 28 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 29 | properties (SetAccess = private) 30 | nb; 31 | a; 32 | end % Properties 33 | 34 | 35 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 36 | % Methods 37 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 38 | methods 39 | 40 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 41 | % Constructor 42 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 43 | function op = opExtension(n,nb,a) 44 | if length(nb)==1 45 | nb = [nb nb]; 46 | end 47 | nb = nb(1:2); 48 | m = n + sum(nb); 49 | if nargin<3 50 | a = 1; 51 | end 52 | 53 | % Construct operator 54 | op = op@opSpot('Extension', m, n); 55 | op.nb = nb; 56 | op.sweepflag = 1; 57 | op.a = a; 58 | end % Constructor 59 | 60 | function out = test(op) 61 | 62 | x = randn(op.n,1); 63 | y = opExtension_intrnl(op.n,op.nb,op.a,x,1); 64 | xt = opExtension_intrnl(op.n,op.nb,op.a,y,-1); 65 | 66 | e1 = abs((y'*y)/(x'*xt)-1); 67 | 68 | if~(e1<1e-10); fprintf(2,'opExtension: adjoint test failed, error = %g\n',e1); end 69 | 70 | out = (e1<1e-10); 71 | end 72 | 73 | 74 | end % Methods 75 | 76 | 77 | methods ( Access = protected ) 78 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 79 | % Multiply 80 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 81 | function y = multiply(op,x,mode) 82 | y = opExtension_intrnl(op.n,op.nb,op.a,x,mode); 83 | end % Multiply 84 | 85 | end % Methods 86 | 87 | end % Classdef 88 | 89 | 90 | %======================================================================= 91 | 92 | 93 | function y = opExtension_intrnl(n,nb,a,x,mode) 94 | nx = size(x,2); 95 | if mode == 1 96 | if a 97 | y = [repmat(x(1,:),nb(1),1);x;repmat(x(end,:),nb(2),1)]; 98 | else 99 | y = [zeros(nb(1),nx);x;zeros(nb(2),nx)]; 100 | end 101 | else 102 | y = x(nb(1)+1:end-nb(2),:); 103 | if a 104 | y(1,:) = y(1,:) + sum(x(1:nb(1),:),1); 105 | y(end,:) = y(end,:) + sum(x(end-nb(2)+1:end,:),1); 106 | end 107 | end 108 | end 109 | 110 | -------------------------------------------------------------------------------- /operators/opLInterp1D.m: -------------------------------------------------------------------------------- 1 | classdef opLInterp1D < opSpot 2 | % 1D cubic Lagrange interpolation. 3 | % 4 | % use: 5 | % op = opLInterp1D(x1,x2) 6 | % 7 | % input: 8 | % x1 - input grid (i.e., [0:10:1000]) 9 | % x2 - output grid (i.e., [0:1:1000]) 10 | % 11 | % output: 12 | % op - SPOT operator: cubic Lagrange interpolation for input vectors of 13 | % same length as x1. Output has same lenght as x2. 14 | % 15 | % grids may also be non-equidistant and do not have to coincide 16 | % completely. Output outside of the domain is set to zero. 17 | 18 | % Author: Tristan van Leeuwen 19 | % Seismic Laboratory for Imaging and Modeling 20 | % Department of Earch & Ocean Sciences 21 | % The University of British Columbia 22 | % 23 | % Date: February, 2012 24 | % 25 | % You may use this code only under the conditions and terms of the 26 | % license contained in the file LICENSE provided with this source 27 | % code. If you do not agree to these terms you may not use this 28 | % software. 29 | 30 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 31 | % Properties 32 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33 | properties 34 | x1, x2; 35 | end 36 | 37 | 38 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 39 | % Methods 40 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 41 | methods 42 | 43 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 44 | % Constructor 45 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 46 | function op = opLInterp1D(x1,x2) 47 | op = op@opSpot('opLInterp1D', length(x2), length(x1)); 48 | op.cflag = 1; 49 | op.linear = 1; 50 | op.children = []; 51 | op.sweepflag = true; 52 | op.x1 = x1; 53 | op.x2 = x2; 54 | 55 | end %constructor 56 | 57 | 58 | function out = test(op) 59 | A = getLA(op.x1,op.x2); 60 | % test1 61 | f1 = op.x1.^3; 62 | f2 = op.x2.^3; 63 | f2(op.x2op.x1(end)) = 0; 64 | e = norm(f2 - A*f1)/norm(f2); 65 | 66 | if e < 1e-10; 67 | %fprintf(1,'opLInterp1D: interpolation test succesfull: error = %g\n',e); 68 | out = 1; 69 | else 70 | %fprintf(2,'opLInterp1D: interpolation test failed : error = %g\n',e); 71 | out = 0; 72 | end 73 | 74 | % test2 75 | f1 = randn(size(f1)); 76 | f2 = randn(size(f2)); 77 | e = abs(1 - ((A*f1)'*f2) / (f1'*(A'*f2))); 78 | 79 | if e < 1e-10; 80 | %fprintf(1,'opLInterp1D: adjoint test succesfull: error = %g\n',e); 81 | out = out*1; 82 | else 83 | %fprintf(2,'opLInterp1D: adjoint test failed : error = %g\n',e); 84 | out = out*0; 85 | end 86 | 87 | end 88 | 89 | end 90 | 91 | 92 | methods ( Access = protected ) 93 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 94 | % Multiply 95 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 96 | function out = multiply(op,in,mode) 97 | A = getLA(op.x1,op.x2); 98 | if ~isempty(A) 99 | if mode==1 100 | out = full(A*in); 101 | else 102 | out = full(A'*in); 103 | end 104 | else 105 | fprintf(1,'Something wrong with grid\n'); 106 | return; 107 | end 108 | end %multiply 109 | 110 | end %protected methods 111 | 112 | end %classdef 113 | 114 | function A = getLA(x1,x2) 115 | % find interior points 116 | ik = find(x2 >= x1(1) & x2 <= x1(end)); 117 | % sizes 118 | n1=length(x1);n2=length(x2);nk=length(ik); 119 | % check 120 | if ~nk 121 | A = []; 122 | return; 123 | end 124 | 125 | % initialize stuff 126 | I = zeros(4*nk); J = I; S = I; 127 | a=1;b=2;c=3;d=4; 128 | l = 1; 129 | 130 | % loop 131 | for i = 1:nk 132 | k = ik(i); 133 | if x2(k)1) 135 | b=b-1; 136 | end 137 | a=b-1;c=b+1;d=c+1; 138 | elseif x2(k)>x1(c) 139 | while (x2(k)>x1(c))&&(c+1= x1(1) & X2(:,1) <= x1(end) & X2(:,2) >=y1(1) & X2(:,2) <= y1(end)); 123 | % sizes 124 | nx1 = length(x1); ny1 = length(y1); 125 | n1 = nx1*ny1; 126 | n2 = size(X2,1); 127 | nk = length(ik); 128 | % check 129 | if ~nk 130 | A = []; 131 | return; 132 | end 133 | % index sets for sparse matrix 134 | I = zeros(4*nk); J = I; S = J; 135 | % loop 136 | l = 1; 137 | for i = 1:nk 138 | k = ik(i); 139 | ix = min(find(x1<=X2(k,1), 1, 'last' ), nx1 - 1); 140 | iy = min(find(y1<=X2(k,2), 1, 'last' ), ny1 - 1); 141 | a = ix + nx1*(iy - 1); 142 | b = ix + nx1*(iy); 143 | c = ix + 1 + nx1*(iy - 1); 144 | d = ix + 1 + nx1*(iy); 145 | 146 | I(l) = k; J(l) = a; S(l) = (X2(k,1) - x1(ix+1))*(X2(k,2) - y1(iy+1))/((x1(ix) - x1(ix+1))*(y1(iy) - y1(iy+1))); 147 | I(l+1) = k; J(l+1) = b; S(l+1) = (X2(k,1) - x1(ix+1))*(X2(k,2) - y1(iy)) /((x1(ix) - x1(ix+1))*(y1(iy+1) - y1(iy))); 148 | I(l+2) = k; J(l+2) = c; S(l+2) = (X2(k,1) - x1(ix)) *(X2(k,2) - y1(iy+1))/((x1(ix+1) - x1(ix))*(y1(iy) - y1(iy+1))); 149 | I(l+3) = k; J(l+3) = d; S(l+3) = (X2(k,1) - x1(ix)) *(X2(k,2) - y1(iy)) /((x1(ix+1) - x1(ix))*(y1(iy+1) - y1(iy))); 150 | l = l + 4; 151 | end 152 | % construct matrix 153 | A = sparse(I(1:l-1),J(1:l-1),S(1:l-1),n2,n1); 154 | end 155 | 156 | 157 | 158 | 159 | 160 | -------------------------------------------------------------------------------- /operators/opSmooth.m: -------------------------------------------------------------------------------- 1 | classdef opSmooth < opSpot 2 | % Smoothing by convolving with [.25 .5 .25]. 3 | % 4 | % use: 5 | % op = opSmooth(n,k) 6 | % 7 | % input: 8 | % n - length of input 9 | % k - number of times to convolve. 10 | % 11 | % output: 12 | % op - SPOT operator 13 | 14 | % Author: Tristan van Leeuwen 15 | % Seismic Laboratory for Imaging and Modeling 16 | % Department of Earch & Ocean Sciences 17 | % The University of British Columbia 18 | % 19 | % Date: February, 2012 20 | % 21 | % You may use this code only under the conditions and terms of the 22 | % license contained in the file LICENSE provided with this source 23 | % code. If you do not agree to these terms you may not use this 24 | % software. 25 | 26 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 27 | % Properties 28 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 29 | properties 30 | k; 31 | end 32 | 33 | 34 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 35 | % Methods 36 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 37 | methods 38 | 39 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 40 | % Constructor 41 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 42 | function op = opSmooth(n, k) 43 | 44 | op = op@opSpot('opSmooth',n,n); 45 | op.cflag = 1; 46 | op.linear = 1; 47 | op.children = []; 48 | op.sweepflag = true; 49 | 50 | op.k = k; 51 | end %constructor 52 | 53 | function out = test(op) 54 | 55 | x = randn(op.n,1); 56 | y = mysmooth(x,op.k,1); 57 | xt = mysmooth(y,op.k,-1); 58 | 59 | e1 = abs((y'*y)/(x'*xt)-1); 60 | 61 | if~(e1<1e-10); fprintf(2,'opSmooth: adjoint test failed, error = %g\n',e1); end 62 | 63 | out = (e1<1e-10); 64 | end 65 | 66 | end 67 | 68 | 69 | methods ( Access = protected ) 70 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 71 | % Multiply 72 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 73 | function out = multiply(op,in,mode) 74 | if mode==1 75 | out = mysmooth(in,op.k,1); 76 | else 77 | out = mysmooth(in,op.k,-1); 78 | end 79 | end %multiply 80 | end %protected methods 81 | 82 | end %classdef 83 | 84 | 85 | function output=mysmooth(x,k,mode) 86 | n = size(x,1); 87 | f = [.25 .5 .25]; 88 | 89 | S = spdiags(repmat(f,n,1),[-1:1],n,n); S(1,1)=S(1,1)+f(1); S(n,n)=S(n,n)+f(end); 90 | S = S^k; 91 | 92 | %convolve 93 | if mode==1 94 | output = full(S*x); 95 | else 96 | output = full(S'*x); 97 | end 98 | end -------------------------------------------------------------------------------- /operators/opSpline1D.m: -------------------------------------------------------------------------------- 1 | classdef opSpline1D < opSpot 2 | % 1D cubic spline evaluation. 3 | % 4 | % use: 5 | % op = opSpline1D(x1,x2,BC) 6 | % 7 | % input: 8 | % x1 - equidistant input grid 9 | % x2 - output grid, may be non-equidistant 10 | % BC - boundary conditions [left, right]. 0 = Dirichlet, 1 = Neumann 11 | 12 | % Author: Tristan van Leeuwen 13 | % Seismic Laboratory for Imaging and Modeling 14 | % Department of Earch & Ocean Sciences 15 | % The University of British Columbia 16 | % 17 | % Date: February, 2012 18 | % 19 | % You may use this code only under the conditions and terms of the 20 | % license contained in the file LICENSE provided with this source 21 | % code. If you do not agree to these terms you may not use this 22 | % software. 23 | 24 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 25 | % Properties 26 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 27 | properties 28 | x1,x2,BC; 29 | end 30 | 31 | 32 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33 | % Methods 34 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 35 | methods 36 | 37 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 38 | % Constructor 39 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 40 | function op = opSpline1D(x1,x2,BC) 41 | op = op@opSpot('opSpline1D', length(x2), length(x1)); 42 | op.cflag = 1; 43 | op.linear = 1; 44 | op.children = []; 45 | op.sweepflag = true; 46 | 47 | op.x1 = x1(:); 48 | op.x2 = x2(:); 49 | op.BC = BC; 50 | end %constructor 51 | 52 | function out = test(op) 53 | 54 | x = randn(op.n,1); 55 | y = splneval1(op.x1,x,op.x2,[],1,op.BC); 56 | xt = splneval1(op.x1,[],op.x2,y,-1,op.BC); 57 | 58 | e1 = abs((y'*y)/(x'*xt)-1); 59 | 60 | if~(e1<1e-10); fprintf(2,'opSpline1D: adjoint test failed, error = %g\n',e1); end 61 | 62 | out = (e1<1e-10); 63 | end 64 | end 65 | 66 | 67 | methods ( Access = protected ) 68 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 69 | % Multiply 70 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 71 | function out = multiply(op,in,mode) 72 | 73 | if mode==1 74 | out = splneval1(op.x1,in,op.x2,[],1,op.BC); 75 | else 76 | out = splneval1(op.x1,[],op.x2,in,-1,op.BC); 77 | end 78 | 79 | 80 | end %multiply 81 | 82 | end %protected methods 83 | 84 | end %classdef 85 | 86 | function output = splneval1(xi,yi,x,y,flag,bc) 87 | 88 | h = xi(2) - xi(1); 89 | nh = 4; 90 | xi = [xi(1) - h*[nh:-1:1]'; xi; xi(end) + h*[1:nh]']; 91 | ni = length(xi); 92 | nx = length(x); 93 | 94 | A = [-1 3 -3 1; 3 -6 3 0; -3 0 3 0; 1 4 1 0]/6; 95 | 96 | if flag>0 97 | m = size(yi,2); 98 | output = zeros(nx,m); 99 | 100 | yi = [bc(1)*repmat(yi(1,:),nh,1); yi; bc(2)*repmat(yi(end,:),nh,1)]; 101 | 102 | for k = 1:nx 103 | j = floor((x(k) - xi(1))/h) + 1; 104 | 105 | t = (x(k) - (xi(1) + (j-1)*h))/h; 106 | 107 | j = min(max(j,2),ni-2); 108 | 109 | output(k,:) = t.^[3:-1:0]*A*yi(j-1:j+2,:); 110 | end 111 | else 112 | m = size(y,2); 113 | output = zeros(ni,m); 114 | 115 | for k = 1:nx 116 | j = floor((x(k) - xi(1))/h) + 1; 117 | 118 | t = (x(k) - (xi(1) + (j-1)*h))/h; 119 | 120 | j = min(max(j,2),ni-2); 121 | 122 | output(j-1:j+2,:) = output(j-1:j+2,:) + (A'*t.^[3:-1:0]')*y(k,:); 123 | end 124 | 125 | output(nh+1,:) = output(nh+1,:) + bc(1)*sum(output(1:nh,:),1); 126 | output(end-nh,:) = output(end-nh,:) + bc(2)*sum(output(end-nh+1:end,:),1); 127 | output = output(nh+1:end-nh,:); 128 | 129 | end 130 | 131 | end 132 | 133 | 134 | -------------------------------------------------------------------------------- /operators/opSpline2D.m: -------------------------------------------------------------------------------- 1 | classdef opSpline2D < opSpot 2 | % 2D cubic spline evaluation. 3 | % 4 | % use: 5 | % op = opSpline2D(x1,y1,x2,y2,BC) 6 | % 7 | % input: 8 | % x1 (fast dim),y1 (slow dim) - equidistant input grid 9 | % x2 (fast dim),y2 (slow dim) - output grid 10 | % BC - boundary conditions [top, bottom, left, right]. 0 = Dirichlet, 1 = Neumann. 11 | % 12 | % in principle this gives the same result as 13 | % opKron(opSpline1D(y1,y2,[left right]),opSpline1D(x1,x2,[top bottom])); 14 | 15 | % Author: Tristan van Leeuwen 16 | % Seismic Laboratory for Imaging and Modeling 17 | % Department of Earch & Ocean Sciences 18 | % The University of British Columbia 19 | % 20 | % Date: February, 2012 21 | % 22 | % You may use this code only under the conditions and terms of the 23 | % license contained in the file LICENSE provided with this source 24 | % code. If you do not agree to these terms you may not use this 25 | % software. 26 | 27 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 28 | % Properties 29 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 30 | properties 31 | x1,y1,x2,y2,BC; 32 | end 33 | 34 | 35 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 36 | % Methods 37 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 38 | methods 39 | 40 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 41 | % Constructor 42 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 43 | function op = opSpline2D(x1,y1,x2,y2,BC) 44 | op = op@opSpot('opSpline2D', length(x2)*length(y2), length(x1)*length(y1)); 45 | op.cflag = 1; 46 | op.linear = 1; 47 | op.children = []; 48 | 49 | op.x1 = x1; 50 | op.x2 = x2; 51 | op.y1 = y1; 52 | op.y2 = y2; 53 | op.BC = BC; 54 | end %constructor 55 | 56 | end 57 | 58 | 59 | methods ( Access = protected ) 60 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 61 | % Multiply 62 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 63 | function out = multiply(op,in,mode) 64 | 65 | if mode==1 66 | out = splneval2(op.x1,op.y1,in,op.x2,op.y2,[],1,op.BC); 67 | else 68 | out = splneval2(op.x1,op.y1,[],op.x2,op.y2,in,-1,op.BC); 69 | end 70 | 71 | 72 | end %multiply 73 | 74 | end %protected methods 75 | 76 | end %classdef 77 | 78 | function output = splneval2(xi,yi,si,x,y,s,flag,bc) 79 | % 2D Cubic spline evaluation 80 | % use: output = lagintp(x, y, s, x1, y1, s1, flag,{bc}) 81 | % input: x,y - grid 82 | % s - corresponding data, for forward mode 83 | % x1,y1 - grid 84 | % s1 - corresponding data, for adjoint mode 85 | % flag - 1:forward, 2:adjoint 86 | % bc - boundary conditions [top bot left right], 0=dirichlet,1=neumann. 87 | % default: bc=[1 1 1 1] 88 | %output: forward: s1, adjoint: s 89 | %note: all vectors are assumed column vectors 90 | % 91 | if (size(xi)==size(x))&(size(yi)==size(y)) 92 | if ~norm(xi-x)&~norm(yi-y) 93 | if flag>0 94 | output = si(:); 95 | else 96 | output = s(:); 97 | end 98 | return; 99 | end 100 | end 101 | if (nargin<8)|(length(bc)<4) 102 | bc = [1 1 1 1]; 103 | end 104 | 105 | nx = length(x); dx = x(2)-x(1); 106 | ny = length(y); dy = y(2)-y(1); 107 | 108 | nxi = length(xi); dxi = xi(2)-xi(1); 109 | nyi = length(yi); dyi = yi(2)-yi(1); 110 | 111 | %extend grid 112 | xi = [xi(1)-2*dxi:dxi:xi(end)+2*dxi]'; 113 | yi = [yi(1)-2*dyi:dyi:yi(end)+2*dyi]'; 114 | nxi = length(xi); dxi = xi(2)-xi(1); 115 | nyi = length(yi); dyi = yi(2)-yi(1); 116 | % 117 | if flag==1 118 | 119 | si = reshape(si,nxi-4,nyi-4); 120 | output = zeros(nx,ny); 121 | 122 | %bc's 123 | %top,bottom 124 | si = [repmat(bc(1)*si(1,:),2,1);si;repmat(bc(2)*si(end,:),2,1)]; 125 | %left,right 126 | si = [repmat(bc(3)*si(:,1),1,2) si repmat(bc(4)*si(:,end),1,2)]; 127 | 128 | for k = 1:nx 129 | for l = 1:ny 130 | xh = (x(k)-xi(1))/dxi; 131 | ih = floor(xh); xr = xh-ih; ih = ih+1; 132 | im = max(1,min(nxi,ih-1));i0 = max(1,min(nxi,ih)); 133 | i1 = max(1,min(nxi,ih+1));i2 = max(1,min(nxi,ih+2)); 134 | % 135 | yh = (y(l)-yi(1))/dyi; 136 | jh = floor(yh); yr = yh-jh; jh = jh+1; 137 | jm = max(1,min(nyi,jh-1));j0 = max(1,min(nyi,jh)); 138 | j1 = max(1,min(nyi,jh+1));j2 = max(1,min(nyi,jh+2)); 139 | % 140 | cimjm = si(im,jm); ci0jm = si(i0,jm); ci1jm = si(i1,jm); ci2jm = si(i2,jm); 141 | cimj0 = si(im,j0); ci0j0 = si(i0,j0); ci1j0 = si(i1,j0); ci2j0 = si(i2,j0); 142 | cimj1 = si(im,j1); ci0j1 = si(i0,j1); ci1j1 = si(i1,j1); ci2j1 = si(i2,j1); 143 | cimj2 = si(im,j2); ci0j2 = si(i0,j2); ci1j2 = si(i1,j2); ci2j2 = si(i2,j2); 144 | % 145 | sh0 = (1./36.)*( 16*ci0j0+ 4*(cimj0+ci0jm+ci0j1+ci1j0)+ (cimjm+ci1jm+cimj1+ci1j1) ); 146 | sh1 = (1./12.)*(4*(ci1j0-cimj0) + ((ci1j1-cimjm)+(ci1jm-cimj1) )); 147 | sh2 = (1./12.)*(4*(ci0j1-ci0jm) + ((ci1j1-cimjm)-(ci1jm-cimj1) )); 148 | sh3 = (1./12.)*( (ci1j1+ci1jm+cimj1+cimjm)+ 4*(ci1j0+cimj0)-2*(ci0jm+ci0j1)-8*ci0j0); 149 | sh4 = 0.25*( (ci1j1-ci1jm) + (cimjm-cimj1)); 150 | sh5 = (1./12.)*( (ci1j1+ci1jm+cimj1+cimjm)+ 4*(ci0j1+ci0jm)-2*(ci1j0+cimj0)-8*ci0j0); 151 | sh6 = (1./36.)*(12*(ci0j0-ci1j0)+4*(ci2j0-cimj0)+3*((ci0j1-ci1j1)+(ci0jm-ci1jm))+((ci2j1-cimj1)+(ci2jm-cimjm))); 152 | sh7 = 0.25*(2*(ci0jm-ci0j1)+(ci1j1-ci1jm)+(cimj1-cimjm)); 153 | sh8 = 0.25*(2*(cimj0-ci1j0)+(ci1j1-cimj1)+(ci1jm-cimjm)); 154 | sh9 = (1./36.)*(12*(ci0j0-ci0j1)+4*(ci0j2-ci0jm)+3*((ci1j0-ci1j1)+(cimj0-cimj1))+((ci1j2-ci1jm)+(cimj2-cimjm)) ); 155 | sh10 = (1./12.)*(3*((ci0j1-ci0jm)+(ci1jm-ci1j1))+(ci2j1-ci2jm)+(cimjm-cimj1)); 156 | sh11 = ci0j0-0.5*(cimj0+ci0jm+ci0j1+ci1j0)+0.25*(cimjm+cimj1+ci1jm+ci1j1); 157 | sh12 = (1./12.)*(3*((ci1j0-ci1j1)+(cimj1-cimj0) )+(cimjm-ci1jm)+(ci1j2-cimj2) ); 158 | sh13 = (1./12.)*(6*(ci1j0-ci0j0)+3*((ci0j1-ci1jm)+(ci0jm-ci1j1))+2*(cimj0-ci2j0)+(ci2jm-cimjm)+(ci2j1-cimj1) ); 159 | sh14 = (1./12.)*(6*(ci0j1-ci0j0)+3*((cimj0-cimj1)+(ci1j0-ci1j1))+2*(ci0jm-ci0j2)+(ci1j2-cimjm)+(cimj2-ci1jm) ); 160 | sh15 = (1./36.)*(9*((ci0j0-ci0j1)+(ci1j1-ci1j0))+3*((ci2j0-ci2j1)+(cimj1-cimj0)+(ci0j2-ci1j2)+(ci1jm-ci0jm))+((cimjm-ci2jm)+ (ci2j2-cimj2)) ); 161 | % 162 | v0 = sh0 + xr*(sh1 + xr*(sh3 + xr*sh6 )); 163 | v1 = sh2 + xr*(sh4 + xr*(sh7 + xr*sh10)); 164 | v2 = sh5 + xr*(sh8 + xr*(sh11 + xr*sh13)); 165 | v3 = sh9 + xr*(sh12 + xr*(sh14 + xr*sh15)); 166 | % 167 | output(k,l) = v0 + yr*(v1 + yr*(v2 + yr*v3)); 168 | end 169 | end 170 | elseif flag==-1 171 | output = zeros(nxi,nyi); 172 | s = reshape(s,nx,ny); 173 | for k = 1:nx 174 | for l = 1:ny 175 | xh = (x(k)-xi(1))/dxi; 176 | ih = floor(xh); xr = xh-ih; ih = ih+1; 177 | im = max(1,min(nxi,ih-1));i0 = max(1,min(nxi,ih)); 178 | i1 = max(1,min(nxi,ih+1));i2 = max(1,min(nxi,ih+2)); 179 | % 180 | yh = (y(l)-yi(1))/dyi; 181 | jh = floor(yh); yr = yh-jh; jh = jh+1; 182 | jm = max(1,min(nyi,jh-1));j0 = max(1,min(nyi,jh)); 183 | j1 = max(1,min(nyi,jh+1));j2 = max(1,min(nyi,jh+2)); 184 | 185 | ci2j2 = (1/36)*xr^3*yr^3; 186 | ci1j0 = ((1/9 + xr/3 + xr^2/3 - xr^3/3 - yr^2/6 - 0.5*xr*yr^2 - 0.5*xr^2*yr^2 + (xr^3*yr^2)/2 + yr^3/12 + (xr*yr^3)/4 + (xr^2*yr^3)/4 - (xr^3*yr^3)/4)); 187 | ci0j1 = ((1/9 - xr^2/6 + xr^3/12 + yr/3 - 0.5*xr^2*yr + (xr^3*yr)/4 + yr^2/3 - 0.5*xr^2*yr^2 + (xr^3*yr^2)/4 - yr^3/3 + (xr^2*yr^3)/2 - (xr^3*yr^3)/4)); 188 | ci2j1 = ((xr^3/36 + (xr^3*yr)/12 + (xr^3*yr^2)/12 - (xr^3*yr^3)/12)); 189 | ci1j2 = ((yr^3/36 + (xr*yr^3)/12 + (xr^2*yr^3)/12 - (xr^3*yr^3)/12)); 190 | ci0jm = ((1/9 - xr^2/6 + xr^3/12 - yr/3 + 0.5*xr^2*yr - (xr^3*yr)/4 + yr^2/3 - 0.5*xr^2*yr^2 + (xr^3*yr^2)/4 - yr^3/9 + (xr^2*yr^3)/6 - (xr^3*yr^3)/12)); 191 | cimj0 = ((1/9 - xr/3 + xr^2/3 - xr^3/9 - yr^2/6 + 0.5*xr*yr^2 - 0.5*xr^2*yr^2 + (xr^3*yr^2)/6 + yr^3/12 - (xr*yr^3)/4 + (xr^2*yr^3)/4 - (xr^3*yr^3)/12)); 192 | ci2jm = ((xr^3/36 - (xr^3*yr)/12 + (xr^3*yr^2)/12 - (xr^3*yr^3)/36)); 193 | cimj2 = ((yr^3/36 - (xr*yr^3)/12 + (xr^2*yr^3)/12 - (xr^3*yr^3)/36)); 194 | cimjm = ((1/36 - xr/12 + xr^2/12 - xr^3/36 - yr/12 + 0.25*xr*yr - 0.25*xr^2*yr + (xr^3*yr)/12 + yr^2/12 - 0.25*xr*yr^2 + 0.25*xr^2*yr^2 - (xr^3*yr^2)/12 - yr^3/36 + (xr*yr^3)/12 - (xr^2*yr^3)/12 + (xr^3*yr^3)/36)); 195 | ci2j0 = ((xr^3/9 - (xr^3*yr^2)/6 + (xr^3*yr^3)/12)); 196 | cimj1 = ((1/36 - xr/12 + xr^2/12 - xr^3/36 + yr/12 - 0.25*xr*yr + 0.25*xr^2*yr - (xr^3*yr)/12 + yr^2/12 - 0.25*xr*yr^2 + 0.25*xr^2*yr^2 - (xr^3*yr^2)/12 - yr^3/12 + (xr*yr^3)/4 - (xr^2*yr^3)/4 + (xr^3*yr^3)/12)); 197 | ci0j2 = ((yr^3/9 - (xr^2*yr^3)/6 + (xr^3*yr^3)/12)); 198 | ci1jm = ((1/36 + xr/12 + xr^2/12 - xr^3/12 - yr/12 - 0.25*xr*yr - 0.25*xr^2*yr + (xr^3*yr)/4 + yr^2/12 + 0.25*xr*yr^2 + 0.25*xr^2*yr^2 - (xr^3*yr^2)/4 - yr^3/36 - (xr*yr^3)/12 - (xr^2*yr^3)/12 + (xr^3*yr^3)/12)); 199 | ci0j0 = ((4/9 - (2*xr^2)/3 + xr^3/3 - (2*yr^2)/3 + xr^2*yr^2 - (xr^3*yr^2)/2 + yr^3/3 - (xr^2*yr^3)/2 + (xr^3*yr^3)/4)); 200 | ci1j1 = ((1/36 + xr/12 + xr^2/12 - xr^3/12 + yr/12 + 0.25*xr*yr + 0.25*xr^2*yr - (xr^3*yr)/4 + yr^2/12 + 0.25*xr*yr^2 + 0.25*xr^2*yr^2 - (xr^3*yr^2)/4 - yr^3/12 - (xr*yr^3)/4 - (xr^2*yr^3)/4 + (xr^3*yr^3)/4)); 201 | 202 | 203 | output(im,jm) = output(im,jm)+cimjm*s(k,l); 204 | output(im,j0) = output(im,j0)+cimj0*s(k,l); 205 | output(im,j1) = output(im,j1)+cimj1*s(k,l); 206 | output(im,j2) = output(im,j2)+cimj2*s(k,l); 207 | output(i0,jm) = output(i0,jm)+ci0jm*s(k,l); 208 | output(i0,j0) = output(i0,j0)+ci0j0*s(k,l); 209 | output(i0,j1) = output(i0,j1)+ci0j1*s(k,l); 210 | output(i0,j2) = output(i0,j2)+ci0j2*s(k,l); 211 | output(i1,jm) = output(i1,jm)+ci1jm*s(k,l); 212 | output(i1,j0) = output(i1,j0)+ci1j0*s(k,l); 213 | output(i1,j1) = output(i1,j1)+ci1j1*s(k,l); 214 | output(i1,j2) = output(i1,j2)+ci1j2*s(k,l); 215 | output(i2,jm) = output(i2,jm)+ci2jm*s(k,l); 216 | output(i2,j0) = output(i2,j0)+ci2j0*s(k,l); 217 | output(i2,j1) = output(i2,j1)+ci2j1*s(k,l); 218 | output(i2,j2) = output(i2,j2)+ci2j2*s(k,l); 219 | 220 | end 221 | end 222 | 223 | % left,right 224 | output(:,3) = output(:,3) + bc(3)*sum(output(:,1:2),2); 225 | output(:,end-2) = output(:,end-2) + bc(4)*sum(output(:,end-1:end),2); 226 | % top,bottom 227 | output(3,:) = output(3,:) + bc(1)*sum(output(1:2,:),1); 228 | output(end-2,:) = output(end-2,:) + bc(2)*sum(output(end-1:end,:),1); 229 | 230 | output = output(3:end-2,3:end-2); 231 | end 232 | output = output(:); 233 | %%EOF 234 | end -------------------------------------------------------------------------------- /optimization/BBiter.m: -------------------------------------------------------------------------------- 1 | function [xk,hist] = BBiter(fh,x0,tol,maxit) 2 | % BB iteration to solve min_x f(x) 3 | % 4 | % input: 5 | % fh - function handle that returns value and gradient: [f,g] = fh(x) 6 | % x0 - initial iterate 7 | % tol - stop when ||g||_2 <= tol 8 | % maxit - stop when iter > maxit 9 | % 10 | % output: 11 | % x - final iterate 12 | % hist - array with rows [iter, f, g] 13 | 14 | k = 0; 15 | xk = x0; 16 | [fk,gk] = fh(xk); 17 | tk = norm(gk); 18 | 19 | hist = [k,fk,norm(gk)]; 20 | 21 | fprintf(1,' k , fk , ||gk||_2\n'); 22 | fprintf(1,'%3d, %1.5e , %1.5e \n',hist); 23 | 24 | while (norm(gk) > tol)&&(k < maxit) 25 | % update 26 | sk = -gk/tk; 27 | xk = xk + sk; 28 | 29 | % gradient evaluation 30 | [fk,gk] = fh(xk); 31 | 32 | % update steplength 33 | tk = tk + (sk'*gk)/norm(sk)^2; 34 | 35 | k = k + 1; 36 | 37 | hist(k,:) = [k,fk,norm(gk)]; 38 | fprintf(1,'%3d, %1.5e , %1.5e \n',k,fk,norm(gk)); 39 | end -------------------------------------------------------------------------------- /optimization/SDiter.m: -------------------------------------------------------------------------------- 1 | function [xk,hist] = SDiter(fh,x0,tol,maxit,alpha) 2 | % Steepest descent iteration to solve min_x f(x) 3 | % 4 | % input: 5 | % fh - function handle that returns value and gradient: [f,g] = fh(x) 6 | % x0 - initial iterate 7 | % tol - stop when ||g||_2 <= tol 8 | % maxit - stop when iter > maxit 9 | % alpha - stepsize 10 | % 11 | % output: 12 | % x - final iterate 13 | % hist - array with rows [iter, f, g] 14 | 15 | k = 0; 16 | xk = x0; 17 | [fk,gk] = fh(xk); 18 | 19 | hist = [k,fk,norm(gk)]; 20 | 21 | fprintf(1,' k , fk , ||gk||_2\n'); 22 | fprintf(1,'%3d, %1.5e , %1.5e \n',hist); 23 | 24 | while (norm(gk) > tol)&&(k < maxit) 25 | % update 26 | sk = -alpha*gk; 27 | xk = xk + sk; 28 | 29 | % gradient evaluation 30 | [fk,gk] = fh(xk); 31 | 32 | k = k + 1; 33 | 34 | hist(k,:) = [k,fk,norm(gk)]; 35 | fprintf(1,'%3d, %1.5e , %1.5e \n',k,fk,norm(gk)); 36 | end -------------------------------------------------------------------------------- /startup.m: -------------------------------------------------------------------------------- 1 | addpath([pwd '/core']); 2 | addpath([pwd '/optimization']); 3 | addpath([pwd '/operators']); 4 | addpath([pwd '/spot']) --------------------------------------------------------------------------------