gpt4 book ai didi

c++ - Matlab 到 C++ 的翻译

转载 作者:太空狗 更新时间:2023-10-29 21:10:34 25 4
gpt4 key购买 nike

我最近开始了 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++ 上的 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++?有经验的人可以给我作为初学者的其他提示吗?谢谢。抱歉篇幅太长,我不确定如何包含所有信息。

最佳答案

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

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

但是正确的方程式是

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

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

谢谢大家的帮助!

关于c++ - Matlab 到 C++ 的翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53653481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com