Modeling Marine Magnetic
Anomalies
SHELBY JONES
HANNA ASEFAW
1
Outline
① Magnetic Acquisition
② Goal of our Project
③ Derivation
⑤ Real Applications
¡ Pacific Antarctic Ridge
¡ Mid-Atlantic Ridge
⑥ Limitations
④ Our MATLAB Process
2
Magnetic Acquisition
MORB (Mid-Ocean
Ridge Basalts) contain
magnetic grains
As basalt cools, the
magnetizations within
the magnetic grains
align themselves with
the magnetic field
¡
Latitudinal dependence
Magnetic Acquisition 3
Magnetic Acquisition
Magnetic Acquisition 4
Goal of Our Project
Modeled Magnetic
Profile
Observed Seafloor
Magnetic Profile
Goal 5
Goal of Our Project
C = constant
µ0 = magnetic permeability
k = wavenumbers
¡ k = (-nx/2 : nx/2 - 1) / L
¡ L = spreading rate * total time
z = depth = 3000m
θ = skewness
p(k) = Fourier of
geomagnetic timescale
Goal 6
Goal of Our Project
C = constant
µ0 = magnetic permeability
k = wavenumbers
¡ k = (-nx/2 : nx/2 - 1) / L
¡ L = spreading rate * total time
z = depth = 3000m
θ = skewness
p(k) = Fourier of
geomagnetic timescale
Goal 6
Step 1: Calculate the Scalar of the Anomaly |A|
Ideal towed magnetometer measures:
Most magnetometers measure scalar field
On Earth, Be ≅ 50,000nT while ΔB ≅ 300nT
Derivation 7
Step 2: Account for Seafloor Spreading
Define scalar potential (U) and magnetization (M)
Define:
Derivation 8
Step 2: Account for Seafloor Spreading
Potential satisfies Laplace’s equation above source
layer and Poisson’s equation within source layer
Derivation 9
Step 2: Account for Seafloor Spreading
2nd terms can be eliminated because source does not vary
in the y-direction thus derivative = 0
Derivation 10
Step 2: Account for Seafloor Spreading
Boundary Conditions:
Basic Double Fourier Transform:
Applied to this problem:
¡
In the x direction:
¡
In the z direction (use identity):
Derivation 11
Step 2: Account for Seafloor Spreading
Fourier Transform Result
Solve for U(k)
Inverse Fourier using Cauchy Residue Theorem
Derivation 12
Step 2: Account for Seafloor Spreading
To solve integral, calculate the poles of the integrand
¡
Factor:
¡
Solve over closed loops:
Derivation 13
Step 2: Account for Seafloor Spreading
Combine integrands and drop ksubscripts:
To simplify: assume the spreading ridge is located at
Earth’s magnetic pole, the dipolar field lines will be
parallel to the z-axis, thus no x-component
Derivation 14
Step 3: Calculate the magnetic anomaly
Recall:
Substitute with evaluated U:
Recall:
Since only the z-component of Earth’s magnetic field
is non-zero due to our assumptions, the anomaly
simplifies to:
*
Derivation 15
Step 3: Calculate the magnetic anomaly
Take into account upward continuation
*
Derivation 16
Main function
%
% specify data files
%
pacificAntarcticRise = 'pacificAntarctic.xydm';
midAtlanticRidge = 'midAtlanticRidge.xydm’
spreadCSkewErMAR = spreadCSkewEr(midAtlanticRidge, polarity, time, 1318);
spreadCSkewErPA = spreadCSkewEr(pacificAntarcticRise, polarity, time, 5418);
Our MATLAB Process 21
spreadCSkewEr()
Parameters – datafile, polarity, time, ridgeAxis
¡ Datafile – file the contains the observed magnetic anomalies
¡ Polarity – matrix with geomagnetic timescale field polarities
¡ Time – matrix with geomagnetic timescale
¡ ridgeAxis – location of the ridge axis
Output
¡ Figure 1: Observed Magnetic Anomalies across the ridge
¡ Figure 2: Fourier transform of magnetic timescale & observed
¡ Figure 3: Overlay of observed and modeled
¡ Figure 4: Overlay of observed and modeled
¡
Returns a solution [spreadingRate, Constant, skewness, rootError)
Our MATLAB Process 22
Figure 1: Observed Magnetic Anomalies across the ridge
function spreadCSkewEr = spreadCSkewEr(anomalyFile, polarity, time, axisPoint)
location = inputname(1);
%
% load the observed anomaly data
%
anomalyFile = importdata(anomalyFile);
distance = anomalyFile(:,3);
magobs = anomalyFile(:,4);
%
% plot distance from ridge and magnetic anomaly
%
figure(1)
subplot(2,1,1); plot(distance, magobs);
xlabel('Distance (km)')
ylabel('Magnetic Anomaly (n tesla)')
title(['Observed Magnetic Anomalies across the ', location]);
%
% plot near ridge magnetic anomalies
%
[totalTimescaleDatapoints,mdat]=size(time./2);
vectorTime=2048;
halfVectorTime=vectorTime/2;
subsetTime = time((totalTimescaleDatapoints/2-halfVectorTime+1):
(totalTimescaleDatapoints/2+halfVectorTime),1)';
subsetPolarity = polarity((totalTimescaleDatapoints/2-halfVectorTime+1):
(totalTimescaleDatapoints/2+halfVectorTime),1)';
[sizex, sizey] = size(distance);
subsetDistance = distance((axisPoint-halfVectorTime+1):(axisPoint+
halfVectorTime),1)';
subsetAnomalies = magobs((axisPoint-halfVectorTime+1):(axisPoint+
halfVectorTime),1)';
subplot(2,1,2); plot(subsetDistance, subsetAnomalies);
xlabel('Distance (km)')
ylabel('Magnetic Anomaly (n tesla)')
title(['Observed Magnetic Anomalies across the ', location]);
Our MATLAB Process 23
Figure 2: Fourier Transform magnetic timescale and
observed anomalies
%
%
%Fourier Transform of the Observed Magnetic Anomalies across the Pacific-Antarctic Rise
%
%
dataAnomaly = fftshift(fft(subsetAnomalies));
figure(2)
subplot(2,1,1); plot(k,real(dataAnomaly));
xlabel('k');
title(['Anomalies Observed across the ', location]);
axis([-60, 60,-2 * 10^5, 1*10^5 ])
%
% Fourier Transform of the magnetic timescale p(k)
%
%
fourierTimescale = fftshift(fft(subsetPolarity));
%
%
% Model based on the geomagnetic timescale
%
%
constant= 3 *10^-11;
spreadingRate = 40000;
theta = -130;
skewness = theta * pi/180 ;
k2 = k./(spreadingRate*dt);
modelAnomaly = abs(k2).*(fourierTimescale).* exp(abs(k2).* DEPTH * -2 * pi).*
exp(sign(k2).* 1i * skewness) * constant* MAGPERM * 2 * pi;
subplot (2, 1, 2); plot(k, modelAnomaly);
xlabel('k');
title('Anomalies modeled from the Magnetic Timescale');
Our MATLAB Process 24
Figure 3: overlay of model and observed (k)
figure(3)
plot(k, dataAnomaly,k, modelAnomaly);
legend([location, ' observed anomaly'],
'Timescale generated anomaly');
xlabel('k');
Our MATLAB Process 25
Figure 4: overlay of model and observed
%
% overlay of inverse fourier dataAnomaly and modelAnomaly
%
%
model= ifft(fftshift(modelAnomaly));
figure(4)
plot(subsetDistance./dt*2, subsetAnomalies, subsetTime, model)
legend([location, ' observed anomaly'], 'Timescale generated
anomaly');
Our MATLAB Process 26
%
%calculate the Root Mean Square Error
%
rootError = calcRMSE(subsetAnomalies, model);
Our MATLAB Process 27
Root Mean Square Error
%
% takes two matrices and calculates the RMSE
%
function deviation = calcRMSE (model, observed)
How well the model suits the
observed data
[y, dataPointsModel] = size(model);
[z, dataPointsObserved] = size (observed);
sum = 0;
if dataPointsModel >= dataPointsObserved
totalPoints = dataPointsObserved;
else
totalPoints = dataPointsModel;
end
for i = 1:totalPoints
sum = sum + (abs(model(1,i)^2 - observed(1,i))^2);
end
deviation = sqrt(sum/totalPoints);
We tried to minimize
RMSE
Our MATLAB Process 28
Return a solution
spreadCSkewEr = [spreadingRate, CONSTANT,
theta, rootError];
spreadCSkewErMAR = spreadCSkewEr(midAtlanticRidge, polarity, time, 1318);
spreadCSkewErPA = spreadCSkewEr(pacificAntarcticRise, polarity, time, 5418);
Our MATLAB Process 29
Calculating our c, skewness, and rmse
%
%calculates the ideal skewness theta, constant combinations based on the
%observed Anomaly
%
function skewConst = skewnessConstant (fourierTimescale, observedAnom, inC, rangeC, skew, spreading, rangeSpread )
c = 0; constant = 0; theta = 0; skewness=0; currentRMSE = 0; j = 1;
currentLeast = Inf;
dt = 20;
nx = 2048;
magPerm = 4 * pi * 10 * exp(-7);
nx2 = nx/2;
depth = 3000.;
for spreadingRate = (spreading-rangeSpreading):spreading:(spreading+rangeSpreading)
L = spreadingRate * dt;
k = ((-nx2): (nx2 - 1))/(spreadingRate *dt);
for c = (inC-rangeC):10000:(inC+rangeC)
for theta = (skew-10):skew:(skew:+10)
skewness = theta* pi / 180.;
modelAnom = abs(k).*(fourierTimescale').* exp(abs(k).* depth * -2 * pi).* exp(sign(k).* 1i * skewness) * constant * magPerm * 2 * pi;
rmse = calcRMSE(modelAnom, observedAnom);
if rmse < currentRMSE
skewConst = [spreadingRate, c, theta, currentRMSE];
currentRMSE = rmse;
end
end
end
end
Our MATLAB Process 30
Main function
%
% specify data files
%
pacificAntarcticRise = 'pacificAntarctic.xydm';
midAtlanticRidge = 'midAtlanticRidge.xydm’
spreadCSkewErMAR = spreadCSkewEr(midAtlanticRidge, polarity, time, 1318);
spreadCSkewErPA = spreadCSkewEr(pacificAntarcticRise, polarity, time, 5418);
Our MATLAB Process 31
Mid-Atlantic Ridge
C = 4 *10^-11;
Spreading rate = 22000 m/myr
Θ (skewness) = -50
RMSE = 193
Real Application 32
Pacific-Antarctic Ridge
C = 1.2 * 10^-10
Spreading rate = 46,000 m/myr
Θ (skewness) = 3º
RMSE =259
Real Application 33
Limitations
We assume:
¡ Constant spreading rate
¡ Symmetry across the ridge
¡ Stationary ridge
Limitations 34
© Copyright 2026 Paperzz