00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef NatafProbabilityTransformation_h
00035 #define NatafProbabilityTransformation_h
00036
00037 #include <Vector.h>
00038 #include <Matrix.h>
00039 #include <ReliabilityDomain.h>
00040 #include <MatrixOperations.h>
00041
00042 class NatafProbabilityTransformation : public ProbabilityTransformation
00043 {
00044
00045 public:
00046 NatafProbabilityTransformation(ReliabilityDomain *passedReliabilityDomain,
00047 int printFlag);
00048 ~NatafProbabilityTransformation();
00049
00050 int set_x(Vector x);
00051 int set_u(Vector u);
00052
00053 int transform_x_to_u();
00054 int transform_u_to_x();
00055 int transform_u_to_x_andComputeJacobian();
00056
00057 Vector get_x();
00058 Vector get_u();
00059 Matrix getJacobian_x_u();
00060 Matrix getJacobian_u_x();
00061
00062 Vector meanSensitivityOf_x_to_u(Vector &x, int gradNumber);
00063 Vector stdvSensitivityOf_x_to_u(Vector &x, int gradNumber);
00064
00065 protected:
00066
00067 private:
00068
00069
00070 Vector *x;
00071 Vector *u;
00072 Matrix *jacobian_x_u;
00073 Matrix *jacobian_u_x;
00074 ReliabilityDomain *theReliabilityDomain;
00075 MatrixOperations *theMatrixOperations;
00076 int nrv;
00077 Matrix *correlationMatrix;
00078 Matrix *lowerCholesky;
00079 Matrix *inverseLowerCholesky;
00080 int printFlag;
00081
00082
00083 void setCorrelationMatrix(int pertMeanOfThisRV, int pertStdvOfThisRV, double h);
00084 Matrix getJacobian_z_x(Vector x, Vector z);
00085 Vector z_to_x(Vector z);
00086 Vector x_to_z(Vector x);
00087
00088
00089
00090 double phi2(double z_i,
00091 double z_j,
00092 double rho);
00093 double integrand(int rv_i,
00094 double z_i,
00095 double mean_i,
00096 double stdv_i,
00097 int rv_j,
00098 double z_j,
00099 double mean_j,
00100 double stdv_j,
00101 double rho);
00102 double doubleIntegral(int rv_i,
00103 double mean_i,
00104 double stdv_i,
00105 int rv_j,
00106 double mean_j,
00107 double stdv_j,
00108 double rho);
00109 double residualFunction(double rho_original,
00110 double rho,
00111 double rv_i,
00112 double mean_i,
00113 double stdv_i,
00114 double rv_j,
00115 double mean_j,
00116 double stdv_j);
00117 double solveForCorrelation(int rv_i, int rv_j, double rho_original);
00118 };
00119
00120 #endif