Print

Print


Dear Robert,

>
> I got the following error when running fnirt. I don't know if it's a
> bug report or something with my images.
>
> *************************************************
> SpMat::SolveForx: Warning requested tolerence not obtained.
> Requested tolerance was 0.001, and achieved tolerance was 0.0883485
> This may or may not be a problem in your application, but you should
> look into it
> *************************************************

In all likelihood you will not need to worry about this. For each  
iteration fnirt solves a very large system of linear equations, so  
large that it is not possible to use direct methods. Instead it uses  
an iterative solver. In that solver a "tentative solution" is checked  
by multiplying it with the original matrix and comparing the result  
to the original data vector. Once a "solution" is found that almost  
perfectly replicates the original data (i.e. when the difference is  
below the requested tolerance) it is said to have converged.

Sometimes, especially if the more "advanced" intensity models are  
used, that system becomes quite poorly conditioned and the tolerance  
is never achieved. The linear solver will then issue that warning.  
However, because it is used as part of a Leveberg-Marquardt scheme  
that typically just means that for the next iteration the matrix will  
be nudged to become better conditioned, and the next step will be good.

So, in conclusion if the results of the registration looks good you  
can safely ignore this warning. The warning is really more for the  
application programmer that uses the linear solver, to tell him that  
he/she needs to rethink his/her choice of tolerance. I should  
probably turn it off in fnirt so as not to worry people.

Good luck Jesper