Solve this specific large sparse system of linear equationsSolve: This System of equations for $X$ (does a real solution, exist?)Solving large, sparse system of linear equationsConjugating by an upper triangular matrix does not change the diagonal entries.Using QR decomposition to solve a system of equations with a singular matrixFinding eigenvalues of a block matrixAccelerating linear solve in MATLAB for a specific type of matricesSquare MatricesDoes this system of equations has a solution?Solving a system of linear equations by solving subsystemsIs the identity matrix an upper triangular matrix?
get_users(...) only returns one user
Why do UK politicians seemingly ignore opinion polls on Brexit?
Is it legal to have the "// (c) 2019 John Smith" header in all files when there are hundreds of contributors?
Springs with some finite mass
A poker game description that does not feel gimmicky
What happens when a metallic dragon and a chromatic dragon mate?
Why can Shazam fly?
Unbreakable Formation vs. Cry of the Carnarium
If a centaur druid Wild Shapes into a Giant Elk, do their Charge features stack?
Cannot send mail from command line, sasl authentication error
How can I plot a Farey diagram?
Is it possible to build an equivalent function just looking at the input and output of the original function?
Was there ever an axiom rendered a theorem?
How to deal with fear of taking dependencies
Poison Arrows Piercing damage reduced to 0, do you still get poisoned?
What is GPS' 19 year rollover and does it present a cybersecurity issue?
Java: Is there a common interface or superclass for arrays and collections?
New order #4: World
Why is it "Tumoren" and not "Tumore"?
Patience, young "Padovan"
Is there a familial term for apples and pears?
Are there any other methods to apply to solving simultaneous equations?
Is it wise to focus on putting odd beats on left when playing double bass drums?
How could a lack of term limits lead to a "dictatorship?"
Solve this specific large sparse system of linear equations
Solve: This System of equations for $X$ (does a real solution, exist?)Solving large, sparse system of linear equationsConjugating by an upper triangular matrix does not change the diagonal entries.Using QR decomposition to solve a system of equations with a singular matrixFinding eigenvalues of a block matrixAccelerating linear solve in MATLAB for a specific type of matricesSquare MatricesDoes this system of equations has a solution?Solving a system of linear equations by solving subsystemsIs the identity matrix an upper triangular matrix?
$begingroup$
I want to solve the system $Ax = b$ where $A in mathbb R^n times n$ and $b in mathbb R^n$ with $n approx 10^6$. If $A$ would be a fully dense matrix this would be hopeless of course but luckily the matrix is sparse and highly structured.
The matrix $A$ can be written as
beginalign
A = beginpmatrix
B_0 & B_1 & & & \
& C_1 & B_2 & & \
& & C_2 & B_3 & \
& & & C_3 & B_4 \
D & & & & C_4 \
endpmatrix
endalign
where $B_i$ are upper triangular matrices, $C_i$ are diagonal with each entry being equal to $-1$, and $D$ is a square matrix. The figure below provides a schematic overview of $A$ where every possibly nonzero entry is green and all zeroes are gray.
The upper triangular matrices $B_i$ have approximately the same structure but do not necessarily have the same entry values. The submatrices $B_i$, $C_i$, and $D$ typically have dimension $mtimes m$ with $m approx 10^5$.
I don't know whether it is useful, but we also know for all non-zeroes with $i neq j$ that $a_ij in (0, 1]$ and the entries on the diagonal equal $-1$ except for the part that overlaps with $B_0$, i.e., we have $C_i = -I$.
Note that the corresponding system $(A + I)y = b$, where $I$ is an identity matrix, is relatively easy to solve as the submatrices $C_i$ become null matrices. Then we can first solve $D hat x = hat b$ where $hat x$ and $hat b$ are the last entries of $x$ and $b$. Next, we can iteratively solve the triangular matrices one by one starting with the one closest to the bottom. Maybe we can use the solution $y$ (or a transformation of $y$) as an initial solution for $x$ for an iterative approach.
Is there a better way to solve this system compared to naively feeding the system to a solver such as Matlab or LAPACK?
EDIT 1: Green entries indicate a possibly positive value. However, for the square at the bottom, around half of the entries are expected to be zero.
EDIT 2: Given the enormous size of this problem, approximate methods are also more than welcome.

