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=arcsin{sin(A)*sqrt(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=arcsin{sin(A)*sqrt(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)=sqrt(3/2)*sqrt(1-sin2(α2))+1/2*sin(α2), and upon substitution of (1) and (2) =>
sqrt(3/2)*sqrt(nλ2-sin2(δ2))-sin(δ2)/2=sqrt(3/2)*sqrt{1-(sqrt(3/2)*sqrt(nλ2-sin2(δ2))-sin(δ2)/2)2}+1/2{sqrt(3/2)*sqrt(nλ2-sin2(δ2))-sin(δ2)/2}.
Now consider f(n,N,M) defined as above. Namely: f(n,N,M) = sqrt(3/2)*sqrt(n-sin2(N))-sin(N)/2-sqrt(3/2)*sqrt{1-(sqrt(3/2)*sqrt(n-sin2(M))-sin(M)/2)2}-1/2{sqrt(3/2)*sqrt(n-sin2(M))-sin(M)/2}
This 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 Pascal program which 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 spectroscope,
We can also use the above program to improve accuracy on itself. However this will require that we 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. We can augment the table above, and insert new points, by measuring the index of some otherwise known wavelength. For example: If we know that Cadmium emits a line also at 4511.34A, we can use a Cadmium discharge lamp, and center the line on the Phasmatron spectroscope's field of view. Then we run the program on the PC to measure the index of refraction for this line. The index we get along with the exact wavelength of 4511.34A, constitutes a new point on the SF10 refractive index table, so we can add it there. We don't use the estimated wavelength from the program's run; we use only the index of refraction. Then we 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).