Matlab至C ++的翻译

时间:2018-12-06 14:22:57

标签: c++ matlab

我最近开始了C ++之旅,除了基本知识外,对C ++的了解很少。我正在尝试将我的Matlab代码转换为C ++,以帮助我理解两者之间的差异。 Matlab代码采用给定的输入X(height),并计算输入的密度(rho)和声速(acousticSpeed)。

这是Matlab代码。

function [rho, acousticSpeed] = atmos(X)

     %only valid to X = 11Km
       %Constants
       gamma=1.4; 
       R=287.05;
       g=9.81; 
       To=288.15;
       Po=101325;
       zo=50; 
       L=-0.0065;
       %Temperature Calculation

       T=To+(L*(X-zo));

       %Pressure Calculation

       P=Po*(T/To)^(-g/(L*R));

       %Density Calculation

        rho=P/(R*T);

        %Acoustic Speed

        acousticSpeed=sqrt(gamma*R*T)



         end

根据我对C ++的了解,函数不能返回多个值(或者至少返回一个非常密集的过程)。这个Matlab函数返回两个值rho和acousticSpeed。现在,我将其拆分为C ++上的2个函数,以使用相关方程式计算每个单独的输出。

对于Rho我有

rho(double x){
double zo;
double To;
double Po;
double L;
double g;
double R;
double p;
zo = 50;
To = 288.15;
Po = 101325;
L = -0.0065;
g = -9.81;
R = 287.05;
double T = To + L*(x-zo);
double P = pow((Po*(T/To)), -(g*(L*R)));
p = P/(R*T);
return p; 
}

我的音速

soundspeed(double x){
double zo;
double To;
double L;
double R;
double as;
double gamma;
zo = 0;
To = 288.15;
L = -0.0065;
R = 287.05;
gamma = 1.4;
double T = To + L*(x-zo);
as = pow(gamma*R*T,0.5);
return as;
}

我的主要功能是

int main()
{
cout << "Please enter a desired altitude in meters." << endl;
double x;
double A;
double B;
cin>> x;
A = soundspeed(x);
B = rho(x);
cout << "For Altitude: " << x << "  meters" << endl;
cout << "Speed of Sound:  " << A << " meters per second." << " Air Density: 
" << B;

return 0;
}

对于500米的输入,声速为338米/秒,密度约为1.225。 声音功能的速度返回正确的值,而密度函数返回0。

我包括了iostream和math.h(用于pow()函数)。

我做错了什么?有没有更干净的方法将此Matlab函数转换为C ++?作为初学者,我还有其他经验提示给您吗?谢谢。 抱歉,我不知道该如何包含所有信息。

1 个答案:

答案 0 :(得分:3)

问题在于括号和值的位置,特别是在压力计算中。 原来是

double P = pow((Po*(T/To)), -(g*(L*R)));

然而正确的方程式是

double P = Po*pow((T/To), -(g/(L*R)));

在发布之前我应该​​尝试过的简单解决方案,因为我不想浪费任何人的时间。

谢谢大家的帮助!