forum.alglib.net
http://forum.alglib.net/

SKS solver
http://forum.alglib.net/viewtopic.php?f=2&t=4531
Page 1 of 1

Author:  gabbia [ Mon Mar 20, 2023 9:55 am ]
Post subject:  SKS solver

Dear all,

I am trying to understand how it works the SKS format. Since I am obtaining incorrect results, I tried first to create a normal NxN sparse matrix, and then convert it to sks format. However, I am still getting incongruous results. Here is the piece of code (C#) that I am using for testing:

alglib.sparsematrix ss = new alglib.sparsematrix();
int nndof = 3;
alglib.sparsecreate(nndof, nndof,out ss);
alglib.sparseset(ss, 0, 0, 1.0);
alglib.sparseset(ss, 1, 1, 20.0);
alglib.sparseset(ss, 2, 2, 10.0);
alglib.sparseset(ss, 1, 2, -10.0);
alglib.sparseset(ss, 2, 1, -10.0);
alglib.sparsesolverreport report2 = new alglib.sparsesolverreport();
double[] force2 = new double[nndof];
force2[2] = -10.0;
double[] disp2 = new double[nndof];
alglib.sparsesolve(ss, force2, out disp2, out report2);
double[] disp3 = new double[nndof];
alglib.sparseconverttosks(ss);
alglib.sparsespdcholeskysolve(ss, true, force2, out disp3, out report2);

Results:
Disp2 = [0, -1, -2] (Correct)
Disp3 = [0, -0.05, -0.1] (Incorrect)

Can you please help me to understand what I am doing wrong? Many thanks.

Best regards,
Gabbia

Author:  Sergey.Bochkanov [ Wed Mar 29, 2023 5:06 pm ]
Post subject:  Re: SKS solver

Hi!

The reason is that spdcholeskysolve() family of functions expects its data to be not the matrix itself, but its Cholesky decomposition. That's why it gives wrong result - you passed original matrix which is used as if it was a Cholesky factor.

You should use:
* sparsespdsolvesks to solve SPD system in SKS format, usually low profile
* sparsespdsolve to solve general SPD system
* sparsesolve to solve general nonsymmetric system

Author:  gabbia [ Mon Apr 03, 2023 4:08 pm ]
Post subject:  Re: SKS solver

Many thanks!

Page 1 of 1 All times are UTC
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/