This forum has been archived. All content is frozen. Please use KDE Discuss instead.

Solving Ax = b II

Tags: None
(comma "," separated)
Eversleeping
Registered Member
Posts
11
Karma
0
OS

Solving Ax = b II

Thu Jun 28, 2012 10:43 am
For my last Thread has been used by another user, i dared to open another topic, plz forgive me ^^

Well i still try to solve Ax = b

Now i printed the mazrix with higher precision and hope that someone can help me.

Code: Select all
[size=50]
Trying to solve Ax = b

Matrix A:
1.27689454275793 -2.53950194728722 -1.83667469678345 -1.24698898217153 2.66814878800445 1.94830447957409 -0.0299055605863965 -0.128646840717232 -0.111629782790637            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
-2.53950194728722 6.26237531176708 4.64894033710204 2.66814878800445 -5.70896620315959 -4.1687346962655 -0.128646840717232 -0.553409108607491 -0.480205640836536            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
-1.83667469678345 4.64894033710204 3.46073014547499 1.94830447957409 -4.1687346962655 -3.04404481466888 -0.111629782790637 -0.480205640836536 -0.416685330806112            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
-1.24698898217153 2.66814878800445 1.94830447957409 5.56727216866997 0.934013792019045 1.85454221406577 -4.21978774741086 -3.37617105315869 -3.60454405725928 -0.100495439087583 -0.22599152686481 -0.198302636380581 1.17096822919169e-16 1.12023789374973e-16 1.44979196128533e-16            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
2.66814878800445 -5.70896620315959 -4.1687346962655 0.934013792019045 8.91837961897532 7.49859890629504 -3.37617105315869 -2.70120955424368 -2.88392640445502 -0.22599152686481 -0.508203861572047 -0.44593780557452 1.12023789374973e-16 1.36683457994044e-16 1.58206485533751e-16            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
1.94830447957409 -4.1687346962655 -3.04404481466888 1.85454221406577 7.49859890629504 6.51434821235471 -3.60454405725928 -2.88392640445502 -3.07900269834546 -0.198302636380581 -0.44593780557452 -0.39130069934037 1.44979196128533e-16 1.58206485533751e-16 2.19187111555561e-16            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0
-0.0299055605863965 -0.128646840717232 -0.111629782790637 -4.21978774741086 -3.37617105315869 -3.60454405725928 4.53090944667766 3.45346819558014 3.83012027601853 -0.0367389031276266 0.48296678231728 0.364393155055577 -0.148682356809765 -0.20456297413424 -0.29108401398327 -0.0957948787430177 -0.227054109887265 -0.187255577040926            0            0            0            0            0            0            0            0            0            0            0            0
-0.128646840717232 -0.553409108607491 -0.480205640836536 -3.37617105315869 -2.70120955424368 -2.88392640445502 3.45346819558014 10.4232746058569 8.99873632437779 0.48296678231728 -6.3490440096044 -4.79028426581644 -0.20456297413424 -0.281445702667915 -0.400484717225305 -0.227054109887265 -0.538166230733455 -0.443835296044493            0            0            0            0            0            0            0            0            0            0            0            0
-0.111629782790637 -0.480205640836536 -0.416685330806112 -3.60454405725928 -2.88392640445502 -3.07900269834546 3.83012027601853 8.99873632437779 8.04581594746539 0.364393155055577 -4.79028426581644 -3.61421708726797 -0.29108401398327 -0.400484717225305 -0.569871940522321 -0.187255577040926 -0.443835296044493 -0.366038890523527            0            0            0            0            0            0            0            0            0            0            0            0
           0            0            0 -0.100495439087583 -0.22599152686481 -0.198302636380581 -0.0367389031276266 0.48296678231728 0.364393155055577 5.55454588423995 0.860169638828234 5.05918110083369 -5.15523750022236 -0.786518519556696 -4.93531052082025 -0.26207404180238 -0.330626374724008 -0.289961098688435            0            0            0            0            0            0            0            0            0            0            0            0
           0            0            0 -0.22599152686481 -0.508203861572047 -0.44593780557452 0.48296678231728 -6.3490440096044 -4.79028426581644 0.860169638828234 7.39435491722868 6.35499503916412 -0.786518519556696 -0.119996679411759 -0.752964945692745 -0.330626374724008 -0.417110366640468 -0.365808022080411            0            0            0            0            0            0            0            0            0            0            0            0
           0            0            0 -0.198302636380581 -0.44593780557452 -0.39130069934037 0.364393155055577 -4.79028426581644 -3.61421708726797 5.05918110083369 6.35499503916412 9.05109919853138 -4.93531052082025 -0.752964945692745 -4.72476582036588 -0.289961098688435 -0.365808022080411 -0.320815591557152            0            0            0            0            0            0            0            0            0            0            0            0
           0            0            0 1.17096822919169e-16 1.12023789374973e-16 1.44979196128533e-16 -0.148682356809765 -0.20456297413424 -0.29108401398327 -5.15523750022236 -0.786518519556696 -4.93531052082025 5.63967386081842 2.52686283262059 5.77283461117831 -0.165585526030803 -1.23503386283984 -0.321135565635495 -0.170168477755489 -0.300747476089817 -0.225304510739296            0            0            0            0            0            0            0            0            0
           0            0            0 1.12023789374973e-16 1.36683457994044e-16 1.58206485533751e-16 -0.20456297413424 -0.281445702667915 -0.400484717225305 -0.786518519556696 -0.119996679411759 -0.752964945692745 2.52686283262059 10.144574921588 3.94685906572639 -1.23503386283984 -9.21160610425188 -2.39521718853787 -0.300747476089817 -0.531526435256471 -0.398192214270476            0            0            0            0            0            0            0            0            0
           0            0            0 1.44979196128533e-16 1.58206485533751e-16 2.19187111555561e-16 -0.29108401398327 -0.400484717225305 -0.569871940522321 -4.93531052082025 -0.752964945692745 -4.72476582036588 5.77283461117831 3.94685906572639 6.21575121759357 -0.321135565635495 -2.39521718853787 -0.622808369717321 -0.225304510739296 -0.398192214270476 -0.298305086988041            0            0            0            0            0            0            0            0            0
           0            0            0            0            0            0 -0.0957948787430177 -0.227054109887265 -0.187255577040926 -0.26207404180238 -0.330626374724008 -0.289961098688435 -0.165585526030803 -1.23503386283984 -0.321135565635495 4.34028903739565 4.00159452185535 5.64092383084364 -3.65650828545896 -2.0394178887124 -4.36300408986279 -0.12494305465173 -0.146972109898873 -0.296195014572998 -0.0353832507087619 -0.0224901757929664 -0.183372485042997            0            0            0
           0            0            0            0            0            0 -0.227054109887265 -0.538166230733455 -0.443835296044493 -0.330626374724008 -0.417110366640468 -0.365808022080411 -1.23503386283984 -9.21160610425188 -2.39521718853787 4.00159452185535 11.4915485421605 6.1032990480843 -2.0394178887124 -1.13748554634496 -2.43346599945546 -0.146972109898873 -0.172885168754175 -0.348417976130522 -0.0224901757929664 -0.0142951254355294 -0.116554565835549            0            0            0
           0            0            0            0            0            0 -0.187255577040926 -0.443835296044493 -0.366038890523527 -0.289961098688435 -0.365808022080411 -0.320815591557152 -0.321135565635495 -2.39521718853787 -0.622808369717321 5.64092383084364 6.1032990480843 8.16816242044389 -4.36300408986279 -2.43346599945546 -5.20600616819609 -0.296195014572998 -0.348417976130522 -0.702171776594095 -0.183372485042997 -0.116554565835549 -0.950321623855709            0            0            0
           0            0            0            0            0            0            0            0            0            0            0            0 -0.170168477755489 -0.300747476089817 -0.225304510739296 -3.65650828545896 -2.0394178887124 -4.36300408986279 3.9541533354776 2.58149487097621 5.39200014129753 -0.0529295707249776 -0.334590500654326 -0.643850421033125 -0.00565959317039764 -0.00156087986247078 0.0750008388592959 -0.0688874083677787 0.0948218743427998 -0.234841958521615
           0            0            0            0            0            0            0            0            0            0            0            0 -0.300747476089817 -0.531526435256471 -0.398192214270476 -2.0394178887124 -1.13748554634496 -2.43346599945546 2.58149487097621 3.91505246102543 6.5577735519446 -0.334590500654326 -2.11508995056487 -4.07005444724516 -0.00156087986247078 -0.000430480755721038 0.0206847551615919 0.0948218743427998 -0.13052004810341 0.323254353864896
           0            0            0            0            0            0            0            0            0            0            0            0 -0.225304510739296 -0.398192214270476 -0.298305086988041 -4.36300408986279 -2.43346599945546 -5.20600616819609 5.39200014129753 6.5577735519446 15.130794203497 -0.643850421033125 -4.07005444724516 -7.83198047871015 0.0750008388592959 0.0206847551615919 -0.993909926073881 -0.234841958521615 0.323254353864896 -0.800592543528811
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 -0.12494305465173 -0.146972109898873 -0.296195014572998 -0.0529295707249776 -0.334590500654326 -0.643850421033125 0.673131249838138 1.2652482629207 -0.598171706154923 -0.41055164537661 -0.99967230997953 1.71394838688475 -0.08470697908482 0.215986657612029 -0.175731245123706
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 -0.146972109898873 -0.172885168754175 -0.348417976130522 -0.334590500654326 -2.11508995056487 -4.07005444724516 1.2652482629207 5.27285101582717 -0.202985645679101 -0.99967230997953 -2.43415107111088 4.17337687571812 0.215986657612029 -0.550724825397247 0.448081193336658
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 -0.296195014572998 -0.348417976130522 -0.702171776594095 -0.643850421033125 -4.07005444724516 -7.83198047871015 -0.598171706154923 -0.202985645679101 16.0540177343347 1.71394838688475 4.17337687571812 -7.1552972835125 -0.175731245123706 0.448081193336658 -0.364568195517933
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 -0.0353832507087619 -0.0224901757929664 -0.183372485042997 -0.00565959317039764 -0.00156087986247078 0.0750008388592959 -0.41055164537661 -0.99967230997953 1.71394838688475 5.07459251546221 -3.87090445684609 -0.656636283585804 -4.62299802620644 4.89462782248106 -0.948940457115248
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 -0.0224901757929664 -0.0142951254355294 -0.116554565835549 -0.00156087986247078 -0.000430480755721038 0.0206847551615919 -0.99967230997953 -2.43415107111088 4.17337687571812 -3.87090445684609 7.63109423067295 -5.08220365737336 4.89462782248106 -5.18221755337082 1.00469659232919
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 -0.183372485042997 -0.116554565835549 -0.950321623855709 0.0750008388592959 0.0206847551615919 -0.993909926073881 1.71394838688475 4.17337687571812 -7.1552972835125 -0.656636283585804 -5.08220365737336 9.29431325386484 -0.948940457115248 1.00469659232919 -0.19478442042274
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 -0.0688874083677787 0.0948218743427998 -0.234841958521615 -0.08470697908482 0.215986657612029 -0.175731245123706 -4.62299802620644 4.89462782248106 -0.948940457115248 4.77659241365904 -5.20543635443589 1.35951366076057
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 0.0948218743427998 -0.13052004810341 0.323254353864896 0.215986657612029 -0.550724825397247 0.448081193336658 4.89462782248106 -5.18221755337082 1.00469659232919 -5.20543635443589 5.86346242687148 -1.77603213953074
           0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0            0 -0.234841958521615 0.323254353864896 -0.800592543528811 -0.175731245123706 0.448081193336658 -0.364568195517933 -0.948940457115248 1.00469659232919 -0.19478442042274 1.35951366076057 -1.77603213953074 1.35994515946948
