简体   繁体   English

C#数学课题

[英]C# Math class question

I need to calculate Tanh-1 in C# 我需要在C#中计算Tanh-1
(and Sinh-1 and Cosh-1) (和Sinh-1和Cosh-1)

I did not found it in Math library.. Any suggestions ? 我没有在数学库中找到它..有什么建议吗?

EDIT: Tanh not Tan !! 编辑:Tanh not Tan !!

You need to derive them yourself using existing functions eg Math.sin 您需要使用现有函数(例如Math.sin)自己派生它们

You might find this useful: 您可能会发现这很有用:

Secant Sec(X) = 1 / Cos(X) 
Cosecant Cosec(X) = 1 / Sin(X) 
Cotangent Cotan(X) = 1 / Tan(X) 
Inverse Sine Arcsin(X) = Atn(X / Sqr(-X * X + 1)) 
Inverse Cosine Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1) 
Inverse Secant Arcsec(X) = 2 * Atn(1) - Atn(Sgn(X) / Sqr(X * X - 1)) 
Inverse Cosecant Arccosec(X) = Atn(Sgn(X) / Sqr(X * X - 1)) 
Inverse Cotangent Arccotan(X) = 2 * Atn(1) - Atn(X) 
Hyperbolic Sine HSin(X) = (Exp(X) - Exp(-X)) / 2 
Hyperbolic Cosine HCos(X) = (Exp(X) + Exp(-X)) / 2 
Hyperbolic Tangent HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X)) 
Hyperbolic Secant HSec(X) = 2 / (Exp(X) + Exp(-X)) 
Hyperbolic Cosecant HCosec(X) = 2 / (Exp(X) - Exp(-X)) 
Hyperbolic Cotangent HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X)) 
Inverse Hyperbolic Sine HArcsin(X) = Log(X + Sqr(X * X + 1)) 
Inverse Hyperbolic Cosine HArccos(X) = Log(X + Sqr(X * X - 1)) 
Inverse Hyperbolic Tangent HArctan(X) = Log((1 + X) / (1 - X)) / 2 
Inverse Hyperbolic Secant HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X) 
Inverse Hyperbolic Cosecant HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X) 
Inverse Hyperbolic Cotangent HArccotan(X) = Log((X + 1) / (X - 1)) / 2 
Logarithm to base N LogN(X) = Log(X) / Log(N)

To .NET-ify David Relihan's formulas: 对于.NET-ify David Relihan的公式:

public static class MathHelper
{
    // Secant 
    public static double Sec(double x)
    {
        return 1/Math.Cos(x);
    }

    // Cosecant
    public static double Cosec(double x)
    {
        return 1/Math.Sin(x);
    }

    // Cotangent 
    public static double Cotan(double x)
    {
        return 1/Math.Tan(x);
    }

    // Inverse Sine 
    public static double Arcsin(double x)
    {
        return Math.Atan(x / Math.Sqrt(-x * x + 1));
    }

    // Inverse Cosine 
    public static double Arccos(double x)
    {
        return Math.Atan(-x / Math.Sqrt(-x * x + 1)) + 2 * Math.Atan(1);
    }


    // Inverse Secant 
    public static double Arcsec(double x)
    {
        return 2 * Math.Atan(1) - Math.Atan(Math.Sign(x) / Math.Sqrt(x * x - 1));
    }

    // Inverse Cosecant 
    public static double Arccosec(double x)
    {
        return Math.Atan(Math.Sign(x) / Math.Sqrt(x * x - 1));
    }

    // Inverse Cotangent 
    public static double Arccotan(double x)
    {
        return 2 * Math.Atan(1) - Math.Atan(x);
    } 

    // Hyperbolic Sine 
    public static double HSin(double x)
    {
        return (Math.Exp(x) - Math.Exp(-x)) / 2 ;
    }

    // Hyperbolic Cosine 
    public static double HCos(double x)
    {
        return (Math.Exp(x) + Math.Exp(-x)) / 2 ;
    }

    // Hyperbolic Tangent 
    public static double HTan(double x)
    {
        return (Math.Exp(x) - Math.Exp(-x)) / (Math.Exp(x) + Math.Exp(-x));
    } 

    // Hyperbolic Secant 
    public static double HSec(double x)
    {
        return 2 / (Math.Exp(x) + Math.Exp(-x));
    } 

    // Hyperbolic Cosecant 
    public static double HCosec(double x)
    {
        return 2 / (Math.Exp(x) - Math.Exp(-x));
    } 

    // Hyperbolic Cotangent 
    public static double HCotan(double x)
    {
        return (Math.Exp(x) + Math.Exp(-x)) / (Math.Exp(x) - Math.Exp(-x));
    } 

    // Inverse Hyperbolic Sine 
    public static double HArcsin(double x)
    {
        return Math.Log(x + Math.Sqrt(x * x + 1)) ;
    }

    // Inverse Hyperbolic Cosine 
    public static double HArccos(double x)
    {
        return Math.Log(x + Math.Sqrt(x * x - 1));
    }

    // Inverse Hyperbolic Tangent 
    public static double HArctan(double x)
    {
        return Math.Log((1 + x) / (1 - x)) / 2 ;
    }

    // Inverse Hyperbolic Secant 
    public static double HArcsec(double x)
    {
        return Math.Log((Math.Sqrt(-x * x + 1) + 1) / x);
    } 

    // Inverse Hyperbolic Cosecant 
    public static double HArccosec(double x)
    {
        return Math.Log((Math.Sign(x) * Math.Sqrt(x * x + 1) + 1) / x) ;
    }

    // Inverse Hyperbolic Cotangent 
    public static double HArccotan(double x)
    {
        return Math.Log((x + 1) / (x - 1)) / 2;
    } 

    // Logarithm to base N 
    public static double LogN(double x, double n)
    {
        return Math.Log(x) / Math.Log(n);
    }
}

You need to define them yourself. 你需要自己定义它们。

http://en.wikipedia.org/wiki/Hyperbolic_function#Inverse_functions_as_logarithms http://en.wikipedia.org/wiki/Hyperbolic_function#Inverse_functions_as_logarithms

    -1     1    1 + x
tanh   x = — ln —————
           2    1 - x

    -1               _______
sinh   x = ln ( x + √ x² + 1 )

    -1               _______
cosh   x = ln ( x + √ x² - 1 )

There is also faster formula for computing tanh, requiring only one exp(), because tanh is related to logistic function: 计算tanh的公式也更快,只需要一个exp(),因为tanh与逻辑函数有关:

tanh(x) = 2 / (1 + exp(-2 * x)) - 1 tanh(x)= 2 /(1 + exp(-2 * x)) - 1
also
tanh(x) = 1 - 2 / (1 + exp(2 * x)) tanh(x)= 1 - 2 /(1 + exp(2 * x))

See: http://en.wikipedia.org/wiki/Logistic_function 请参阅: http//en.wikipedia.org/wiki/Logistic_function

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM