对于对微分方程感兴趣的人,我已经编写了一个函数,它接收类似于:x^2+x^3这样的字符串,并将其转换为
2x+3x^2,这是前一个方程的微分。
代码中缺少一样东西:$string{$i}经常超出范围(未初始化的字符串偏移量:6 in…)
如果您的错误设置过高……我只是不知道该如何解决。
所以这里只有加减运算的微分方程代码
<?
function differentiel($equa)
{
$equa = strtolower($equa);
echo "Equation de depart: ".$equa."<br>";
$final = "";
for($i = 0; $i < strlen($equa); $i++)
{
//从接收到的$equa创建一个新字符串
if($equa{$i} == "x" && $equa{$i+1} == "^")
{
$final .= $equa{$i+2};
$final .= "x^";
$final .= $equa{$i+2}-1;
}
elseif($equa{$i} == "+" || $equa{$i} == "-")
{
$final .= $equa{$i};
}
elseif(is_numeric($equa{$i}) && $i == 0)
{
//处理括号和其他一般项+处理^后:2^2
$final .= $equa{$i}."*";
}
elseif(is_numeric($equa{$i}) && $i > 0 && $equa{$i-1} != "^")
{
//处理^后:2^2
$final .= $equa{$i}."*";
}
elseif($equa{$i} == "^")
{
continue;
}
elseif(is_numeric($equa{$i}) && $equa{$i-1} == "^")
{
continue;
}
else
{
if($equa{$i} == "x")
{
$final .= 1;
}
else
{
$final .= $equa{$i};
}
}
}
//
//管理在之前的字符串$final中添加的乘法
//
$finalMul = "";
for($i = 0; $i < strlen($final); $i++)
{
if(is_numeric($final{$i}) && $final{$i+1} == "*" && is_numeric($final{$i+2}))
{
$finalMul .= $final{$i}*$final{$i+2};
}
elseif($final{$i} == "*")
{
continue;
}
elseif(is_numeric($final{$i}) && $final{$i+1} != "*" && $final{$i-1} == "*")
{
continue;
}
else
{
$finalMul .= $final{$i};
}
}
echo "equa final: ".$finalMul;
}
?>
我知道这不是最佳方案,但我很快就完成了 :)
如果您有任何意见,请给我发电子邮件。
我还想在C语言中编写这个函数,也许很快就会添加到phpCore…
Patoff