将代码从MATLAB转换为C ++

时间:2018-01-20 20:51:05

标签: c++ matlab function

下面的代码是用MATLAB编写的,并且在MATLAB中正确运行,我一直试图将其转换为C ++,但我一直收到错误。我试图以函数的形式编写这个程序,所以我可以在 int main函数

中调用它
function flow = fcoeff_ridwansa( Re, RelRough )
    if (Re < 4000)
       FCL = (64./Re);
       flow = FCL;
    else
       for i = 1:length(Re)
           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/(Re(i)*sqrt(FCT_guess)))))^2;
                   tolerance = abs(FCT_cal-FCT_guess);
                   FCT_guess = FCT_cal;
                   flow(i,j) = FCT_cal;
               end
           end
       end
   end
   end

这是我在C ++中的尝试

double f(double Re[], double RelRough[]){
double fcoeff;
const double lengthRelRough = sizeof(RelRough) / sizeof(RelRough[0]);
const double lengthRe = sizeof(Re) / sizeof(Re[0]);

if (*Re < 4000.0) {
        fcoeff = 64 / *Re;
    }

else {
    for (int i = 0; i < lengthRe; ++i) {
        for (int j = 0; j < lengthRelRough; ++j) {
            double fct_guess = 1;
            double tolerance = 1;
            while (tolerance > 1e-14) {
                double h = (-2 * log10((RelRough[j] / 3.7) + (2.51 / (Re[i] * sqrt(fct_guess)))));
                double fct_cal = 1 / pow(h, 2);
                tolerance = abs(fct_cal - fct_guess);
                fct_guess = fct_cal;
                fcoeff = fct_cal;
            }
        }
    }
}
return fcoeff;
}

int main()
{
    double f(double Re[], double RelRough[]);
    double r[] = { 600.0 }, n[] = { 0.002 };
    std::cout << f(r, n) << "\n";
    return 0;
}

3 个答案:

答案 0 :(得分:2)

const double lengthRelRough = sizeof(RelRough) / sizeof(RelRough[0]);
const double lengthRe = sizeof(Re) / sizeof(Re[0]);

这些语句都不会像你期望的那样工作,因为RelRough和Re是指针而不是数组。

无法将数组传递给C ++中的函数。

如果您使用向量而不是数组,则可能会发现这更容易。

答案 1 :(得分:0)

MatLab和C ++代码语法完全不同,将Matlab代码插入到.cpp文件中肯定无法编译。例如,这是用C ++编写函数的方法:

/*
<type> <function name> (<type> <argument1 name>, <argument2 name>)
{
  <body>
  return <return value>;
}

In example:                            */
int sum(int first_number, int second_number)
{
  int result = first_number + second_number;
  return result;
}

您的示例中存在更多语法错误,例如C ++中的for循环不同。

但是,如果您没有时间/意愿学习C ++,您可能需要查看此tutorial这是一个正式的MatLab教程,用于自动将MatLab代码转换为C代码(与C ++兼容/关闭)一般)。

答案 2 :(得分:0)

如果性能至关重要,使用std::vectors可能会很慢。

最快(但不安全)的方法是使用指向数组的指针:

f(double * Re, long sizeRe, double * RelRough, long sizeRelRough)

然后像数组一样访问元素:Re[i]

另外,您可以阅读生成c ++代码的codegen帮助,至少是复制过去。