Мне нужно написать программу для решения квадратичных уравнений, возвращающую результат в виде комплексного числа.
Я зашел так далеко, определив комплексное число, объявив его частью num, поэтому +,- и * - ing могут иметь место.
Я также определил тип данных для квадратного уравнения, но теперь я застрял на фактическом решении квадратного уравнения. Моя математика довольно плохая, поэтому любая помощь будет принята с благодарностью...
data Complex = C {
re :: Float,
im :: Float
} deriving Eq
-- Display complex numbers in the normal way
instance Show Complex where
show (C r i)
| i == 0 = show r
| r == 0 = show i++"i"
| r < 0 && i < 0 = show r ++ " - "++ show (C 0 (i*(-1)))
| r < 0 && i > 0 = show r ++ " + "++ show (C 0 i)
| r > 0 && i < 0 = show r ++ " - "++ show (C 0 (i*(-1)))
| r > 0 && i > 0 = show r ++ " + "++ show (C 0 i)
-- Define algebraic operations on complex numbers
instance Num Complex where
fromInteger n = C (fromInteger n) 0 -- tech reasons
(C a b) + (C x y) = C (a+x) (b+y)
(C a b) * (C x y) = C (a*x - b*y) (b*x + b*y)
negate (C a b) = C (-a) (-b)
instance Fractional Complex where
fromRational r = C (fromRational r) 0 -- tech reasons
recip (C a b) = C (a/((a^2)+(b^2))) (b/((a^2)+(b^2)))
root :: Complex -> Complex
root (C x y)
| y == 0 && x == 0 = C 0 0
| y == 0 && x > 0 = C (sqrt ( ( x + sqrt ( (x^2) + 0 ) ) / 2 ) ) 0
| otherwise = C (sqrt ( ( x + sqrt ( (x^2) + (y^2) ) ) / 2 ) ) ((y/(2*(sqrt ( ( x + sqrt ( (x^2) + (y^2) ) ) / 2 ) ) ) ) )
-- quadratic polynomial : a.x^2 + b.x + c
data Quad = Q {
aCoeff, bCoeff, cCoeff :: Complex
} deriving Eq
instance Show Quad where
show (Q a b c) = show a ++ "x^2 + " ++ show b ++ "x + " ++ show c
solve :: Quad -> (Complex, Complex)
solve (Q a b c) = STUCK!
РЕДАКТИРОВАТЬ: я, кажется, упустил весь смысл использования моего собственного типа данных комплексного числа, чтобы узнать о пользовательских типах данных. Я хорошо знаю, что могу использовать complex.data. Будем очень признательны за любую помощь, которая может быть оказана с использованием моего решения.\
EDIT 2: Кажется, мой первоначальный вопрос был сформулирован ужасно. Я знаю, что квадратичная формула вернет мне оба (или только один) корень. У меня возникают проблемы с возвратом этих корней в виде (сложного, сложного) кортежа с приведенным выше кодом.
Я хорошо знаю, что мог бы использовать встроенные квадратичные функции, как показано ниже, но это не упражнение. Идея упражнения и создания собственного типа данных комплексного числа состоит в том, чтобы узнать о пользовательских типах данных.
Complex
изData.Complex
- person yairchu   schedule 03.08.2009