我有一个向量:
ts<- c(1.061786, 1.201682, 1.265509, 1.372124, 1.572853, 1.629114, 1.660798, 1.898390, 1.908208, 1.944675)
。现在,我想从这个向量中得到另一个向量,该向量给出了连续成员之间的差异。对于最后一个值(ts [10]);差异将来自双“ T”。
代码如下:
cppFunction("
std::vector<double> res (std::vector<double> ts, double T ){
std::vector<double> newts(ts.size()+1);
newts[0]=0.0;
for(int j=1; j<=ts.size(); j++){
if(j< ts.size()){
newts[j]= ts[j]-ts[j-1];
}
else if (j== ts.size()){
newts[j]= T -ts[j];
}
else{
newts[j]=0.0;
}
}
return newts;
}
")
。 res(ts,T = 2)的实际结果应类似于:
[1] 0.000000000 0.139895661 0.063826732 0.106615236 0.200729464 0.056260681 0.031683749 0.237591892
[9] 0.009818105 0.036467479 0.05532473
。但这给了我结果:
[1] 0.000000000 0.139895661 0.063826732 0.106615236 0.200729464 0.056260681 0.031683749 0.237591892
[9] 0.009818105 0.036467479 2.000000000
那是新向量的最后一个成员不正确。为什么会这样呢?有什么建议吗?
修改
即使我使用以下代码:
cppFunction("
std::vector<double> res (std::vector<double> ts, double T ){
std::vector<double> newts(ts.size()+1);
for(int j=0; j<=ts.size(); j++){
if(j==0){
newts[j]=0.0;
}
else if(j< ts.size()){
newts[j]= ts[j]-ts[j-1];
}
else if (j== ts.size()){
newts[j]= T -ts[j];
}
else{
newts[j]=0.0;
}
}
return newts;
}
")
,它仍然给我错误的结果。
答案 0 :(得分:0)
最好从向量的尾部开始
std::vector<double> res(std::vector<double> ts, double T) {
std::vector<double> newts(ts.size() + 1);
newts[0] = 0.0;
int n = ts.size();
for (int j = n - 1; j > 0; j--) {
newts[j] = ts[j] - ts[j - 1];
}
newts[newts.size() - 1] = T - ts[n - 1];
return newts;
}
这是派生程序
int main() {
std::vector<double> ts{ 1.061786, 1.201682, 1.265509, 1.372124, 1.572853, 1.629114, 1.660798, 1.898390, 1.908208, 1.944675 };
double T = 2;
std::vector<double> result = res(ts, T);
for (auto x : result)
std::cout << x << "\n";
return 0;
}
答案 1 :(得分:-1)
好的,我找到了解决方案。刚在“ ts”向量中输入了双“ T”。
open http://localhost:8000