linear-algebra matrices systems-of-equations block-matrices sparse-matrices
$endgroup$
|
show 1 more comment
$begingroup$
I want to solve the system $Ax = b$ where $A in mathbb R^n times n$ and $b in mathbb R^n$ with $n approx 10^6$. If $A$ would be a fully dense matrix this would be hopeless of course but luckily the matrix is sparse and highly structured.
The matrix $A$ can be written as
beginalign
A = beginpmatrix
B_0 & B_1 & & & \
& C_1 & B_2 & & \
& & C_2 & B_3 & \
& & & C_3 & B_4 \
D & & & & C_4 \
endpmatrix
endalign
where $B_i$ are upper triangular matrices, $C_i$ are diagonal with each entry being equal to $-1$, and $D$ is a square matrix. The figure below provides a schematic overview of $A$ where every possibly nonzero entry is green and all zeroes are gray.
The upper triangular matrices $B_i$ have approximately the same structure but do not necessarily have the same entry values. The submatrices $B_i$, $C_i$, and $D$ typically have dimension $mtimes m$ with $m approx 10^5$.
I don't know whether it is useful, but we also know for all non-zeroes with $i neq j$ that $a_ij in (0, 1]$ and the entries on the diagonal equal $-1$ except for the part that overlaps with $B_0$, i.e., we have $C_i = -I$.
Note that the corresponding system $(A + I)y = b$, where $I$ is an identity matrix, is relatively easy to solve as the submatrices $C_i$ become null matrices. Then we can first solve $D hat x = hat b$ where $hat x$ and $hat b$ are the last entries of $x$ and $b$. Next, we can iteratively solve the triangular matrices one by one starting with the one closest to the bottom. Maybe we can use the solution $y$ (or a transformation of $y$) as an initial solution for $x$ for an iterative approach.
Is there a better way to solve this system compared to naively feeding the system to a solver such as Matlab or LAPACK?
EDIT 1: Green entries indicate a possibly positive value. However, for the square at the bottom, around half of the entries are expected to be zero.
EDIT 2: Given the enormous size of this problem, approximate methods are also more than welcome.

linear-algebra matrices systems-of-equations block-matrices sparse-matrices
$endgroup$
$begingroup$
If I am right, you can decompose in blocks where the blocks are diagonal or quasi-triangular (presumably, there remains a single element of the bottom left corner). Plus the full block.
$endgroup$
– Yves Daoust
5 hours ago
$begingroup$
You can get rid of the corner elements by decomposing in blocks and single rows/columns to isolate them. The benefit is that the inverses of the pure triangular matrices are easily obtained. I guess that the resolution can be virtually reduced to that of the full square, though the latter is still huge.
$endgroup$
– Yves Daoust
4 hours ago
$begingroup$
@YvesDaoust Thanks for your comments. Could you elaborate a bit more on the decomposition you propose in an answer?
$endgroup$
– Michiel
3 hours ago
$begingroup$
Are your $B_k, k>0$ truly triangular ?
$endgroup$
– Yves Daoust
1 hour ago
$begingroup$
@YvesDaoust Yes $B_k, k geq 0$ (indeed also $B_0$) are all upper triangular matrices.
$endgroup$
– Michiel
58 mins ago
|
show 1 more comment
$begingroup$
I want to solve the system $Ax = b$ where $A in mathbb R^n times n$ and $b in mathbb R^n$ with $n approx 10^6$. If $A$ would be a fully dense matrix this would be hopeless of course but luckily the matrix is sparse and highly structured.
The matrix $A$ can be written as
beginalign
A = beginpmatrix
B_0 & B_1 & & & \
& C_1 & B_2 & & \
& & C_2 & B_3 & \
& & & C_3 & B_4 \
D & & & & C_4 \
endpmatrix
endalign
where $B_i$ are upper triangular matrices, $C_i$ are diagonal with each entry being equal to $-1$, and $D$ is a square matrix. The figure below provides a schematic overview of $A$ where every possibly nonzero entry is green and all zeroes are gray.
The upper triangular matrices $B_i$ have approximately the same structure but do not necessarily have the same entry values. The submatrices $B_i$, $C_i$, and $D$ typically have dimension $mtimes m$ with $m approx 10^5$.
I don't know whether it is useful, but we also know for all non-zeroes with $i neq j$ that $a_ij in (0, 1]$ and the entries on the diagonal equal $-1$ except for the part that overlaps with $B_0$, i.e., we have $C_i = -I$.
Note that the corresponding system $(A + I)y = b$, where $I$ is an identity matrix, is relatively easy to solve as the submatrices $C_i$ become null matrices. Then we can first solve $D hat x = hat b$ where $hat x$ and $hat b$ are the last entries of $x$ and $b$. Next, we can iteratively solve the triangular matrices one by one starting with the one closest to the bottom. Maybe we can use the solution $y$ (or a transformation of $y$) as an initial solution for $x$ for an iterative approach.
Is there a better way to solve this system compared to naively feeding the system to a solver such as Matlab or LAPACK?
EDIT 1: Green entries indicate a possibly positive value. However, for the square at the bottom, around half of the entries are expected to be zero.
EDIT 2: Given the enormous size of this problem, approximate methods are also more than welcome.

linear-algebra matrices systems-of-equations block-matrices sparse-matrices
$endgroup$
I want to solve the system $Ax = b$ where $A in mathbb R^n times n$ and $b in mathbb R^n$ with $n approx 10^6$. If $A$ would be a fully dense matrix this would be hopeless of course but luckily the matrix is sparse and highly structured.
The matrix $A$ can be written as
beginalign
A = beginpmatrix
B_0 & B_1 & & & \
& C_1 & B_2 & & \
& & C_2 & B_3 & \
& & & C_3 & B_4 \
D & & & & C_4 \
endpmatrix
endalign
where $B_i$ are upper triangular matrices, $C_i$ are diagonal with each entry being equal to $-1$, and $D$ is a square matrix. The figure below provides a schematic overview of $A$ where every possibly nonzero entry is green and all zeroes are gray.
The upper triangular matrices $B_i$ have approximately the same structure but do not necessarily have the same entry values. The submatrices $B_i$, $C_i$, and $D$ typically have dimension $mtimes m$ with $m approx 10^5$.
I don't know whether it is useful, but we also know for all non-zeroes with $i neq j$ that $a_ij in (0, 1]$ and the entries on the diagonal equal $-1$ except for the part that overlaps with $B_0$, i.e., we have $C_i = -I$.
Note that the corresponding system $(A + I)y = b$, where $I$ is an identity matrix, is relatively easy to solve as the submatrices $C_i$ become null matrices. Then we can first solve $D hat x = hat b$ where $hat x$ and $hat b$ are the last entries of $x$ and $b$. Next, we can iteratively solve the triangular matrices one by one starting with the one closest to the bottom. Maybe we can use the solution $y$ (or a transformation of $y$) as an initial solution for $x$ for an iterative approach.
Is there a better way to solve this system compared to naively feeding the system to a solver such as Matlab or LAPACK?
EDIT 1: Green entries indicate a possibly positive value. However, for the square at the bottom, around half of the entries are expected to be zero.
EDIT 2: Given the enormous size of this problem, approximate methods are also more than welcome.

