Re: mathematica newbie trouble
- To: mathgroup at smc.vnet.net
- Subject: [mg99319] Re: [mg99276] mathematica newbie trouble
- From: "David Park" <djmpark at comcast.net>
- Date: Sat, 2 May 2009 06:02:29 -0400 (EDT)
- References: <33135270.1241172362785.JavaMail.root@n11>
It's the SetDelayed on the k definition that causes the problem. Mathematica
does not know that s is a function of a, b and c. When k is evaluated with
numerical values a, b and c will only be substitutes where they explicitly
appear in the rhs expression of the k definition. When Set is used the s
expression is evaluated first and is part of the rhs definition.
But more basically, I think it is poor practice to write expressions such as
s = something, and then use it in subsequent definitions. It is better to
localize it to the k definition. After all, it goes with it. So I would use
something like the following:
k[a_, b_, c_] :=
With[{s = (a + b + c)/2},
Sqrt[s (s - a) (s - b) (s - c)]]
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
From: Guapo [mailto:yangshuai at gmail.com]
i wrote the following mathematica code:
s := (a + b + c)/2;
k[a_, b_, c_] := Sqrt[s (s - a) (s - b) (s - c)];
k[3, 4, 5]
k[5, 9, 12]
when run it, i can't get the write answer. but i change setDelayed(:=)
to set(=), everything works ok
s = (a + b + c)/2;
k[a_, b_, c_] = Sqrt[s (s - a) (s - b) (s - c)];
k[3, 4, 5]
k[5, 9, 12]
i did a google search for the difference of set and setDelayed,
however, i still can't understand it for the upper described problem,
could anyone explain it? great thanks.