Vector b:
0.0418034580416016
0.0181617611397508
0.0231440906971795
0.54317559276737
0.616412916973137
0.662352064668733
-0.253417469733293
0.101261771826766
0.0824684020408004
-0.117773733038091
-0.405869830361283
-0.354135169352921
-0.209276270748403
-0.134939853967858
-0.357028620951938
0.487509402774116
0.130047964015893
0.660695420208553
-0.412528289791425
0.174613374365459
0.260247377263383
-0.211813970529498
-1.01704302456482
-0.0273045003734253
0.42726670922226
0.10853984992581
-0.88716048359996
-0.294945428964638
0.408815070647142
-0.0632785806004045
SOlution X
0
0
0
-115805591812.649
-54123030062.4367
0
508512751933.679
2990488693898.1
-3582594819991.49
318479890443.186
3464520483106.64
-4230036199079.8
0
3908726058139.2
-3968155298663.6
0
4086333776173.47
-4651204980937.11
0.186472416915785
4600471118275.12
-4891530424402.66
0
5230608501220.87
-5218994654530.13
-0.849938364924736
5836139814897.1
-4865814306895.86
0
5935674140213.72
-4352416996949.29
[/size]


The solution has been calculated with Eigen::VectorXd X = A.colPivHouseholderQr().solve(b);


