【问题标题】:Multidimensional arrays from MATLAB to C++从 MATLAB 到 C++ 的多维数组
【发布时间】:2017-12-31 02:12:46
【问题描述】:

所以我正在尝试用 C++ 做我在 MATLAB 中做的一个项目,但我一直卡住了。

这是我想转换为 C++ 的 MATLAB 中的代码部分。它可以在 MATLAB 上工作,但不能在 C++ 中工作

RelRough = [0, 1E-6, 5E-6, 1E-5, 5E-5, 0.0001, 0.0002, 0.0004, 0.0006, 0.0008, 0.001]; 
ReT = [4000, 5000, 6000, 7000, 8000, 9000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000,  100000,  200000,  300000,  400000,  500000];
for i = 1:length(ReT)
    for j = 1:length(RelRough)
       FCT_guess = 1;
       tolerance = 1;
       while tolerance > 1e-14
            FCT_cal = 1/(-2*log10((RelRough(j)/3.7) + (2.51/(ReT(i)*sqrt(FCT_guess)))))^2;
            tolerance = abs(FCT_cal-FCT_guess);
            FCT_guess = FCT_cal;
            FCT(i,j) = FCT_cal*1000;
       end
    end
end

这是我的 C++ 版本,我不断收到诸如变量 g 的“表达式必须具有整数或无范围枚举类型”之类的错误

double RelRough[] = { 0, 1E-6, 5E-6, 1E-5, 5E-5, 0.0001, 0.0002, 0.0004, 0.0006, 0.0008, 0.001 };
const int lengthRelRough = sizeof(RelRough) / sizeof(RelRough[0]);

double ReT[] = { 4000, 5000, 6000, 7000, 8000, 9000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000,  100000,  200000,  300000,  400000,  500000 };
const int lengthReT = sizeof(ReT) / sizeof(ReT[0]);

double fct[lengthReT][lengthRelRough] = { 0 };
    double fct_guess = 1;
double tolerance = 1;
double fct_cal = 0;
for (int ii = 0; ii < lengthReT; ++ii) {
    for (int jj = 0; jj < lengthRelRough; ++jj) {
        while (tolerance > 1e-14) {
            double h = (RelRough[jj] / 3.7), w = (2.51 / (ReT[ii] * sqrt(fct_guess)));
            double g = (-2*log10(h+w))^2;
            fct_cal = 1/g;
            tolerance = abs(fct_cal - fct_guess);
            fct_guess = fct_cal;
            fct[ii][jj] = fct_cal;
            std::cout << fct[ii][jj] << "\t";
        }
    }
}
    return 0;

}

有没有人帮忙看看哪里出了问题。提前致谢!

【问题讨论】:

  • 在 C++ 中,a^b 是 XOR 运算符,而不是幂运算符。您可能想使用pow(a, b);
  • double g = (-2*log10(h+w))^2; -- 这指出了尝试从一种语言逐行翻译到 C++ 的危险。

标签: c++ arrays matlab multidimensional-array


【解决方案1】:

改变这个:

double g = (-2*log10(h+w))^2;

进入:

double g = pow(-2*log10(h+w),2.0);

正如@Eljay 在他的评论中指出的那样,运算符^C++ 中执行XOR,而不是求幂。欲了解更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2014-05-30
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多