Matrix mulitplication
One can also use "crossprod" AND use "solve" to actually "solve"
the system of linear equations rather than just get the inverse, which
is later multiplied by t(BA)%*%D. However, the difference seems very
small:
> set.seed(1)
> n <- 500
> A <- array(rnorm(n^2), dim=c(n,n))
> B <- array(rnorm(n^2), dim=c(n,n))
> C. <- array(rnorm(n^2), dim=c(n,n))
> D <- array(rnorm(n^2), dim=c(n,n))
>
> BA <- B%*%A
>
> start.time <- proc.time()
> A1 <- A%*%solve(t(BA)%*%BA+C.)%*%BA%*%D
> proc.time()-start.time
[1] 4.75 0.03 5.13 NA NA
>
> start.time <- proc.time()
> A2 <- A%*%solve(crossprod(BA)+C., crossprod(t(BA), D))
> proc.time()-start.time
[1] 4.19 0.01 4.49 NA NA
> all.equal(A1, A2)
[1] TRUE
This was in R 1.8.1 under Windows 2000 on an IBM Thinkpad T30 with
a Mobile Intel Pentium 4-M, 1.8Ghz, 1Gbyte RAM. The same script under
S-Plus 6.2 produced the following elapsed times:
[1] 3.325 0.121 3.815 0.000 0.000
[1] 2.934 0.070 3.355 0.000 0.000
Thus, roughly, using "crossprod" plus "solving with solve" gave a
10% speed improvement and S-Plus 6.2 gave a 25% speed improvement in
this one small benchmark. Using smaller matrices did not show as big a
difference just because the time was too short to measure accurately, I
think.
Enough trivia for now.
Best Wishes,
spencer graves
(Ted Harding) wrote:
On 16-Feb-04 Peter Dalgaard wrote:
(Ted Harding) <Ted.Harding at nessie.mcc.ac.uk> writes:
Sorry! Missed a trick here:
At <- t(A)
Bt <- t(B)
E <- B%*%A
Et <- t(E)
A%*%solve(Et%*%E + C)%*%Et%*%D
(saves 2 multiplications at the relatively cheap cost of 1 transpose)
Well, you might consider getting rid of the first two transposes since you're not actually using them for anything....
Touch? ... ! Ted. -------------------------------------------------------------------- E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk> Fax-to-email: +44 (0)870 167 1972 Date: 16-Feb-04 Time: 23:41:57 ------------------------------ XFMail ------------------------------
______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html