The dyad %. solves overdetermined linear systems,
i.e. tall (or square) matrices. e.g.
X=: _25 + 10 4 ?...@$ 50
b=: 2 3 4 5
e=: 10 ?...@$ 0
y=: e + X +/ .* b
y %. X
2.00375 3.03291 3.99406 4.97709
y1=: X +/ .* b
y1 %. X
2 3 4 5
(i{y1) %. i{X [ i=: 4?#X
2 3 4 5
The columns of the matrix must be linearly independent,
however.
----- Original Message -----
From: "R.E. Boss" <[email protected]>
Date: Saturday, March 13, 2010 6:51
Subject: [Jprogramming] Solving linear equations
To: 'Programming forum' <[email protected]>
> I did not find a method for solving a set of linear equations,
> apart from
> the ones in /math/misc/linear.ijs which did not work for mutual
> dependentequations. So I constructed a solution myself.
> (See also http://www.jsoftware.com/jwiki/RE%20Boss/J-
> blog/(De)Convolution )
>
>
> NB. y is a matrix representing a set of equations given by the
> multipliers(}:"1 y) and the results ({:"1 y).
> NB. the result is a vector, or a matrix, the minimal set of
> independentequations
>
> sle=: 3 :
> 0 NB. solve linear
> equations
> Y=. (#"1~ +./@:*)&.|:
> y NB. eliminate
> dependent equations
> Y=. \:~ rdeq^:(<:@{:@$)^:_
> Y NB. reduce the
> equations and sort them in descending order
> if. 1 = -~/ $Y do. {:"1 Y return.
> end. NB. give the
> solution in the natural order
> Y NB. give the minimal
> set of independent equations
> )
>
> rdeq=: 3 :
> 0 NB. reduce equations
> y0=. {.y
> assert. (0 ~: +./ }:y0) +. 0 =
> {:y0 NB. conflicting
> equations
> t=. ((%~<:)@{. , }. % {.) y {"1~ 1 i.~ * |
> y0 NB.
> coefficients to
> be used
> Y=. ({. ,~ }.) t (] - (*/ {.))
> y NB. cleaning the
> column
> (#"1~ +./@:*)&.|:
> Y NB. eliminate
> dependent equations
> )
>
> T=:".;._2]0
> :0 NB. from
> http://www.jsoftware.com/jwiki/RE%20Boss/J-blog/(De)Convolution
> 6 0 0 0 0 0 0 0 0 0 0 0 30
> 9 6 0 0 0 0 0 0 0 0 0 0 57
> 0 9 6 0 0 0 0 0 0 0 0 0 72
> 6 0 9 6 0 0 0 0 0 0 0 0 141
> 3 6 0 9 0 0 0 0 0 0 0 0 72
> 0 3 6 0 0 0 0 0 0 0 0 0 60
> 0 0 3 6 0 0 0 0 0 0 0 0 57
> 0 0 0 3 0 0 0 0 0 0 0 0 15
> 2 0 0 0 6 0 0 0 0 0 0 0 34
> 9 2 0 0 9 6 0 0 0 0 0 0 85
> 1 9 2 0 0 9 6 0 0 0 0 0 95
> 7 1 9 2 6 0 9 6 0 0 0 0 233
> 3 7 1 9 3 6 0 9 0 0 0 0 95
> 0 3 7 1 0 3 6 0 0 0 0 0 128
> 0 0 3 7 0 0 3 6 0 0 0 0 89
> 0 0 0 3 0 0 0 3 0 0 0 0 15
> 0 0 0 0 2 0 0 0 6 0 0 0 8
> 0 0 0 0 9 2 0 0 9 6 0 0 78
> 0 0 0 0 1 9 2 0 0 9 6 0 139
> 0 0 0 0 7 1 9 2 6 0 9 6 238
> 0 0 0 0 3 7 1 9 3 6 0 9 135
> 0 0 0 0 0 3 7 1 0 3 6 0 138
> 0 0 0 0 0 0 3 7 0 0 3 6 102
> 0 0 0 0 0 0 0 3 0 0 0 3 24
> 0 0 0 0 0 0 0 0 2 0 0 0 0
> 0 0 0 0 0 0 0 0 9 2 0 0 14
> 0 0 0 0 0 0 0 0 1 9 2 0 81
> 0 0 0 0 0 0 0 0 7 1 9 2 104
> 0 0 0 0 0 0 0 0 3 7 1 9 130
> 0 0 0 0 0 0 0 0 0 3 7 1 92
> 0 0 0 0 0 0 0 0 0 0 3 7 83
> 0 0 0 0 0 0 0 0 0 0 0 3 24
> )
>
> sle T
> 5 2 9 5 4 0 9 0 0 7 9 8
>
> ({:"1 T) -: (}:"1 T)(+/@:*"1) sle T
> 1
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm