NAG CL Interface
c02alc (quartic_​real)

Settings help

CL Name Style:


1 Purpose

c02alc determines the roots of a quartic equation with real coefficients.

2 Specification

#include <nag.h>
void  c02alc (double e, double a, double b, double c, double d, double zeror[], double zeroi[], double errest[], NagError *fail)
The function may be called by the names: c02alc, nag_zeros_quartic_real or nag_quartic_roots.

3 Description

c02alc attempts to find the roots of the quartic equation
ez4 + az3 + bz2 + cz + d = 0 ,  
where e , a , b , c and d are real coefficients with e0 . The roots are located by finding the eigenvalues of the associated 4 by 4 (upper Hessenberg) companion matrix H given by
H = ( -d / e -c / e -b / e -a / e ) .  
Further details can be found in Section 9.
To obtain the roots of a cubic equation, c02akc can be used.

4 References

Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore

5 Arguments

1: e double Input
On entry: e , the coefficient of z 4 .
Constraint: e0.0 .
2: a double Input
On entry: a , the coefficient of z 3 .
3: b double Input
On entry: b , the coefficient of z 2 .
4: c double Input
On entry: c , the coefficient of z .
5: d double Input
On entry: d , the constant coefficient.
6: zeror[4] double Output
7: zeroi[4] double Output
On exit: zeror[i-1] and zeroi[i-1] contain the real and imaginary parts, respectively, of the i th root.
8: errest[4] double Output
On exit: errest[i-1] contains an approximate error estimate for the i th root.
9: fail NagError * Input/Output
The NAG error argument (see Section 7 in the Introduction to the NAG Library CL Interface).

6 Error Indicators and Warnings

NE_C02_NOT_CONV
The iterative procedure used to determine the eigenvalues has failed to converge.
NE_C02_OVERFLOW
The companion matrix H cannot be formed without overflow.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
NE_REAL
On entry, e=0.0 .
Constraint: e0.0 .

7 Accuracy

If fail=NE_NOERROR on exit, then the i th computed root should have approximately |log10(errest[i-1])| correct significant digits.

8 Parallelism and Performance

Background information to multithreading can be found in the Multithreading documentation.
c02alc is not threaded in any implementation.

9 Further Comments

The method used by the function consists of the following steps, which are performed by functions from LAPACK.
  1. (a)Form matrix H .
  2. (b)Apply a diagonal similarity transformation to H (to give H ).
  3. (c)Calculate the eigenvalues and Schur factorization of H .
  4. (d)Calculate the left and right eigenvectors of H .
  5. (e)Estimate reciprocal condition numbers for all the eigenvalues of H .
  6. (f)Calculate approximate error estimates for all the eigenvalues of H (using the 1-norm).

10 Example

To find the roots of the quartic equation
z 4 + 2 z 3 + 6 z 2 - 8 z - 40 = 0 .  

10.1 Program Text

Program Text (c02alce.c)

10.2 Program Data

Program Data (c02alce.d)

10.3 Program Results

Program Results (c02alce.r)