2017-09-11 10 views
0

私はRで関数を書いています。この関数は基本二次方程式を解く必要があり、根を与えます。私は該当する場合、虚数を印刷する必要があります。以下は私のコードです。私のコーディングをどのように改善できるか、誰にでも助言を与えることができますか?複素数を使った二次関数

quad = function(a, b, c){ 
D = b^2 - 4*a*c 
if (D < 0){ 
    cat("The roots are", x, "and", y,"i\n"); 
    z < - complex(real = x, imaginary = y) 
    return(); 
} 

x = (-b - D^0.5)/(2*a) 
y = (-b + D^0.5)/(2*a) 
cat("The two roots are", x, "and", y, "\n"); 
} 

私は信じられないほど新しいRのプログラマーですが、これは信じられないほど簡単なコードだと分かります。アドバイスをいただければ幸いです。

答えて

0

行内:cat("The roots are", x, "and", y,"i\n");xyは、宣言されていません。

if (D < 0){ 
     # cat("The roots are", x, "and", y,"i\n"); 
     # z < - complex(real = x, imaginary = y) 
     cat("imaginary roots") 
     } 
     else{ 
     x = (-b - D^0.5)/(2*a) 
     y = (-b + D^0.5)/(2*a) 
     cat("The two roots are", x, "and", y, "\n"); 
     } 
+0

私のコードは完全に実行されますが、クワッド(1、0、5)などを実行しようとすると結果が表示されません。それはちょうど私が書いたものを印刷します。それが何であるか、どんな考えですか? –

0

あなたはこの単純なコードを使用することができます。また、それはD<0がとても良く、あなたが、他のブロックのような場合に使用しても根を計算します。

quadr=function(a,b,c){ 
    D=b^2-4*a*c 
    m=ifelse(D<0,complex(1,0,sqrt(abs(k))),sqrt(k)) 
    c((-b+m)/(2*a),(-b-m)/(2*a)) 
    } 

quadr(1,1,6) 
[1] -0.5+2.397916i -0.5-2.397916i 

quadr(1,1,-6) 
[1] 2 -3 
関連する問題