Skip to content
Snippets Groups Projects
Commit e555f2e5 authored by Nicola Vigano's avatar Nicola Vigano
Browse files

Grain-ODF-solvers: fixed preconditioner for ls-l1 solver

parent 1d4d9b62
No related branches found
No related tags found
No related merge requests found
...@@ -20,7 +20,7 @@ classdef GtGrainODFwSolver < handle ...@@ -20,7 +20,7 @@ classdef GtGrainODFwSolver < handle
shape_functions_type = 'none'; shape_functions_type = 'none';
shape_functions = []; shape_functions = [];
num_iter = 50; num_iter = 250;
verbose = false; verbose = false;
...@@ -407,7 +407,7 @@ classdef GtGrainODFwSolver < handle ...@@ -407,7 +407,7 @@ classdef GtGrainODFwSolver < handle
p = gtMathsGetSameSizeZeros(self.S__ws); p = gtMathsGetSameSizeZeros(self.S__ws);
q = gtMathsGetSameSizeZeros(self.St_ws); q = gtMathsGetSameSizeZeros(self.St_ws);
qo = gtMathsGetSameSizeOnes(self.St_ws); q1 = gtMathsGetSameSizeOnes(self.St_ws);
x = gtMathsGetSameSizeZeros(self.St_ws); x = gtMathsGetSameSizeZeros(self.St_ws);
res_norm_0 = gtMathsNorm_l2(self.sino); res_norm_0 = gtMathsNorm_l2(self.sino);
...@@ -424,10 +424,10 @@ classdef GtGrainODFwSolver < handle ...@@ -424,10 +424,10 @@ classdef GtGrainODFwSolver < handle
p = (p + self.fw(self.fp(xe) - self.sino)) ./ (1 + self.S__ws); p = (p + self.fw(self.fp(xe) - self.sino)) ./ (1 + self.S__ws);
qn = q + xe; qn = q + xe;
q = lambda .* (qn ./ max(qo, abs(qn))); q = (qn ./ max(q1, abs(qn)));
xo = x; xo = x;
x = x - (self.bp(p) + q) .* self.tau_ws; x = x - (self.bp(p) + lambda .* q) .* self.tau_ws;
x(x < 0) = 0; x(x < 0) = 0;
xe = x + (x - xo); xe = x + (x - xo);
...@@ -451,7 +451,7 @@ classdef GtGrainODFwSolver < handle ...@@ -451,7 +451,7 @@ classdef GtGrainODFwSolver < handle
residuals = zeros(self.num_iter, 1); residuals = zeros(self.num_iter, 1);
p = gtMathsGetSameSizeZeros(self.S__ws); p = gtMathsGetSameSizeZeros(self.S__ws);
po = gtMathsGetSameSizeOnes(self.S__ws); p1 = gtMathsGetSameSizeOnes(self.S__ws);
x = gtMathsGetSameSizeZeros(self.St_ws); x = gtMathsGetSameSizeZeros(self.St_ws);
res_norm_0 = gtMathsNorm_l2(rescaled_sino); res_norm_0 = gtMathsNorm_l2(rescaled_sino);
...@@ -466,7 +466,7 @@ classdef GtGrainODFwSolver < handle ...@@ -466,7 +466,7 @@ classdef GtGrainODFwSolver < handle
current_time, current_time/(ii - 1)*self.num_iter - current_time); current_time, current_time/(ii - 1)*self.num_iter - current_time);
pn = p + self.fw(self.fp(xe) - rescaled_sino); pn = p + self.fw(self.fp(xe) - rescaled_sino);
p = pn ./ max(po, abs(pn)); p = pn ./ max(p1, abs(pn));
xo = x; xo = x;
x = x - self.bw(self.bp(p)); x = x - self.bw(self.bp(p));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment