1 //static const char* sccsid = "@(#)Expr_Tanh.cxx 3.2 95/01/10"; // Do not delete this line. Used by sccs.
2 // Copyright: Matra-Datavision 1991
4 // Created: Tue May 28 14:36:42 1991
5 // Author: Arnaud BOUZY
8 #include <Expr_Tanh.ixx>
9 #include <Expr_NumericValue.hxx>
10 #include <Expr_ArgTanh.hxx>
11 #include <Expr_Cosh.hxx>
12 #include <Expr_Square.hxx>
13 #include <Expr_Division.hxx>
14 #include <Expr_Operators.hxx>
17 Expr_Tanh::Expr_Tanh(const Handle(Expr_GeneralExpression)& exp)
22 Handle(Expr_GeneralExpression) Expr_Tanh::ShallowSimplified () const
24 Handle(Expr_GeneralExpression) myexp = Operand();
25 if (myexp->IsKind(STANDARD_TYPE(Expr_NumericValue))) {
26 Handle(Expr_NumericValue) myNVexp = Handle(Expr_NumericValue)::DownCast(myexp);
27 return new Expr_NumericValue(Tanh(myNVexp->GetValue()));
29 if (myexp->IsKind(STANDARD_TYPE(Expr_ArgTanh))) {
30 return myexp->SubExpression(1);
32 Handle(Expr_Tanh) me = this;
36 Handle(Expr_GeneralExpression) Expr_Tanh::Copy () const
38 return new Expr_Tanh(Expr::CopyShare(Operand()));
41 Standard_Boolean Expr_Tanh::IsIdentical (const Handle(Expr_GeneralExpression)& Other) const
43 if (Other->IsKind(STANDARD_TYPE(Expr_Tanh))) {
44 Handle(Expr_GeneralExpression) myexp = Operand();
45 return myexp->IsIdentical(Other->SubExpression(1));
47 return Standard_False;
50 Standard_Boolean Expr_Tanh::IsLinear () const
52 return !ContainsUnknowns();
55 Handle(Expr_GeneralExpression) Expr_Tanh::Derivative (const Handle(Expr_NamedUnknown)& X) const
58 return new Expr_NumericValue(0.0);
60 Handle(Expr_GeneralExpression) myexp = Operand();
61 Handle(Expr_GeneralExpression) myder = myexp->Derivative(X);
62 Handle(Expr_Cosh) firstder = new Expr_Cosh(Expr::CopyShare(myexp));
63 Handle(Expr_Square) sq = new Expr_Square(firstder->ShallowSimplified());
64 Handle(Expr_Division) resu = myder / sq->ShallowSimplified();
65 return resu->ShallowSimplified();
68 Standard_Real Expr_Tanh::Evaluate(const Expr_Array1OfNamedUnknown& vars, const TColStd_Array1OfReal& vals) const
70 Standard_Real val = Operand()->Evaluate(vars,vals);
71 return (::Exp(val)-::Exp(-val))/(::Exp(val)+::Exp(-val));
74 TCollection_AsciiString Expr_Tanh::String() const
76 TCollection_AsciiString str("Tanh(");
77 str += Operand()->String();