C#数学课堂问题
我需要计算C#中的Tanh-1C#数学课堂问题,c#,.net,math,.net-3.5,C#,.net,Math,.net 3.5,我需要计算C#中的Tanh-1 (和Sinh-1和Cosh-1) 我在数学图书馆里没找到。。有什么建议吗 编辑: 晒不晒 你需要自己定义它们 您需要使用现有函数(如Math.sin)自己推导它们 您可能会发现这很有用: 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 +
(和Sinh-1和Cosh-1) 我在数学图书馆里没找到。。有什么建议吗 编辑:
晒不晒 你需要自己定义它们
您需要使用现有函数(如Math.sin)自己推导它们 您可能会发现这很有用:
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)
要.NET验证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);
}
}
还有一个更快的计算tanh的公式,只需要一个exp(),因为tanh与逻辑函数相关: tanh(x)=2/(1+exp(-2*x))-1
也
tanh(x)=1-2/(1+exp(2*x))
请参阅:注意,自然对数在标准数学类中也不是函数,但是,普通对数是。您可以使用带底e的普通对数(这是数学类中的一个常量)。这就是自然对数的定义。为了数学艺术的完整性@KennyTM+1,请注意:)你是对的,我太快了:)事实上,Math.Log的默认重载(只需要一个双精度)是自然日志。只想添加:
asec(x)=acos(1/x),acsc(x)=asin(1/x),acot(x)=atan(1/x)
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);
}
}