Fei0906 / 3D-MCF

A 3-D Minimum Cost Flow Phase Unwrapping Algorithm Based on Closure Phase for InSAR
23 stars 3 forks source link

Exiting: cannot converge because the primal residual, dual residual, or upper-bound feasibility is NaN. #1

Open yuluenter opened 1 year ago

yuluenter commented 1 year ago

Hi, I have used prep_pu_data.m to split my data into 26 tiles, and go into every tile folder to run ThreeD_MCF. In all tile folders, the ThreeD_MCF run successfully, except in tile_9. It got this error "Exiting: cannot converge because the primal residual, dual residual, or upper-bound feasibility is NaN.". I don't know the reason for this error and how to correct it. Many thanks for your help. The details of this error are below. 捕获

ThreeD_MCF Loading input data and obtaining closure phases... The input file is input_3DMCF_data.mat The size of input wrapped phases is 57562*16. Calculating the sum of UPGs in closure phase... Total correction pixels number are 38. Calculating the UPGs and acquiring residuals in each interferogram... Saving temporary data... Unwrapping all the interferograms jointly... Start Optimization...

Residuals: Primal Dual Duality Total Infeas Infeas Gap Rel Ax-b A'y+z-f x'*z Error

Iter 0: 4.71e+02 2.25e+06 1.38e+25 1.37e+22 Iter 1: 5.96e+16 2.25e+06 1.38e+25 1.26e+14 Iter 2: 7.06e+16 2.25e+06 1.38e+25 1.50e+14 Iter 3: 7.67e+16 2.25e+06 1.38e+25 1.63e+14 Iter 4: 9.42e+16 2.25e+06 1.38e+25 2.00e+14 Iter 5: 1.07e+17 2.25e+06 1.38e+25 2.28e+14 Exiting: cannot converge because the primal residual, dual residual, or upper-bound feasibility is NaN. Error using JointUnwrap (line 152) The algorithm of linprog cannot output its optimal solution. Error in ThreeD_MCF (line 39) JointUnwrap();

Fei0906 commented 1 year ago

Hi, this error occurs due to the failure of the 'linprog' function, which is the built-in function in Matlab to solve our equation as I have mentioned in the README. This error basically means that the equation is so hard to solve that it can't give a solution, which might imply that the quality of the data is not good enough.

I am sorry that currently there is no straightforward solution as I don't find any other way to solve the equation. My suggestion would be: 1) You can try re-running the tile again to see if works (sometimes it does). 2) Slightly change how you divide the data and it might be easier for solving the equation. 3) Filter the interferogram to improve the quality of the data.

Currently, I am trying to write the core function code by myself, which hopefully can solve this issue and have quicker calculation for a large dataset.