-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFuncLeastSquares.m
50 lines (43 loc) · 1.11 KB
/
FuncLeastSquares.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
function [Xstate,Reason,Info,E] = FuncLeastSquares(Zstate,CovMatrixInv,Xstate)
%% Initial Error
[Error, Sum_Error]= FuncDiff(Zstate,CovMatrixInv,Xstate);
fprintf('Initial Chi^2 is %.8f\n', Sum_Error);
Sum_Delta = 22;
% MaxIter = 0;
MaxIter = 87;
%MinError = 1e-12;
MinError = 0;
% MinError = -1;
MinDelta = 1e-12;
Iter = 0;
while Sum_Error>MinError && Sum_Delta>MinDelta && Iter<=MaxIter;
[Jacobian] = FuncJacobian(Zstate,Xstate);
[Delta,Sum_Delta] = FuncDelta(Jacobian,Error,CovMatrixInv);
% spy(Jacobian)
% pause
% size(Jacobian)
% size(Delta)
% size(Xstate)
%
% pause
[Xstate] = FuncUpdate(Xstate,Delta);
[Error, Sum_Error]= FuncDiff(Zstate,CovMatrixInv,Xstate);
Iter = Iter+1;
%Error
fprintf('Iterations %d Chi^2 %.8f\n', Iter,Sum_Error);
end;
if Sum_Error<MinError;
Reason = 1;
elseif Sum_Delta<MinDelta;
Reason = 2;
elseif Iter>MaxIter;
Reason = 3;
else
Reason = 4;
end;
% Info = sparse([]);
% if Iter>0;
[Jacobian] = FuncJacobian(Zstate,Xstate);
Info = Jacobian'*CovMatrixInv*Jacobian;
E = -Jacobian'*CovMatrixInv*Error;
% end;