If you rather see the matrices on some other site, plz tell me where i can put it, maybe as textfile or something?
Eversleeping
Registered Member
Posts
11
Karma
0
OS

Re: Solving Ax = b II

Thu Jun 28, 2012 12:08 pm
Now i solved the problem using lapacks dposv and some +epsilons if A is notposdef:

Code: Select all
bool solve_lapack(Eigen::MatrixXd &A, Eigen::VectorXd &b)
{

   Eigen::MatrixXd copy = A;

   char UPLO = 'U';
   int N = A.cols();
   int NRHS = 1;
   int LDA = N;
   int LDB = N;

   Eigen::VectorXd X;
   X.resize(A.cols());

   int info = -1;

   double beta = 0.0001;
   int steps = 0;

   /*dposv_(char *UPLO, int *N, int *NRHS, double *A, int *LDA, double *B
    , int *LDB, int *INFO)*/
   while (1)
   {
      dposv_(&UPLO, &N, &NRHS, copy.data(), &LDA, b.data(), &LDB, &info);
      steps++;
      if (info != 0)
      {
         std::cout << "NICHT POSDEF" << std::endl;

      }
      for (int i = 0; i < N; i++)
      {
         A(i, i) = A(i, i) + beta;
         copy = A;
      }
      if (info == 0)
         break;

      if (steps == 100)
      {
         std::cout << "Kann es nicht posdef machen ERROR" << std::endl;
         exit(1);
      }
   }
   sleep(5);
}


And it works quite fine.
But how can i gain similar results using eigen-solvers?
User avatar
ggael
Moderator
Posts
3447
Karma
19
OS

Re: Solving Ax = b II

Thu Jun 28, 2012 2:49 pm
dposv is equivalent to x = A.llt().solve(b);

to increment the diagonal:

A.diagonal().array() += beta;
Eversleeping
Registered Member
Posts
11
Karma
0
OS

Re: Solving Ax = b II

Thu Jun 28, 2012 3:17 pm
Is there a way to check if llt was successful?

If A is not posdef how can i find out?

So from now on it will take some time until i can if this works out, i only work one day per week at this project
User avatar
ggael
Moderator
Posts
3447
Karma
19
OS

Re: Solving Ax = b II

Thu Jun 28, 2012 3:40 pm
LLT<MatrixXd> llt;

llt.compute(A);
if(llt.info()==Succeed)
// great :)
else
// update A


Bookmarks



Who is online

Registered users: Baidu [Spider], Bing [Bot], Google [Bot]