मैं एक मैट्रिक्स (वेइबुल मॉडल की जानकारी मैट्रिक्स)आव्यूह गुणन - विभिन्न मूल्यों जब उत्पादन असाइन किया गया है
#include <RcppEigen.h>
#include <math.h>
#include <vector>
using namespace std;
using Eigen::MatrixXd;
// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::export]]
MatrixXd Weibull_FIM(const vector<double> x, const vector<double> w, const vector<double> param)
{
if(x.size() != w.size()){
Rcpp::Rcout<<"The length of x and w is not equal."<<std::endl;
exit(1);
}
double a, b, lambda, h, constant;
a = param[0];
b = param[1];
lambda = param[2];
h = param[3];
a = a + 0; //just to not get a warning
Eigen::MatrixXd Fisher_mat(4, 4);
size_t i;
for(i=0; i < x.size(); i++)
{
constant = exp(-lambda * pow(x[i], h));
Eigen::MatrixXd f(4, 1);
f(0, 0) = 1;
f(1, 0) = -constant;
f(2, 0) = b*pow(x[i], h)*constant;
f(3, 0) = b*pow(x[i], h)*constant * lambda * log(x[i]);
Fisher_mat = w[i] * f * f.transpose() + Fisher_mat;
}
return Fisher_mat;
}
अब मैं आर में कुछ मूल्यों के लिए मैट्रिक्स गणना करना चाहते हैं की गणना करने के लिए निम्न समारोह लिखा था :
Weibull_FIM(x=c(1, 1.239, 1.749371, 5), w = rep(.25, 4), param=c(1, 1, 1, 2))
# [,1] [,2] [,3] [,4]
#[1,] 1.00000000 -0.157545687 0.210509365 0.037774174
#[2,] -0.15754569 0.045985587 -0.053326010 -0.004757122
#[3,] 0.21050936 -0.053326010 0.066320481 0.008736574
#[4,] 0.03777417 -0.004757122 0.008736574 0.002864707
यह मैट्रिक्स ठीक है। अब, अगर मैं पहले आउटपुट असाइन करता हूं और फिर इसे प्रिंट करता हूं, तो मेरे पास एक अलग मैट्रिक्स होगा (कुछ तत्व कुछ बड़े मानों में बदल दिए जाएंगे!)।
res <- Weibull_FIM(x=c(1, 1.239, 1.749371, 5), w = rep(.25, 4), param=c(1, 1, 1, 2))
print(res)
# [,1] [,2] [,3] [,4]
#[1,] 1.00000000 4.727161e+180 0.210509365 2.267126e+161
#[2,] -0.15754569 5.104678e+199 -0.053326010 -4.757122e-03
#[3,] 0.21050936 2.079498e+64 0.066320481 8.736574e-03
#[4,] 0.03777417 -4.757122e-03 0.008736574 2.864707e-03
के रूप में देखा जा सकता है, तत्वों (1, 2), (1, 4), (2, 2) और (3, 2) एक और बड़ी मूल्यों को प्राप्त। मैं किसी भी मदद की सराहना करता हूं।
जवाब में Update1 @Ronald रहे हैं:
- आर संस्करण 3.1.2 (2014-10-31)
- विंडोज 7 x64 version.string
- मंच x86_64-W64-mingw32
- Rcpp_0.11.3, RcppEigen_0.3.2.3.0, tools_3.1.2
- Rtools संस्करण 3.2.0.1948
आपको अपनी सिस्टम जानकारी प्रदान करनी चाहिए। मैं Rtools के पुराने संस्करण के साथ Win7 सिस्टम पर नवीनतम पैकेज संस्करणों के साथ आर 3.2.0 का उपयोग करके इसे पुन: उत्पन्न कर सकता हूं (मुझे अपडेट करने के लिए हमारे सिस्टम व्यवस्थापक की आवश्यकता है)। मैं इसे आर 3.1.2 और नवीनतम पैकेज संस्करणों के साथ लिनक्स सिस्टम पर पुन: पेश नहीं कर सकता। – Roland