Re: A Mathematica implementation of SolvOpt

• To: mathgroup at smc.vnet.net
• Subject: [mg88621] Re: A Mathematica implementation of SolvOpt
• From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
• Date: Sat, 10 May 2008 06:51:43 -0400 (EDT)
• Organization: The Open University, Milton Keynes, UK
• References: <g00uq4\$gi1\$1@smc.vnet.net>

```tommcd wrote:

[snip]

> For example I'd like a more efficient and elegant way to express
> Do[
>    deltax[[j]] = If[  g0[[j]] >= 0.0, h1*ddx, -h1*ddx]
> , {j,n}
> ];
>
> which in Fortran 95 can be written very clearly as
>
> Where(g0 >= 0.0)
>     g0 = h1*ddx
> ElseWhere
>     g0 = -h1*ddx
> End Where
>
> where g0 can be any array of up to 7 dimensions, & any number of array
> assignments
> can appear in each section (not just the one shown here), moreover the
> 'Where' can itself
> be nested inside another where etc.. For now a construct which works
> for the 1D list above
> and avoids the do loop would be fine, though if there is a general
> method for masked array assignments in Mathematica I love to hear

Tom,

You could use higher level built-in functions such as *Sign[]*,
*DiracDelta[]*, *UnitStep[]*, etc., functions that automatically thread
over lists and returned integer values in the range [-1, 1] (the actual
values depend on the function used) for each element of the lists.

Here is an example with *Sign[]*

g0 = {{{1, -2}, {3, -4, 5}}, {{6, -7, -8, -9}, 10}};
h1 = 12;
ddx = 1/2;
deltax = h1*ddx*Sign[g0]

{{{6, -6}, {6, -6, 6}}, {{6, -6, -6, -6}, 6}}

Regards,
-- Jean-Marc

```

• Prev by Date: issues with unit package
• Next by Date: Re: Display commands in a package
• Previous by thread: Re: A Mathematica implementation of SolvOpt
• Next by thread: Manipulate Hints, Tips, Tricks