我最近开始了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 ++?作为初学者,我还有其他经验提示给您吗?谢谢。 抱歉,我不知道该如何包含所有信息。
答案 0 :(得分:3)
问题在于括号和值的位置,特别是在压力计算中。 原来是
double P = pow((Po*(T/To)), -(g*(L*R)));
然而正确的方程式是
double P = Po*pow((T/To), -(g/(L*R)));
在发布之前我应该尝试过的简单解决方案,因为我不想浪费任何人的时间。
谢谢大家的帮助!