linear-algebra matrices systems-of-equations block-matrices sparse-matrices
linear-algebra matrices systems-of-equations block-matrices sparse-matrices
edited 41 mins ago
Michiel
asked 5 hours ago
MichielMichiel
291214
291214
$begingroup$
If I am right, you can decompose in blocks where the blocks are diagonal or quasi-triangular (presumably, there remains a single element of the bottom left corner). Plus the full block.
$endgroup$
– Yves Daoust
5 hours ago
$begingroup$
You can get rid of the corner elements by decomposing in blocks and single rows/columns to isolate them. The benefit is that the inverses of the pure triangular matrices are easily obtained. I guess that the resolution can be virtually reduced to that of the full square, though the latter is still huge.
$endgroup$
– Yves Daoust
4 hours ago
$begingroup$
@YvesDaoust Thanks for your comments. Could you elaborate a bit more on the decomposition you propose in an answer?
$endgroup$
– Michiel
3 hours ago
$begingroup$
Are your $B_k, k>0$ truly triangular ?
$endgroup$
– Yves Daoust
1 hour ago
$begingroup$
@YvesDaoust Yes $B_k, k geq 0$ (indeed also $B_0$) are all upper triangular matrices.
$endgroup$
– Michiel
58 mins ago
|
show 1 more comment
$begingroup$
If I am right, you can decompose in blocks where the blocks are diagonal or quasi-triangular (presumably, there remains a single element of the bottom left corner). Plus the full block.
$endgroup$
– Yves Daoust
5 hours ago
$begingroup$
You can get rid of the corner elements by decomposing in blocks and single rows/columns to isolate them. The benefit is that the inverses of the pure triangular matrices are easily obtained. I guess that the resolution can be virtually reduced to that of the full square, though the latter is still huge.
$endgroup$
– Yves Daoust
4 hours ago
$begingroup$
@YvesDaoust Thanks for your comments. Could you elaborate a bit more on the decomposition you propose in an answer?
$endgroup$
– Michiel
3 hours ago
$begingroup$
Are your $B_k, k>0$ truly triangular ?
$endgroup$
– Yves Daoust
1 hour ago
$begingroup$
@YvesDaoust Yes $B_k, k geq 0$ (indeed also $B_0$) are all upper triangular matrices.
$endgroup$
– Michiel
58 mins ago
$begingroup$
If I am right, you can decompose in blocks where the blocks are diagonal or quasi-triangular (presumably, there remains a single element of the bottom left corner). Plus the full block.
$endgroup$
– Yves Daoust
5 hours ago
$begingroup$
If I am right, you can decompose in blocks where the blocks are diagonal or quasi-triangular (presumably, there remains a single element of the bottom left corner). Plus the full block.
$endgroup$
– Yves Daoust
5 hours ago
$begingroup$
You can get rid of the corner elements by decomposing in blocks and single rows/columns to isolate them. The benefit is that the inverses of the pure triangular matrices are easily obtained. I guess that the resolution can be virtually reduced to that of the full square, though the latter is still huge.
$endgroup$
– Yves Daoust
4 hours ago
$begingroup$
You can get rid of the corner elements by decomposing in blocks and single rows/columns to isolate them. The benefit is that the inverses of the pure triangular matrices are easily obtained. I guess that the resolution can be virtually reduced to that of the full square, though the latter is still huge.
$endgroup$
– Yves Daoust
4 hours ago
$begingroup$
@YvesDaoust Thanks for your comments. Could you elaborate a bit more on the decomposition you propose in an answer?
$endgroup$
– Michiel
3 hours ago
$begingroup$
@YvesDaoust Thanks for your comments. Could you elaborate a bit more on the decomposition you propose in an answer?
$endgroup$
– Michiel
3 hours ago
$begingroup$
Are your $B_k, k>0$ truly triangular ?
$endgroup$
– Yves Daoust
1 hour ago
$begingroup$
Are your $B_k, k>0$ truly triangular ?
$endgroup$
– Yves Daoust
1 hour ago
$begingroup$
@YvesDaoust Yes $B_k, k geq 0$ (indeed also $B_0$) are all upper triangular matrices.
$endgroup$
– Michiel
58 mins ago
$begingroup$
@YvesDaoust Yes $B_k, k geq 0$ (indeed also $B_0$) are all upper triangular matrices.
$endgroup$
– Michiel
58 mins ago
|
show 1 more comment
3 Answers
3
active
oldest
votes
$begingroup$
The key is the fact that $C_i = - I$, i.e., the appropriately size identity matrix is trivially nonsingular and can be used to nullify the blocks above each copy. We have the following row equivalence
$$
A =
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
& & & -I & B_4 \
D & & & & -I \
endpmatrix
sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0 & B_1 & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0+B_1B_2B_3B_4D & & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix
$$
You can now factor the block $B_0 + B_1B_2B_3B_4D$ and compute $x_0$. The rest will be just be forward substitution, but compute them in descending order $x_4$, $x_3$, $x_2$, $x_1$ so that you do not have to regenerate the spike on the left.
$endgroup$
add a comment |
$begingroup$
You could try formulating it as a feasibility optimization problem such as
$$beginequation
beginarrayrrclcl
displaystyle min_x &0 \
textrms.t. & A x & = & b \
endarray
endequation$$
and feed it into a linear programming solver based on a branch-and-price algorithm such as GCG. Such algorithms are usually designed to exploit structured variables via a Dantzig-Wolfe decomposition. In fact, GCG is a branch-price-and-cut solver, meaning it also adds cutting planes in addition to the column generation approach via DW-decomposition. Very often such structured problems like yours can be solved fast via such a decomposition algorithm.
In the above problem formulation you can use any objective function as you are only looking for a feasible solution of your system $Ax=b$. Technically, you could replace the 0-objective function with any other objective function but why not just keep it simple?
$endgroup$
$begingroup$
I'll try this approach and will give an update once some results are there (expected at the end of next week).
$endgroup$
– Michiel
4 hours ago
add a comment |
$begingroup$
The easiest quite fast way is probably to use Carl-Christians algebraic solution.
If you are interested in low-level calculational tricks for these matrices you can keep reading below line.
Given the matrix structure there are some key matrix elements at the tips of the triangles. If you let the solution diffuse from there as in forward-substitution-like scheme or implicitly with CG you will gain a lot.
Maybe you can get some inspiration from another question of mine, if I can find it. Any triangular matrix you can factor into sparse di-diagonal matrix "in-place" multiplication. This saves calculations. But I don't remember where I wrote this question right now so I will try explain.
You can factor:
$$B_i = F_1F_2cdots F_m$$
Where each $F_i$ is an identity matrix except for the entries (i,i) and (i,i+1) which need to be determined.
Whooops $m$ matrices you think, but $m$ is huge, but since we only need store 2 values for each, it will only need $2m$ in total for each $B_i$, compared to $m^2/2$ which the tridiagonal $B_i$ ones need.
In practice for $m=10^5$ you could reduce memory fingerprint from tens gigabytes to singles of megabytes.
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
);
);
, "mathjax-editing");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "69"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3180688%2fsolve-this-specific-large-sparse-system-of-linear-equations%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
The key is the fact that $C_i = - I$, i.e., the appropriately size identity matrix is trivially nonsingular and can be used to nullify the blocks above each copy. We have the following row equivalence
$$
A =
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
& & & -I & B_4 \
D & & & & -I \
endpmatrix
sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0 & B_1 & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0+B_1B_2B_3B_4D & & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix
$$
You can now factor the block $B_0 + B_1B_2B_3B_4D$ and compute $x_0$. The rest will be just be forward substitution, but compute them in descending order $x_4$, $x_3$, $x_2$, $x_1$ so that you do not have to regenerate the spike on the left.
$endgroup$
add a comment |
$begingroup$
The key is the fact that $C_i = - I$, i.e., the appropriately size identity matrix is trivially nonsingular and can be used to nullify the blocks above each copy. We have the following row equivalence
$$
A =
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
& & & -I & B_4 \
D & & & & -I \
endpmatrix
sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0 & B_1 & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0+B_1B_2B_3B_4D & & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix
$$
You can now factor the block $B_0 + B_1B_2B_3B_4D$ and compute $x_0$. The rest will be just be forward substitution, but compute them in descending order $x_4$, $x_3$, $x_2$, $x_1$ so that you do not have to regenerate the spike on the left.
$endgroup$
add a comment |
$begingroup$
The key is the fact that $C_i = - I$, i.e., the appropriately size identity matrix is trivially nonsingular and can be used to nullify the blocks above each copy. We have the following row equivalence
$$
A =
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
& & & -I & B_4 \
D & & & & -I \
endpmatrix
sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0 & B_1 & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0+B_1B_2B_3B_4D & & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix
$$
You can now factor the block $B_0 + B_1B_2B_3B_4D$ and compute $x_0$. The rest will be just be forward substitution, but compute them in descending order $x_4$, $x_3$, $x_2$, $x_1$ so that you do not have to regenerate the spike on the left.
$endgroup$
The key is the fact that $C_i = - I$, i.e., the appropriately size identity matrix is trivially nonsingular and can be used to nullify the blocks above each copy. We have the following row equivalence
$$
A =
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
& & & -I & B_4 \
D & & & & -I \
endpmatrix
sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
& & -I & B_3 & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix sim
beginpmatrix
B_0 & B_1 & & & \
& -I & B_2 & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0 & B_1 & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrixsim
beginpmatrix
B_0+B_1B_2B_3B_4D & & & & \
B_2B_3B_4D & -I & & & \
B_3B_4D & & -I & & \
B_4D & & & -I & \
D & & & & -I \
endpmatrix
$$
You can now factor the block $B_0 + B_1B_2B_3B_4D$ and compute $x_0$. The rest will be just be forward substitution, but compute them in descending order $x_4$, $x_3$, $x_2$, $x_1$ so that you do not have to regenerate the spike on the left.
edited 3 hours ago
Rodrigo de Azevedo
13.2k41962
13.2k41962
answered 3 hours ago
Carl ChristianCarl Christian
6,0661723
6,0661723
add a comment |
add a comment |
$begingroup$
You could try formulating it as a feasibility optimization problem such as
$$beginequation
beginarrayrrclcl
displaystyle min_x &0 \
textrms.t. & A x & = & b \
endarray
endequation$$
and feed it into a linear programming solver based on a branch-and-price algorithm such as GCG. Such algorithms are usually designed to exploit structured variables via a Dantzig-Wolfe decomposition. In fact, GCG is a branch-price-and-cut solver, meaning it also adds cutting planes in addition to the column generation approach via DW-decomposition. Very often such structured problems like yours can be solved fast via such a decomposition algorithm.
In the above problem formulation you can use any objective function as you are only looking for a feasible solution of your system $Ax=b$. Technically, you could replace the 0-objective function with any other objective function but why not just keep it simple?
$endgroup$
$begingroup$
I'll try this approach and will give an update once some results are there (expected at the end of next week).
$endgroup$
– Michiel
4 hours ago
add a comment |
$begingroup$
You could try formulating it as a feasibility optimization problem such as
$$beginequation
beginarrayrrclcl
displaystyle min_x &0 \
textrms.t. & A x & = & b \
endarray
endequation$$
and feed it into a linear programming solver based on a branch-and-price algorithm such as GCG. Such algorithms are usually designed to exploit structured variables via a Dantzig-Wolfe decomposition. In fact, GCG is a branch-price-and-cut solver, meaning it also adds cutting planes in addition to the column generation approach via DW-decomposition. Very often such structured problems like yours can be solved fast via such a decomposition algorithm.
In the above problem formulation you can use any objective function as you are only looking for a feasible solution of your system $Ax=b$. Technically, you could replace the 0-objective function with any other objective function but why not just keep it simple?
$endgroup$
$begingroup$
I'll try this approach and will give an update once some results are there (expected at the end of next week).
$endgroup$
– Michiel
4 hours ago
add a comment |
$begingroup$
You could try formulating it as a feasibility optimization problem such as
$$beginequation
beginarrayrrclcl
displaystyle min_x &0 \
textrms.t. & A x & = & b \
endarray
endequation$$
and feed it into a linear programming solver based on a branch-and-price algorithm such as GCG. Such algorithms are usually designed to exploit structured variables via a Dantzig-Wolfe decomposition. In fact, GCG is a branch-price-and-cut solver, meaning it also adds cutting planes in addition to the column generation approach via DW-decomposition. Very often such structured problems like yours can be solved fast via such a decomposition algorithm.
In the above problem formulation you can use any objective function as you are only looking for a feasible solution of your system $Ax=b$. Technically, you could replace the 0-objective function with any other objective function but why not just keep it simple?
$endgroup$
You could try formulating it as a feasibility optimization problem such as
$$beginequation
beginarrayrrclcl
displaystyle min_x &0 \
textrms.t. & A x & = & b \
endarray
endequation$$
and feed it into a linear programming solver based on a branch-and-price algorithm such as GCG. Such algorithms are usually designed to exploit structured variables via a Dantzig-Wolfe decomposition. In fact, GCG is a branch-price-and-cut solver, meaning it also adds cutting planes in addition to the column generation approach via DW-decomposition. Very often such structured problems like yours can be solved fast via such a decomposition algorithm.
In the above problem formulation you can use any objective function as you are only looking for a feasible solution of your system $Ax=b$. Technically, you could replace the 0-objective function with any other objective function but why not just keep it simple?
answered 5 hours ago
YukiJYukiJ
2,1632928
2,1632928
$begingroup$
I'll try this approach and will give an update once some results are there (expected at the end of next week).
$endgroup$
– Michiel
4 hours ago
add a comment |
$begingroup$
I'll try this approach and will give an update once some results are there (expected at the end of next week).
$endgroup$
– Michiel
4 hours ago
$begingroup$
I'll try this approach and will give an update once some results are there (expected at the end of next week).
$endgroup$
– Michiel
4 hours ago
$begingroup$
I'll try this approach and will give an update once some results are there (expected at the end of next week).
$endgroup$
– Michiel
4 hours ago
add a comment |
$begingroup$
The easiest quite fast way is probably to use Carl-Christians algebraic solution.
If you are interested in low-level calculational tricks for these matrices you can keep reading below line.
Given the matrix structure there are some key matrix elements at the tips of the triangles. If you let the solution diffuse from there as in forward-substitution-like scheme or implicitly with CG you will gain a lot.
Maybe you can get some inspiration from another question of mine, if I can find it. Any triangular matrix you can factor into sparse di-diagonal matrix "in-place" multiplication. This saves calculations. But I don't remember where I wrote this question right now so I will try explain.
You can factor:
$$B_i = F_1F_2cdots F_m$$
Where each $F_i$ is an identity matrix except for the entries (i,i) and (i,i+1) which need to be determined.
Whooops $m$ matrices you think, but $m$ is huge, but since we only need store 2 values for each, it will only need $2m$ in total for each $B_i$, compared to $m^2/2$ which the tridiagonal $B_i$ ones need.
In practice for $m=10^5$ you could reduce memory fingerprint from tens gigabytes to singles of megabytes.
$endgroup$
add a comment |
$begingroup$
The easiest quite fast way is probably to use Carl-Christians algebraic solution.
If you are interested in low-level calculational tricks for these matrices you can keep reading below line.
Given the matrix structure there are some key matrix elements at the tips of the triangles. If you let the solution diffuse from there as in forward-substitution-like scheme or implicitly with CG you will gain a lot.
Maybe you can get some inspiration from another question of mine, if I can find it. Any triangular matrix you can factor into sparse di-diagonal matrix "in-place" multiplication. This saves calculations. But I don't remember where I wrote this question right now so I will try explain.
You can factor:
$$B_i = F_1F_2cdots F_m$$
Where each $F_i$ is an identity matrix except for the entries (i,i) and (i,i+1) which need to be determined.
Whooops $m$ matrices you think, but $m$ is huge, but since we only need store 2 values for each, it will only need $2m$ in total for each $B_i$, compared to $m^2/2$ which the tridiagonal $B_i$ ones need.
In practice for $m=10^5$ you could reduce memory fingerprint from tens gigabytes to singles of megabytes.
$endgroup$
add a comment |
$begingroup$
The easiest quite fast way is probably to use Carl-Christians algebraic solution.
If you are interested in low-level calculational tricks for these matrices you can keep reading below line.
Given the matrix structure there are some key matrix elements at the tips of the triangles. If you let the solution diffuse from there as in forward-substitution-like scheme or implicitly with CG you will gain a lot.
Maybe you can get some inspiration from another question of mine, if I can find it. Any triangular matrix you can factor into sparse di-diagonal matrix "in-place" multiplication. This saves calculations. But I don't remember where I wrote this question right now so I will try explain.
You can factor:
$$B_i = F_1F_2cdots F_m$$
Where each $F_i$ is an identity matrix except for the entries (i,i) and (i,i+1) which need to be determined.
Whooops $m$ matrices you think, but $m$ is huge, but since we only need store 2 values for each, it will only need $2m$ in total for each $B_i$, compared to $m^2/2$ which the tridiagonal $B_i$ ones need.
In practice for $m=10^5$ you could reduce memory fingerprint from tens gigabytes to singles of megabytes.
$endgroup$
The easiest quite fast way is probably to use Carl-Christians algebraic solution.
If you are interested in low-level calculational tricks for these matrices you can keep reading below line.
Given the matrix structure there are some key matrix elements at the tips of the triangles. If you let the solution diffuse from there as in forward-substitution-like scheme or implicitly with CG you will gain a lot.
Maybe you can get some inspiration from another question of mine, if I can find it. Any triangular matrix you can factor into sparse di-diagonal matrix "in-place" multiplication. This saves calculations. But I don't remember where I wrote this question right now so I will try explain.
You can factor:
$$B_i = F_1F_2cdots F_m$$
Where each $F_i$ is an identity matrix except for the entries (i,i) and (i,i+1) which need to be determined.
Whooops $m$ matrices you think, but $m$ is huge, but since we only need store 2 values for each, it will only need $2m$ in total for each $B_i$, compared to $m^2/2$ which the tridiagonal $B_i$ ones need.
In practice for $m=10^5$ you could reduce memory fingerprint from tens gigabytes to singles of megabytes.
edited 2 hours ago
answered 2 hours ago
mathreadlermathreadler
15.5k72263
15.5k72263
add a comment |
add a comment |
Thanks for contributing an answer to Mathematics Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3180688%2fsolve-this-specific-large-sparse-system-of-linear-equations%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
If I am right, you can decompose in blocks where the blocks are diagonal or quasi-triangular (presumably, there remains a single element of the bottom left corner). Plus the full block.
$endgroup$
– Yves Daoust
5 hours ago
$begingroup$
You can get rid of the corner elements by decomposing in blocks and single rows/columns to isolate them. The benefit is that the inverses of the pure triangular matrices are easily obtained. I guess that the resolution can be virtually reduced to that of the full square, though the latter is still huge.
$endgroup$
– Yves Daoust
4 hours ago
$begingroup$
@YvesDaoust Thanks for your comments. Could you elaborate a bit more on the decomposition you propose in an answer?
$endgroup$
– Michiel
3 hours ago
$begingroup$
Are your $B_k, k>0$ truly triangular ?
$endgroup$
– Yves Daoust
1 hour ago
$begingroup$
@YvesDaoust Yes $B_k, k geq 0$ (indeed also $B_0$) are all upper triangular matrices.
$endgroup$
– Michiel
58 mins ago