The following calculations assume you have read the analysis on Calculating the deviation angle for a prism.
Suppose we can measure a1=N, and δ2=M. Then if the incidence angle at A is a1 then the emergence angle at B will be such that:
δ1=sin-1{sin(A)*Ö(nλ2-sin2(a1))-cos(A)*sin(a1)}
(1)
Similarly, tracing the ray backwards, if the incidence angle at D is δ2 then we have an
emergence angle α2 at C, for which:
α2=sin-1{sin(A)*Ö(nλ2-sin2(δ2))-cos(A)sin(δ2)}
(2)
We also have: δ1+α2=120° (3)
=>sin(δ1)=sin(120°-α2)
=>sin(δ1)=sin(120°)*cos(α2)-cos(120°)*sin(α2),
and upon evaluating,
=>sin(δ1)=Ö(3/2)*Ö(1-sin2(α2))+1/2*sin(α2),
and upon substitution of (1) and (2) =>
Ö(3/2)*Ö(nλ2-sin2(δ2))-sin(δ2)/2=Ö(3/2)*Ö{1-(Ö(3/2)*Ö(nλ2-sin2(δ2))-sin(δ2)/2)2}+1/2{Ö(3/2)*Ö(nλ2-sin2(δ2))-sin(δ2)/2}.
Now consider f(n,N,M) defined as above. Namely: f(n,N,M)=
Ö(3/2)*Ö(n-sin2(N))-sin(N)/2-Ö(3/2)*Ö{1-(Ö(3/2)*Ö(n-sin2(M))-sin(M)/2)2}-1/2{Ö(3/2)*Ö(n-sin2(M))-sin(M)/2}
which can be solved for n given the angles N, and M, using Newton's iteration as:
n(k+1)=nk-f(nk,N,M)/f'(nk,N,M),
where f' is the function's derivative at nk.
Then having a convergence value n, we can interpolate as follows:
y=(n-nλ1){(λ1-λ2)/(nλ1-nλ2)}+δ1,
where nλ1<n<nλ2 are the nearest
refraction index bounds from the table for the SF10 crystal.
A program that calculates the wavelength given N and M follows:
program SolveEqu;
const
epsilon = 1e-5;
firstguess = 1.8;
var
i: integer;
xn, N, M, ac, x, x1, x2, y1, y2: real;
function f (x: real): real;
var
a, b, c: real;
begin
a := ac * Sqrt(Sqr(x) - Sqr(Sin(M))) - Sin(M) /2;
b := ac * Sqrt(1 - Sqr(ac * Sqrt(Sqr(x) - Sqr(Sin(N))) - sin(N)
/2));
c := 0.5 * (ac * Sqrt(Sqr(x) - Sqr(Sin(N))) - sin(N) /2);
f := a - b - c;
end;
function df (x: real;
epsilon: real): real; {the function's derivative}
begin
df := (f(x + epsilon) - f(x)) /epsilon;
end;
begin
write('Enter entrance Angle:');
readln(N);
write('Enter exit Angle:');
readln(M);
xn := firstguess;
ac := Sqrt(3) /2;
N := pi * N /180;
M := pi * M /180;
for i := 1 to 5 do {Newton iteration}
xn := xn - f(xn) /df(xn, epsilon);
write('After ', i - 1 : 1, ' iterations, the equation converges
to:');
writeln(xn : 3 : 8);
if (1.70889 < xn) and (xn <= 1.71682) then
begin
x1 := 7067.217;
y1 := 1.71682;
x2 := 8521.1;
y2 := 1.70889;
end
else if (1.71682 < xn) and (xn <= 1.72085) then
begin
x1 := 6562.8;
y1 := 1.72085;
x2 := 7067.217;
y2 := 1.71682;
end
else if (1.72085 < xn) and (xn <= 1.72200) then
begin
x1 := 6438.4696;
y1 := 1.72200;
x2 := 6562.8;
y2 := 1.72085;
end
else if (1.72200 < xn) and (xn <= 1.72309) then
begin
x1 := 6328;
y1 := 1.72309;
x2 := 6438.4696;
y2 := 1.72200;
end
else if (1.72309 < xn) and (xn <= 1.72803) then
begin
x1 := 5892.938;
y1 := 1.72803;
x2 := 6328;
y2 := 1.72309;
end
else if (1.72803 < xn) and (xn <= 1.72825) then
begin
x1 := 5875.618;
y1 := 1.72825;
x2 := 5892.938;
y2 := 1.72803;
end
else if (1.72825 < xn) and (xn <= 1.73430) then
begin
x1 := 5460.74;
y1 := 1.73430;
x2 := 5875.618;
y2 := 1.72825;
end
else if (1.73430 < xn) and (xn <= 1.74648) then
begin
x1 := 4861.327;
y1 := 1.74648;
x2 := 5460.74;
y2 := 1.73430;
end
else if (1.74648 < xn) and (xn <= 1.74805) then
begin
x1 := 4799.9107;
y1 := 1.74805;
x2 := 4861.327;
y2 := 1.74648;
end
else if (1.74805 < xn) and (xn <= 1.76197) then
begin
x1 := 4358.35;
y1 := 1.76197;
x2 := 4799.9107;
y2 := 1.74805;
end
else if (1.76197 < xn) and (xn <= 1.77578) then
begin
x1 := 4046.561;
y1 := 1.77578;
x2 := 4358.35;
y2 := 1.76197;
end
else
writeln('refraction index out of bounds.');
if (1.70889 <= xn) and (xn <= 1.77578) then
begin
x := (xn - y1) * (x1 - x2) /(y1 - y2) + x1;
writeln('Estimated wavelength:', x : 3 : 8);
end;
end.
Using the PHASMATRON,
1)rotate the viewing telescope until the line desired is centered in
your field of view.
2)Read the angle readers.
3)Run the program on a PC, and input the two angles, N of the
collimator, M of the viewing telescope. The desired wavelength will be
output after the program is run.
You can also use the above program to improve accuracy on itself.
However this will require that you know how to program a computer to
change slightly the structure of the program above. Note that the table
of refractive indexes is quantized. That is, only specific wavelengths
have their refractive index noted. You can augment the table above, and
insert new points, by measuring the index of some otherwise known
wavelength. For example: If you know that Cadmium emits a line also at
4511.34A, you can use a Cadmium discharge lamp, and center the line on
the PHASMATRON's field of view. Then run the program on the PC to
measure the index of refraction for this line. The index you get along
with the exact wavelength of 4511.34A, constitutes a new point on the
SF10 refractive index table, so you can add it there. Don"t use the
estimated wavelength from the program"s run; use only the index of
refraction. Then you can change the program to interpolate not between
1.76197 and 1.74805, but between 1.76197 and the new refraction index
value, and between the new value and 1.74805 (since 4511.34 falls
between 4358.35 and 4799.9107A).