10

((n * 2) + 10) / (n + 1) = 3できればPHPでこの式を解くのに助けが必要です。(数値2、10、および3は、変更可能な変数である必要があります。)

私はこの方程式を紙の上で非常に簡単に解くことができます。ただし、これをPHPで実装しようとすると、どこから始めればよいかわかりません。私はここでいくつかのGoogleクエリと検索を行いましたが、何も役に立たないようです。この問題に対処するための適切なアプローチが欠けています。

ヒントや指針があれば素晴らしいと思います。正確なコードを提供する場合は、この結果に到達した方法を説明してください。

4

5 に答える 5

15

あなたは方程式を解きたいのであって、それを実行したいのではありません。違いがあります。==方程式の実装は、入力するのと同じくらい簡単です。ただし、等式演算子()にしたい場合があります。

方程式ソルバーは複雑で複雑なものです。そのような良いもの(http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems)が周りにあるとき、私はそれを作ろうとはしません。

于 2011-08-31T08:01:47.527 に答える
8

http://pear.php.net/package/PHP_ParserGenerator/redirectedを使用して、数式を構文ツリーに解析してから、数学を実行できます。

((n * 2) + 10) / (n + 1) = 3次のようになります:

ここに画像の説明を入力してください

アイデアは、紙の場合と同じように、右側のサブツリー(ここ...)にすべての数字を表示し、左側にすべての未知数を表示することです。

最終的には次のようになります。

  +
 / \
n  -7

これは0です。これで、任意の数式(1つの未知の変数を使用)に対するソリューションが得られました。

アルゴリズムはあなたにお任せします。

于 2011-08-31T08:13:35.577 に答える
4
<?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;
}

?>

(私の代数は古くて薄っぺらですが、これは正しいと思います)

于 2011-08-31T08:13:09.770 に答える
3

強引な使い方はどうですか??!?!遅く、正確ではない可能性があります:

$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";
   }
}

この答えを推し進めることができます。すべてのループで、現在の答えと目的の答えの間の距離を計算し、それに応じてパラメーターを調整することができます。

これは私の古いAIクラスを思い出させます=)

幸運を

于 2011-08-31T08:19:28.287 に答える
0

Symbolism数式処理ライブラリを使用してC#でその方程式を解く方法は次のとおりです。

var n = new Symbol("n");

(((n * 2) + 10) / (n + 1) == 3)
    .IsolateVariable(n)
    .Disp();

そのコードが実行されると、コンソールに次のように表示されます。

n == 7
于 2015-10-27T03:36:00.810 に答える