The purpose of this chapter is to describe tools which can be used to analyze either one trigonometric equation in one variable or a system of trigonometric equations. These tools may be used either to improve the efficiency of the solving algorithm described in the previous chapter or even to avoid calling them if some constraints are imposed on the location of the solution.
(4.1) |
Using the above relation any trigonometric equation can be transformed into a polynomial equation which is analyzed using the tools of chapter 5.
It remains to define an interval for angles that we will denote an angle interval. The element of an angle interval is usually defined between 0 and (although in most of the following procedures any value can be used when not specified: internally the element of the angle interval are converted into value within this range). A difference between numbers interval (INTERVAL) and angle interval is that the lower bound of an angle interval may be larger than the upper bound. Indeed the order in an angle interval is important: for example the angle intervals [0,] and [,0] are not the same.
(4.2) |
int Degree_Max_Convert_Trigo_Interval(int n,VECTOR &A,INTEGER_VECTOR &SSin,INTEGER_VECTOR &CCos); int Degree_Max_Convert_Trigo_Interval(int n,INTEGER_VECTOR &A, INTEGER_VECTOR &SSin,INTEGER_VECTOR &CCos);with:
VOID Convert_Trigo_Interval(int n,VECTOR &A,INTEGER_VECTOR &SSin, INTEGER_VECTOR &CCos,VECTOR &Coeff,int *degree); VOID Convert_Trigo_Interval(int n,INTEGER_VECTOR &A,INTEGER_VECTOR &SSin, INTEGER_VECTOR &CCos,INTEGER_VECTOR &Coeff,int *degree); VOID Convert_Trigo_Interval(int n,INTERVAL_VECTOR &A,INTEGER_VECTOR &SSin, INTEGER_VECTOR &CCos,INTERVAL_VECTOR &Coeff,int *degree);with:
VOID Convert_Trigo_Pi_Interval(int n,VECTOR &A,INTEGER_VECTOR &SSin, INTEGER_VECTOR &CCos,INTEGER_VECTOR &Coeff,int *degree); VOID Convert_Trigo_Pi_Interval(int n,INTEGER_VECTOR &A,INTEGER_VECTOR &SSin, INTEGER_VECTOR &CCos,INTEGER_VECTOR &Coeff,int *degree); VOID Convert_Trigo_Pi_Interval(int n,INTERVAL_VECTOR &A,INTEGER_VECTOR &SSin, INTEGER_VECTOR &CCos,INTEGER_VECTOR &Coeff,int *degree);Similar procedures exists for interval trigonometric equations i.e. equations where the coefficients A are intervals. In that case degree will no more an integer but an INTERVAL which indicate the lowest and highest degree of the resulting polynomial. In some case the number of roots of the trigonometric equation may exceed the degree of the equivalent polynomial. For example the equation has the roots while the degree of the equivalent polynomial is only 1. In all cases the total number of roots of the trigonometric equation will never exceed the degree+2.
Having determined the equivalent polynomial you my use the tools described in section 5 for determining the number of roots of the trigonometric equation. But you still have to manage the search interval. The following procedure is able to determine this search interval and to determine the number of roots of the trigonometric equation:
int Nb_Root_Trigo_Interval(int n,VECTOR &A,INTEGER_VECTOR &SSin, INTEGER_VECTOR &CCos,REAL Inf,REAL Sup)with:
A | SSin | CCos |
1 | 2 | 1 |
-0.7071067810 | 2 | 0 |
-1.366025404 | 1 | 1 |
0.9659258263 | 1 | 0 |
0.4330127020 | 0 | 1 |
-0.3061862179 | 0 | 0 |
(4.3) |
int Bound_Root_Trigo_Interval(int n,VECTOR &A,INTEGER_VECTOR &SSin, INTEGER_VECTOR &CCos,int *nbsol,VECTOR &Inf,VECTOR &Sup);with:
The procedure:
int Angle_Ok_Interval(double angle,double b1,double b2);return 1 if the angle angle belongs to the angle interval [b1,b2], 0 otherwise. The angle angle,b1, b2 should have a value within [0,].
The procedure:
double Distance_Angle(double a1,double a2)return the smallest distance in radian between the two angles a1,a2.
Assume that we have where is an interval and should lie in an arbitrary range. The procedure Filtre_Arc_Cos allows to update the range for . It returns -1 is and are incompatible, 0 otherwise. Its syntax is:
int Filtre_Arc_Cos(INTERVAL &U,INTERVAL &beta)A similar procedure exist for the inverse sine with
The procedure Arc_Cos_Multiple allows to determine all possible ranges for , assuming that is restricted to a range included in ::
int Arc_Cos_Multiple(INTERVAL &U,INTERVAL &beta,INTERVAL_VECTOR &BETA)This procedure returns the number of possible ranges for and their values in BETA.
jean-pierre merlet