looking for a faster way

• To: mathgroup at smc.vnet.net
• Subject: [mg24998] looking for a faster way
• From: Otto Linsuain <linsuain+ at andrew.cmu.edu>
• Date: Fri, 1 Sep 2000 01:09:31 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

``` Hi to all. I am looking for a faster way to achieve the following:

Have two lists with the formats:

xlist = { x1, x2, x3, ....... xN }

flist = { f1, f2, f3, ....... fN }    the x's and f's are just numbers.

Want the matrix:

myMatrix [[ i, j ]] = ( fi - fj ) / ( xi- xj )

There are probably a thousand ways to avoid the Indeterminate along the
diagonal. Any of them is fine, as long as the off-diagonal part is not
touched. Speed is the real problem.

My solution so far is:

myMatrix[ xlist_, flist_ ] :=

Outer[Subtract, flist, flist] /

( Outer[Subtract, xlist, xlist] + IdentityMatrix[Length[xlist]])

the IdentityMatrix makes the diagonal zero, rather than Indeterminate.
This solution is not very fast because it involves 2 Outers, so that the
speed goes roughly as 2 N^2. If I could avoid one of them I would have
just one N^2, possibly + something-linear-in-N.

I have tried

myMatrix[ xlist_, flist_ ] :=
Outer[myFunction, Transpose[{flist,xlist}], Transpose[{flist,xlist}], 2]

this uses one Outer. This produces:

myMatrix [[ i, j ]] = myFunction[ {fi, xi}, {fj, xj} ]

myFuction is of course chosen to produce the desired combination of f's
and x's.

For lists in the length range I am interested in ( from 200 to 1000
elements ) the second solution is slower than the first, despite the
fact that it uses only one Outer. If anyone can think of something
faster than the first solution I would really appreciate it. Otto
Linsuain.

```

• Prev by Date: Re: Re : Mathematica PC to MAC problems
• Next by Date: Service multiple mathlinks
• Previous by thread: Re: Functional or rule-based ...
• Next by thread: Service multiple mathlinks