對於對微分方程式感興趣的人,我寫了一個函式,它接收像 x^2+x^3 這樣的字串,並將其轉換為
2x+3x^2,這是前一個方程式的微分式。
程式碼中缺少一樣東西:$string{$i} 經常超出範圍(未初始化的字串偏移量:6 in...)
如果您的錯誤設定過高... 我只是不知道如何解決這個問題。
所以這裡是僅包含 (+ 和 -) 的微分方程式程式碼
<?
function differentiel($equa)
{
$equa = strtolower($equa);
echo "起始方程式: ".$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 "最終方程式:".$finalMul;
}
?>
我知道這不是最佳解,但我很快地完成了 :)
如果您有任何意見,請發送電子郵件給我。
我也想用 C 語言實現這個函式,或許很快就能加到 phpCore 中...
Patoff