By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,722 Members | 1,381 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,722 IT Pros & Developers. It's quick & easy.

Equation

P: n/a
Hello people =)

Has somebody a nice script, which can solve equations ?
It would be super, if someone has an idea where I can get such a script /
code in php.

Thanks.

Gretting!
Jul 17 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Sven Dzepina wrote:
Hello people =)

Has somebody a nice script, which can solve equations ?
yes, I do now :-)
It would be super, if someone has an idea where I can get such a script /
code in php.
Use mine
Thanks.


you're welcome :-)))


<?php // solve equation
function solve($eq) {
$eq = str_replace(' ', '', $eq);

// validate expression
$terms = explode('=', $eq);
if (count($terms) != 2) {
return('syntax error: you must have one (and only one) "=" in ['
. $eq . '].');
}

// put rhs in lhs
$eq = $terms[0] . '-(' . $terms[1] . ')';

if (substr_count($eq, '(') != substr_count($eq, ')')) {
return('syntax error: parenthesis mismatch in [' . $eq . '].');
}
if (preg_match('/\([^)]*\(/', $eq)) {
return('syntax error: only one level of parenthesis allowed in ['
. $eq . '].');
}
if (preg_match('/[^x0-9+*\/().=-]/', $eq)) {
return('syntax error: the only valid characters are x, 0-9, +, '
. '*, /, (, ), ., and - in [' . $eq . ']');
}
if (preg_match('/[^x0-9\)][-+\/*]/', $eq)) {
return('syntax error: you can only operate on numbers in ['
. $eq . ']');
}
if (preg_match('/[-+\/*][^x0-9\(]/', $eq)) {
return('syntax error: you can only operate on numbers in ['
. $eq . ']');
}

$eq = str_replace('x', '$x', $eq);
$y0 = $y1 = 0;
$x = 0; eval('$y0 = ' . $eq . ';');
$x = 1; eval('$y1 = ' . $eq . ';');
$slope = $y1 - $y0;
$intersect = $y0;
return (- ($intersect / $slope));
}

$eq = '2 * (x + 4) = 10';
echo $eq, ' ==> x = ', solve($eq), '<br />';

$eq = '(2 * x) + 4 = 10';
echo $eq, ' ==> x = ', solve($eq), '<br />';

$eq = '2 * x + 4 = 10';
echo $eq, ' ==> x = ', solve($eq), '<br />';

$eq = '4 + x / 10 = 2';
echo $eq, ' ==> x = ', solve($eq), '<br />';
?>
--
I have a spam filter working.
To mail me include "urkxvq" (with or without the quotes)
in the subject line, or your mail will be ruthlessly discarded.
Jul 17 '05 #2

P: n/a
Big Thanks Pedro!
It's a great script =)

An Equation Script which can handle more variables would be better ;)
"Pedro" <he****@hotpop.com> schrieb im Newsbeitrag
news:d2********************************@4ax.com...
Sven Dzepina wrote:
Hello people =)

Has somebody a nice script, which can solve equations ?


yes, I do now :-)
It would be super, if someone has an idea where I can get such a script /
code in php.


Use mine
Thanks.


you're welcome :-)))


<?php // solve equation
function solve($eq) {
$eq = str_replace(' ', '', $eq);

// validate expression
$terms = explode('=', $eq);
if (count($terms) != 2) {
return('syntax error: you must have one (and only one) "=" in ['
. $eq . '].');
}

// put rhs in lhs
$eq = $terms[0] . '-(' . $terms[1] . ')';

if (substr_count($eq, '(') != substr_count($eq, ')')) {
return('syntax error: parenthesis mismatch in [' . $eq . '].');
}
if (preg_match('/\([^)]*\(/', $eq)) {
return('syntax error: only one level of parenthesis allowed in ['
. $eq . '].');
}
if (preg_match('/[^x0-9+*\/().=-]/', $eq)) {
return('syntax error: the only valid characters are x, 0-9, +, '
. '*, /, (, ), ., and - in [' . $eq . ']');
}
if (preg_match('/[^x0-9\)][-+\/*]/', $eq)) {
return('syntax error: you can only operate on numbers in ['
. $eq . ']');
}
if (preg_match('/[-+\/*][^x0-9\(]/', $eq)) {
return('syntax error: you can only operate on numbers in ['
. $eq . ']');
}

$eq = str_replace('x', '$x', $eq);
$y0 = $y1 = 0;
$x = 0; eval('$y0 = ' . $eq . ';');
$x = 1; eval('$y1 = ' . $eq . ';');
$slope = $y1 - $y0;
$intersect = $y0;
return (- ($intersect / $slope));
}

$eq = '2 * (x + 4) = 10';
echo $eq, ' ==> x = ', solve($eq), '<br />';

$eq = '(2 * x) + 4 = 10';
echo $eq, ' ==> x = ', solve($eq), '<br />';

$eq = '2 * x + 4 = 10';
echo $eq, ' ==> x = ', solve($eq), '<br />';

$eq = '4 + x / 10 = 2';
echo $eq, ' ==> x = ', solve($eq), '<br />';
?>
--
I have a spam filter working.
To mail me include "urkxvq" (with or without the quotes)
in the subject line, or your mail will be ruthlessly discarded.

Jul 17 '05 #3

P: n/a
Sven Dzepina wrote:
Big Thanks Pedro!
It's a great script =)
LOL, thanks

An Equation Script which can handle more variables would be better ;)


Yes, I'm pretty sure it would.
If you can guarantee the equations are normalized

3x - 6 = 0

instead of

4(x-1) = x+2

that makes making the solver script terribly easy for

a) ax+b=0
b) ax^2+bx+c=0
c) ax+by+c=0 (and) dx+ey+f=0
d) ...

Input only the constants ... not the whole equation;
for the equation above you'd input only: a=3, and b=-6

and then solve (after checking for division by zero only):
return -($b/$a);
or, for equation in type 2:
return array((-$b+sqrt($a*$a-4*$a*$c))/(2*$a),
(-$b-sqrt($a*$a-4*$a*$c))/(2*$a));

etc. ... ...

Happy Coding :-)

Jul 17 '05 #4

P: n/a
Hi Pedro,

you must be a very intelligent human =)

Gretting.

"Pedro" <he****@hotpop.com> schrieb im Newsbeitrag
news:bm************@ID-203069.news.uni-berlin.de...
Sven Dzepina wrote:
Big Thanks Pedro!
It's a great script =)


LOL, thanks

An Equation Script which can handle more variables would be better ;)


Yes, I'm pretty sure it would.
If you can guarantee the equations are normalized

3x - 6 = 0

instead of

4(x-1) = x+2

that makes making the solver script terribly easy for

a) ax+b=0
b) ax^2+bx+c=0
c) ax+by+c=0 (and) dx+ey+f=0
d) ...

Input only the constants ... not the whole equation;
for the equation above you'd input only: a=3, and b=-6

and then solve (after checking for division by zero only):
return -($b/$a);
or, for equation in type 2:
return array((-$b+sqrt($a*$a-4*$a*$c))/(2*$a),
(-$b-sqrt($a*$a-4*$a*$c))/(2*$a));

etc. ... ...

Happy Coding :-)

Jul 17 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.