对于对微分方程感兴趣的人,我写了一个函数,它接收像这样的一串字符串:x^2+x^3 并将其转换为
2x+3x^2,这是前面方程的微分。
在代码中,只有一件事缺失:$string{$i} 经常超出边界(未初始化的字符串偏移量:6 在...中)
如果你的错误设置设置得太高了...我只是不知道如何解决这个问题。
所以,这里是对微分方程(只有 + 和 -)的代码
<?
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