Php 如何用编程语言求解数学方程?
我需要帮助来解决这个公式Php 如何用编程语言求解数学方程?,php,math,equation,equation-solving,Php,Math,Equation,Equation Solving,我需要帮助来解决这个公式((n*2)+10)/(n+1)=3,最好用PHP。(数字2、10和3应该是可以更改的变量。) 我能在纸上很容易地解出这个方程。然而,当我试图在PHP中实现这一点时,我不确定从哪里开始。我在这里做了几次谷歌查询和搜索,似乎没有任何帮助。我缺少处理这个问题的正确方法 任何提示和指针都很好,如果您提供了准确的代码,请解释您是如何得到这个结果的。您想要的是解一个方程,而不是实现它。这是不同的。实现这个等式就像输入它一样简单。不过,您可能希望将其设置为相等运算符(==) 方程求解
((n*2)+10)/(n+1)=3
,最好用PHP。(数字2、10和3应该是可以更改的变量。)
我能在纸上很容易地解出这个方程。然而,当我试图在PHP中实现这一点时,我不确定从哪里开始。我在这里做了几次谷歌查询和搜索,似乎没有任何帮助。我缺少处理这个问题的正确方法
任何提示和指针都很好,如果您提供了准确的代码,请解释您是如何得到这个结果的。您想要的是解一个方程,而不是实现它。这是不同的。实现这个等式就像输入它一样简单。不过,您可能希望将其设置为相等运算符(
==
)
方程求解器是非常复杂的事情。当有这么好的()存在时,我不会尝试做一个。您可以使用它将数学表达式解析为语法树,然后进行数学运算
<?php
// ((x * n) + y)/(n + 1) = z)
// => n=(y-z)/(z-x)
function eq ($x=0,$y=0,$z=0)
{
if ($z!=$x)
{
$n=($y-$z)/($z-$x);
} else
{
$n='NAN';
}
return $n;
}
?>
((n*2)+10)/(n+1)=3
这个想法是把所有的数字放在右边的子树(这里是…
)上,把所有的未知数放在左边,就像你在纸上做的那样
最后,您将拥有:
+
/ \
n -7
也就是0。对于任何数学表达式(带有一个未知变量),都有自己的解决方案
我将把算法留给你。使用蛮力怎么样??!?!可能很慢而且不准确:
$step = 0.00001;
$err = 0.1; //error margin
$start = 0;
$response = 3;
for($i = $start;$i <= 3;$i += $step){
if((($i * 2) + 10) / ($i + 1) >= $response - $err){
echo "the answer is $i";
}
}
$step=0.00001;
$err=0.1//误差幅度
$start=0;
$response=3;
对于($i=$start;$i=$response-$err){
echo“答案是$i”;
}
}
你可以改进这个答案。。在每个循环中,您可以计算当前答案和所需答案之间的距离,并据此调整参数
这让我想起了我以前的A.I.类=)
祝你好运以下是如何使用计算机代数库在C#中求解该方程:
var n = new Symbol("n");
(((n * 2) + 10) / (n + 1) == 3)
.IsolateVariable(n)
.Disp();
执行该代码时,控制台上会显示以下内容:
n == 7
您是否只需要实现这一个或所有相同类型的方程?是否允许您重新制定方程?公式转换/方程求解有专门的语言。PHP不适合它,因为科学用途不是它的主要领域。不过,您可能会在Python或Perl中找到一些东西(然后通过exec调用它们)。@pinouchon仅此一个,但数字将是dynamic@Deve是的,我可以重新表述这个等式“你想解决一个等式,而不是实现它。”哦,我多么希望我能不止一次投票……感谢你指出了正确的术语。我将编辑这个问题:)phpCAS并不是你认为它的意思。你的功能是有效的!你介意解释一下你写作/思考时的思维过程吗?你的函数在数学上是不正确的。您缺少案例$y==$x&&$z==$x。在这种情况下,esembleR-{1}
是方程的解
,你的函数会产生-1
,但是((x*n)+y)/(n+1)=z
给出((0*-1)+0)/(-1+1)=1
,这是不可能的。我的get out子句是因为我的代数既旧又薄,不是我每天都用的东西。主要是检查除法是否为0(因此检查ZX)。我在解决方案背后的想法是将方程转化为x*n=c
(即使x是一个分数)。一旦它变成这种形式,解决方案就是简单地将方程重新写入PHP@pinouchon-显然,对于特殊情况,可以添加更多检查。然而,我是一名程序员,不是数学家,所以我的警告仍然有效——我的代数很老,很脆弱,但我认为这是正确的,这是一个解决方案,但我正在寻找正确的方法来解决它。谢谢你的回答!很有意思,我来看看:)