我最近开始学习C++,除了基础知识外几乎没有其他了解。我试图将我的Matlab代码翻译成C++,以帮助我了解两者之间的区别。Matlab代码接受给定输入X(高度),并计算输入的密度(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++中的函数,用相关的方程计算每个单独的输出。
对于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++吗?作为一个初学者,你有什么其他的建议可以给我吗?谢谢。
抱歉长度有些长,我不确定怎样才能包含所有信息。
pow
看起来像是计算幂的通用函数,但在某些情况下pow
并不是最好的选择(例如对于整数)。也许pow
可以做到同样的效果,但对于平方根,我更愿意使用 std::sqrt。 - 463035818_is_not_a_number