2017-09-11 2 views
0

저는 R에 함수를 써서 기본적인 2 차 방정식을 풀어주고 뿌리를줍니다. 해당하는 경우 허수를 인쇄해야합니다. 아래는 제 코드입니다. 누구든지 내 코딩을 향상시킬 수있는 방법에 대한 조언을 줄 수 있습니까?복소수를 가진 이차 함수

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