#pragma once #include "math.h" #include "zxHugeNum.h" // 贝塞尔函数 class I_ALGMATH_EXPORT zxBessel { public: zxBessel(); ~zxBessel(); public: // 贝塞尔函数(基础函数部分) bool besselI0(double x, double &b); double getbesselI0(double x); bool besselI1(double x, double &b); double getbesselI1(double x); bool besselK0(double x, double &b); double getbesselK0(double x); bool besselK1(double x ,double &b); double getbesselK1(double x); // 贝塞尔函数(组合模式) // K1/I1 bool besselK1I1(double x, double &b); // K0/I0 bool besselK0I0(double x, double &b); // I0/I1 bool besselI0I1(double x, double &b); // I0(x)/I1(y) bool besselI0I1(double x, double y, double &b); // I0(x)/I0(y) bool besselI0I0(double x, double y, double &b); // I1(x)/I1(y) bool besselI1I1(double x, double y, double &b); // K1(x)/I1(y) bool besselK1I1(double x, double y, double &b); // K1(x)/I0(y) bool besselK1I0(double x, double y, double &b); // K0(x)/I0(y) bool besselK0I0(double x, double y, double &b); // (I0(x)/I1(x))/(I0(y)/I1(y)) bool besselI0I1I0I1(double x, double y, double &b); // (K0(x)/I0(x))/(K1(y)/I1(y)) bool besselK0I0K1I1(double x, double y, double &b); // 大数模式 zxHugeNum besselI(int which, double x); zxHugeNum besselK(int which, double x); public: //////////////////////////////////////////////////////////////// // 由于单个的超过数值范围,故一起在内部进行处理 // 仅仅测试 //double calDemoA(double d1, double d2); //double calDemoB(double d1, double d2); zxHugeNum besselDivide(bool byK1, int which1, double x1, \ bool byK2, int which2, double x2, \ bool* pOk = NULL); zxHugeNum besselMultiple(bool byK1, int which1, double x1, \ bool byK2, int which2, double x2, \ bool* pOk = NULL); protected: zxHugeNum besselDivMul(bool bDivide, \ bool byK1, int which1, double x1, \ bool byK2, int which2, double x2, \ bool* pOk = NULL); double _besselByY(double y, bool bK, int which, bool bLower); public: void setComMode(bool b) { m_bComMode = b; } bool isComMode() { return m_bComMode; } double getResultI() { return m_dIndex; } double getResultM() { return m_dMultipler; } private: bool m_bComMode; //对于大数,采取复合模式 double m_dIndex; //exp的次数 double m_dMultipler; //乘数,合起来是 exp(m_dIndex) * m_dMultipler; //////////////////////////////////////////////////////////////// };