# Math Functions in Perl

C

#### coolchick

Hi All,

I am trying to compute few equations using perl.

This is the equation that I am trying to solve:

MI=171-5.2*ln(aveV)-0.23*aveV(g)-16.2*ln(aveLOC)
+50sin(sqrt(2.46*perCM))

I have all the variables: aveV, aveV(g), aveLOC and perCM.
So the equation is:

\$MI=171 - (5.2*(2.303*log(\$aveV)))-(0.23*\$ecc)-
(16.2*(2.303*log(\$aveLOC)))+(50*(sin(sqrt(2.46*\$perCM))));

where:
\$aveV= 239.530014548124
\$ecc=9
\$aveLOC=47
\$perCM=0.297872340425532

I am not getting the correct answer. I get MI=-2.56217048794884, which
is not correct.
I tried to break it down and the problem is that I don't think I have
the right libraries for math.
It is not computing sqrt, log, and sin correctly.

I am using:
use Math::Complex;
use Math::Trig;

Any help would be great!
Thanks,
naureen

J

#### Jürgen Exner

coolchick said:
MI=171-5.2*ln(aveV)-0.23*aveV(g)-16.2*ln(aveLOC)
+50sin(sqrt(2.46*perCM))

I have all the variables: aveV, aveV(g), aveLOC and perCM.
So the equation is:

\$MI=171 - (5.2*(2.303*log(\$aveV)))-(0.23*\$ecc)-
(16.2*(2.303*log(\$aveLOC)))+(50*(sin(sqrt(2.46*\$perCM))));

where:
\$aveV= 239.530014548124
\$ecc=9
\$aveLOC=47
\$perCM=0.297872340425532

I am not getting the correct answer. I get MI=-2.56217048794884, which
is not correct.

This is a long shot, but is any of the iterim values exceedingly large or
small? If so then you fell victim to a variation of 'perldoc -q 999'.
The easiest remedy would be to rewrite the equation to avoid very
large/small iterim values. This is not trivial, but there is a reason why
Computer Numerics is a class of its own at university.

jue

S

#### smallpond

Hi All,

I am trying to compute few equations using perl.

This is the equation that I am trying to solve:

MI=171-5.2*ln(aveV)-0.23*aveV(g)-16.2*ln(aveLOC)
+50sin(sqrt(2.46*perCM))

I have all the variables: aveV, aveV(g), aveLOC and perCM.
So the equation is:

\$MI=171 - (5.2*(2.303*log(\$aveV)))-(0.23*\$ecc)-
(16.2*(2.303*log(\$aveLOC)))+(50*(sin(sqrt(2.46*\$perCM))));

where:
\$aveV= 239.530014548124
\$ecc=9
\$aveLOC=47
\$perCM=0.297872340425532

I am not getting the correct answer. I get MI=-2.56217048794884, which
is not correct.
I tried to break it down and the problem is that I don't think I have
the right libraries for math.
It is not computing sqrt, log, and sin correctly.

I am using:
use Math::Complex;
use Math::Trig;

Any help would be great!
Thanks,
naureen

Rearranging your equation to show intermediate terms:

\$aveV = 239.530014548124;
\$ecc = 9.0;
\$aveLOC = 47.0;
\$perCM = 0.297872340425532;

\$i1= (5.2 * (2.303*log(\$aveV)));
\$i2= (0.23 * \$ecc);
\$i3= (16.2 * (2.303*log(\$aveLOC)));
\$i4= (50 * (sin(sqrt(2.46*\$perCM))));

\$MI = 171.0 - \$i1 - \$i2 - \$i3 + \$i4;

print "171.0 - ",\$i1," - ",\$i2," - ",\$i3," + ",\$i4," = ",\$MI,"\n";

171.0 - 65.610465007406 - 2.07 - 143.64361681316 + 37.761911332617 =
-2.56217048794883

I don't think you have math errors. All of the terms are the
same order of magnitude. If the result is wrong, then it is
something in your formula. You do want log base e and angle
--S

C

C

#### coolchick

How can I do this inside my perl code ?

J

#### J. Gleixner

coolchick said:

How can I do this inside my perl code ?

At this point, most people would simply copy and paste the
relevant parts of the code into a file and experiment with
it on their own.

M

#### Michele Dondi

Hi All,

I am trying to compute few equations using perl.

Perl is not oriented at solving equations. You can solve them
symbolically and throw in values to compute the value of some function
given the arguments to it.

Michele

M

#### Michele Dondi

perldoc -f log:

log EXPR
log Returns the natural logarithm (base e) of EXPR.

For some reason, pocket calcultators have this habit of calling log_10
log and log_e ln. In my mathematical writings I just stick with log to
mean "their" ln. logarithms in any other base (unless explicitly
shown) are of little mathematical relevance, IMHO.

Michele

M

#### Martijn Lievaart

For some reason, pocket calcultators have this habit of calling log_10
log and log_e ln. In my mathematical writings I just stick with log to
mean "their" ln. logarithms in any other base (unless explicitly shown)
are of little mathematical relevance, IMHO.

I use log2 on a nearly daily basis. But then, I'm in computers while I

M4

M

#### Michele Dondi

I use log2 on a nearly daily basis. But then, I'm in computers while I

Hehe, in fact I was about to say that, probably along the lines of "a
second, but distant competitor being log_2". In fact information
theory is a respectable mathematical one also in its own respect i.e.
abstractly and regardless of any physical computer...

Michele