Квадратичная функция с комплексными числами

Я пишу функцию в 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, и я знаю, что это невероятно простой код. Мы будем очень признательны за любые советы.


person J. Nav    schedule 11.09.2017    source источник


Ответы (2)


Вы можете использовать этот простой код.

 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
person Onyambu    schedule 11.09.2017

В строке: cat("The roots are", x, "and", y,"i\n"); он будет искать x и y, которые не объявлены. Также он будет вычислять корни, даже если D<0, поэтому лучше использовать блок if, иначе:

    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");
      }
person Himanshu Rai    schedule 11.09.2017
comment
Теперь мой код работает отлично, но он не выводит результаты, когда я пытаюсь выполнить quad(1, 0, 5) или что-то в этом роде. Он просто распечатает то, что я написал. Есть идеи, о чем это? - person J. Nav; 12.09.2017