1

コードの最終出力であるベクトルに取り組んでいます。私が見つけたのは、要素を追加していなくても、関数に渡す前後でベクトルのサイズが異なることです。ベクトルを参照渡ししています。問題の関数は NM_sim であり、なぜこれが起こっているのかをデバッグできません。お時間をいただきありがとうございます。ベクトルを関数 NM_sim に渡す前後のサイズを追跡しています。NM_sim を呼び出した後、ベクトルのサイズが変更されます。ここに私のコードの一部があります:

state_type は std::vector として記述されます

random_select(gene_ind, n_ka_temp, n_kd_temp, kavec_pert, kdvec_pert, kaval_pert, kdval_pert);
             state_type param_pert;
             param_pert.push_back(param[0]);
             param_pert.push_back(param[1]);
             param_pert.push_back(param[2]);
             param_pert.insert(param_pert.end(),kaval_pert.begin(),kaval_pert.end());
             param_pert.insert(param_pert.end(),kdval_pert.begin(),kdval_pert.end());
             transform(param_pert.begin(),param_pert.end(),param_pert.begin(),powof10());
             cout << "########## Value of param size is: " << param.size() << " ################" << endl;
             MC_sim ( x_d, t_d, mean_xd, fex_nm, jex_nm, gene_ind, n_ka_temp, n_kd_temp, error_pert, param_pert);
             for (int i = 0; i < param.size(); i++)cout << "########## Value of param from MC is: " << param[i] << " ################" << endl;
             cout << "########## Value of param size is: " << param.size() << " ################" << endl;
             cout << "The optimized value of error from MC calculation is: " << error_pert << endl;
             NM_sim( x_d, t_d, mean_xd, fex_nm, jex_nm, gene_ind, n_ka_temp, n_kd_temp, error_pert, param_pert);
             cout << "The optimized value of error from NM calculation is: " << error_pert << endl;

NM_sim の内部:

void NM_sim( const state_type &x_d, const state_type &t_d, const state_type &mean_xd, myFex_single &fex_nm, myJex_single &jex_nm, const int &gene_ind, const int nka, const int nkd, double &error_ode, state_type &param)
{
    const int param_size = 3 + nka + nkd;
    cout << "########## Value of error from MC is: " << error_ode << " ################" << endl;
    cout << "########## Value of param size is: " << param.size() << " ################" << endl;
    for (int i = 0; i < param.size(); i++)cout << "########## Value of param from MC is: " << param[i] << " ################" << endl;
....
}

私が得る出力は次のとおりです。

########## Value of param from MC is: 0.789519 ################
########## Value of param from MC is: -0.47315 ################
########## Value of param from MC is: -0.693194 ################
########## Value of param from MC is: 0.368322 ################
########## Value of param from MC is: 0.298118 ################
########## Value of param from MC is: 0.883191 ################
########## Value of param size is: 6 ################
The optimized value of error from MC calculation is: 0.000329494
########## Value of error from MC is: 0.000329494 ################
########## Value of param size is: 13 ################
########## Value of param from MC is: 0.789519 ################
########## Value of param from MC is: -0.47315 ################
########## Value of param from MC is: -0.693194 ################
########## Value of param from MC is: 0.368322 ################
########## Value of param from MC is: 0.298118 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0.883191 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################
########## Value of param from MC is: 0 ################

ベクター サイズは、MC_sim 後の 6 から、NM_sim に渡した後の 13 になります。それを修正する方法についての考えやコメントは大歓迎です! ありがとう!

4

2 に答える 2

1

param_pertとの比較サイズparam。これら 2 つは同じベクトルではありません。

cout << "..." << param.size() << "..." << endl;
MC_sim ( x_d, t_d, mean_xd, fex_nm, jex_nm, gene_ind, n_ka_temp, n_kd_temp, error_pert, param_pert)

試す:

cout << "########## Value of param size is: " << param_pert.size() << " ################" << endl;
于 2013-09-16T17:10:03.740 に答える
0

ステップ 1: 前後の受け渡し以外のすべてのコードを削除します。まだ問題がありますか? そうでない場合、問題は関数コードにあります。それでも問題が解決しない場合は、少なくとも問題の原因が通過であることを知っています。

于 2013-09-16T17:11:51.413 に答える