Как правильно рассчитать этот расчет потока в Задаче C? - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь создать калькулятор расхода для iPhone, который использует эти 3 формулы.

Коэффициент давления b

b = p2 + 0.1 / p1 + 0.1

Значения C и B указаны в зависимости от клапана.См. Стр. 6 в этом файле PDF http://content2.smcetech.com/pdf/SY.New.pdf

Q Звуковой поток

Q = 600 * C (p1 + 0.1) sqrt(293/(273 + t))

Это мой рабочий код.

float pressure1 = ([pressureMPa.text floatValue])+ 0.1;
float c = 600 * ([cValue.text floatValue]);
float temperature = ([tempC.text floatValue]);
float root = sqrtf(293/(273+temperature));
float sonicFlow = c * pressure1 * root;

Q = расход, л / мин
C = дм ^ 3 / с * бар
p1 = давление подачи: МПа
t = температура град. C

Q дозвуковой поток

Q = 600 * C (p1 + 0.1)* sqrt(1-(p2+0.1/p1 +0.1 - b / 1-b)^2) * sqrt(293/(273 + t))

Q = расход, л / мин
C -значение = дм ^ 3 / с * бар
p1Давление питания: МПа
t температура град. C
b -значение

Как лучше всего написать код дозвукового потока?

У меня есть начало иконец понял, что это sqrt(1-(p2+0.1/p1 0.1)-b / 1-b)^2 У меня проблемы с

1 Ответ

1 голос
/ 23 ноября 2011

Немного трудно понять, в чем проблема. Это синтаксис, необходимый для создания квадратных корней и степеней?

Квадратный корень: sqrtf(float)
Сила: powf(float, float) - второй поплавок - это сила, на которую вы хотите поднять первый поплавок.

Немного проще для степени двойки (возможно, легче для чтения) просто сначала вычислить промежуточное значение, а затем умножить его на себя:

valueA * valueA

Кроме того, не забывайте соблюдать осторожность в отношении приоритета оператора в C. Умножение, деление и модуль оцениваются перед сложением и вычитанием. Убедитесь, что вы заключили все в квадратные скобки надлежащим образом, или, что еще лучше - как предложено @Warkst в вашем посте, - выполните вычисления в несколько шагов. Таким образом, у вас возникли проблемы с:

// sqrt((1-((p2+0.1)/(p1+0.1))-b) / (1-b))^2
float part1 = (p2 + 0.1) / (p1 + 0.1);
float part2 = (1 - part1 - b) / (1 - b);
float part3 = sqrtf(part2);
float result = part3 * part3;

part1/2/3 возможно, не идеальные имена переменных, но вы поняли.

...