Re: Re: Re: NSolve fails where Solve succeeds!
- To: mathgroup at smc.vnet.net
- Subject: [mg43557] Re: [mg43530] Re: [mg43478] Re: NSolve fails where Solve succeeds!
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sat, 20 Sep 2003 06:39:26 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
On Friday, September 19, 2003, at 04:41 PM, Murray Eisenberg wrote: > Are you objecting to the absence of a (vector) variable on the > left-hand > side of the equation, or just to an equation with a matrix (list of > equal-length lists) on the left-hand side and a scalar on the > right-hand > side? > > If the latter: Why should Mathematica NOT like {{a,b}, {c,d}} == 0 ? > After all, it has no trouble returning a reasonable result for: > > ((a, b}, {c, d}} + 0 > > I'm not talking about the way the language IS, but rather the way it > OUGHT to be designed! I don't agree. Note than: In[1]:= Attributes[Plus] Out[1]= {Flat, Listable, NumericFunction, OneIdentity, Orderless, Protected} In[2]:= Attributes[Equal] Out[2]= {Protected} Note that unlike Plus, Equal does not have the attribute Listable (and for good reasons!). The role of Listable in such cases is of course crucial: In[4]:= F[{{a,b},{c,d}},0] Out[4]= F[{{a,b},{c,d}},0] In[5]:= SetAttributes[F,Listable] In[6]:= F[{{a,b},{c,d}},0] Out[6]= {{F[a,0],F[b,0]},{F[c,0],F[d,0]}} Now, since Equal does not have the Listable attribute it is Solve that is responsible for the threading of Equal over List which happens only within Solve. I personally find this quite convenient, but it does not appear to be documented and seems to me as a case of putting convenience ahead of logic of design. (It is not really a good general principle for a function to sometimes behave as if it had an attribute it actually does not have). What is worse is that NSolve seems to behave differently in this respect, thus: In[9]:= NSolve[{x, y} == 0, {x, y}] Out[9]= {{x -> 0., y -> 0.}} In[10]:= NSolve[{{x, y}} == 0, {x, y}] ----Error message --- Out[10]= NSolve[{{x, y}} == 0, {x, y}] Andrzej Kozlowski Yokohama, Japan http://www.mimuw.edu.pl/~akoz/ http://platon.c.u-tokyo.ac.jp/andrzej/ > > > Jens-Peer Kuska wrote: > >> Hi, >> >> you say that the matrix {{a,b} >> {c,d}} >> >> should be equal to a scalar 0 and you wonder >> why Mathematica dont' like it ... >> >> I wonder why Solve[] gives a solution at all >> and *this* seems to be the bug. You mean >> >> NSolve[Flatten[Thread /@ Thread[{{a, b}, {c, d}} == 0]]] >> >> you you should tell Mathematica *what* you mean. >> >> Regards >> Jens >> >> >> Pavel Pokorny wrote: >> >>> Dear Mathematica friends >>> >>> Solve[{{a,b},{c,d}}==0] >>> >>> gives the correct solution in Mathematica 5.0 while >>> >>> NSolve[{{a,b},{c,d}}==0] >>> >>> fails. >>> >>> Is it a bug or an intention? >>> >>> It would be nice to have Solve and NSolve giving >>> as close results as possible. >>> >>> -- >>> Pavel Pokorny >>> Math Dept, Prague Institute of Chemical Technology >>> http://www.vscht.cz/mat/Pavel.Pokorny >> >> >> > > -- > Murray Eisenberg murray at math.umass.edu > Mathematics & Statistics Dept. > Lederle Graduate Research Tower phone 413 549-1020 (H) > University of Massachusetts 413 545-2859 (W) > 710 North Pleasant Street fax 413 545-1801 > Amherst, MA 01003-9305 > > >