aboutsummaryrefslogtreecommitdiff
path: root/fitter_check.m
diff options
context:
space:
mode:
Diffstat (limited to 'fitter_check.m')
-rw-r--r--fitter_check.m34
1 files changed, 14 insertions, 20 deletions
diff --git a/fitter_check.m b/fitter_check.m
index ff93c13..706429a 100644
--- a/fitter_check.m
+++ b/fitter_check.m
@@ -38,11 +38,12 @@ sample_energy = [];
sample_x = [];
possible_soln = [];
possible_lens_pos = [];
+possible_sample_energy = [];
lens_size = .03;
%Lens permutations
lens_permutations = perms( [ focal_length1, focal_length2, focal_length3 ]);
-n_shuffles=10;
+n_shuffles=20;
%Check if permutation has duplicates
lens_permutations = unique(lens_permutations,'rows');
@@ -57,7 +58,7 @@ for i = 1:n_perms
optics_x_rand = sort(lens_size+(xf-2*lens_size)*rand(1,3));
fitness_simplified=@(x) fitness(q0, qf, Ltot, x, lenses_choice, lambda );
- [x_sol, energy]=fminsearch(fitness_simplified, optics_x_rand, optimset('TolX',1e-8,'TolFun',1e-8,'MaxFunEvals',1e8,'MaxIter',2000));
+ [x_sol, energy]=fminsearch(fitness_simplified, optics_x_rand, optimset('TolX',1e-8,'TolFun',1e-8,'MaxFunEvals',1e8,'MaxIter',200));
sample_energy = [sample_energy; energy];
sample_x = [sample_x; x_sol];
@@ -74,6 +75,7 @@ for i = 1:n_perms
if compare_waist < tolerance
possible_soln = [possible_soln; x_sol];
possible_lens_pos = [possible_lens_pos; lenses_choice];
+ possible_sample_energy = [possible_sample_energy; energy];
end
%Visualize solution
@@ -86,31 +88,23 @@ for i = 1:n_perms
end
-%Display solution with lowest energy
-[energy_min, index_of_energy_min] = min(sample_energy(:));
-x_sol = sample_x(index_of_energy_min,:);
-lenses_choice=lens_permutations(ceil(index_of_energy_min/n_shuffles),:);
-figure(2)
-w_final_trial = solution_visualization(q0,x0, qf, xf, optics_placer(x_sol, lenses_choice), lambda);
-title('Optimized made');
+%Sorting possible solution according to energy
+[possible_sample_energy, index] = sort(possible_sample_energy);
+possible_soln = possible_soln(index,:);
+possible_lens_pos = possible_lens_pos(index,:);
%Truncate other possible solutions to an accuracy of n decimal places
n=4;
-possible_soln = round(possible_soln*10^n)./10^n;
-[possible_soln, index] = unique(possible_soln,'rows'); %Unique solutions only
+possible_soln_trunc = round(possible_soln*10^n)./10^n;
+[possible_soln_uniq, index] = unique(possible_soln_trunc,'rows','stable'); %Unique solutions only
-rounded_x_sol = round(x_sol*10^n)./10^n;
-remove_index = find(ismember(possible_soln, rounded_x_sol,'rows'),1);
-possible_soln(remove_index,:) = [];
-index(remove_index,:) = [];
-
-%Visualize other solutions
-n_possible_soln = size(possible_soln,1);
+%Visualize five best solutions
+n_possible_soln = min(5,size(possible_soln,1));
for n_graph = 1:n_possible_soln
- figure(n_graph+2)
- w_final_trial = solution_visualization(q0,x0, qf, xf, optics_placer(possible_soln(n_graph,:), possible_lens_pos(index(n_graph),:)), lambda);
+ figure(n_graph+1)
+ w_final_trial = solution_visualization(q0,x0, qf, xf, optics_placer(possible_soln(index(n_graph),:), possible_lens_pos(index(n_graph),:)), lambda);
title('Other Solutions');
end