MI5TONER

Untitled

Nov 4th, 2023
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 11.12 KB | None | 0 0
  1. %% Начальные данные
  2.  
  3. M_inf_0 = 2;                                % Число Маха, [б/р]
  4. H_0 = 3.5;                                  % Добавка к геопотенциальной высоте, [км]
  5. beta_k_0 = 7.5;                             % Добавка к углу полураствора конуса, [deg]
  6. x_cm = 0.65;                                % положение ц.м., [м]
  7. d_m = 1.4;                                  % Диаметр миделя, [м]
  8. N = 4;                                      % Номер варианта
  9. P = 1;                                      % Параметр
  10. k = 1.4;                                    % Отношение удельных теплоемкомстей воздуха [б/р]
  11. R = 287.05287;                              % Газовая постоянная, Дж/(кг*К)
  12.  
  13. %% Геопотенциальная высота и число Маха
  14.  
  15. H = (H_0 + 0.2 * N) * 10^3;                 % Геопотенциальная высота, [м]
  16. M_inf = M_inf_0 + (P - 1);                  % Число Маха, [б/р]
  17.  
  18. %% Геометрия конуса
  19.  
  20. beta_k = beta_k_0 + 2.5 * (N - 2 * P);      % Угол полураствора конуса, [deg]
  21. l_k = d_m / (2 * tand(beta_k));             % Длина острого конуса, [м]
  22. % x_cm = x_cm_s * l_k;                      % Координата ц.м., [м]
  23. l_k_1 = 2/3 * l_k;                          % Длина конуса с затуплением, [м]
  24.  
  25. beta_k_rad = deg2rad(beta_k);               % Значение угла полураствора конуса в радианах, [rad]
  26.  
  27. %% Параметры атмосферы из файла-функции atmosphere_heopotencial
  28.  
  29. [g_inf, T_inf, p_inf, rho_inf, a_inf] = atmosphere_heopotencial(H);
  30.  
  31. T_0 = T_inf * (1 + (k - 1) / 2 * M_inf^2);  % Температура торможения, [К]
  32. V_inf = M_inf * a_inf;                      % Скорость набегающего потока, [м/с]
  33. q_inf = rho_inf * V_inf^2 / 2;              % Скоростной напор, [Па]
  34. a_krit_sqr = (2 * k * R * T_0) / (k + 1);   % Критическая скорость звука, [м/с]
  35.  
  36. %% Найдем угол СУ для плоского случая с помощью файла функции findThetaShockWave
  37.  
  38. theta_c_pl = findThetaShockWave(k, M_inf, beta_k);
  39. % theta_c_pl = deg2rad(theta_c_pl);
  40.  
  41. %% Цикл для определения расчетного угла полураствора конуса и V_r, V_th при alpha = 0
  42.  
  43. [V_r, V_th, beta_n, theta_c] = Find_Beta_V_r(theta_c_pl, beta_k_rad, V_inf, M_inf, T_0, R, k);
  44.  
  45. % Вывод данных цикла
  46. disp('Tangent_Component_Of_Velocity'); disp(V_r);
  47. disp('Normal_Component_Of_Velocity'); disp(V_th);
  48. disp('Угол конуса расчетный'); disp(rad2deg(beta_n));
  49. disp('Расчетный угол СУ для острого конуса'); disp(rad2deg(theta_c));
  50.  
  51. %% Расчет параметров воздуха за СУ (Оформить в функцию)
  52.  
  53. % Скорость на поверхности конуса
  54. V_k = V_r;
  55.  
  56. % Температура на поверхности конуса
  57. T_k = Temperature_Surf(T_0, V_k, k, R);
  58.  
  59. % Число Маха
  60. M_k = V_k / (sqrt(R * T_k * k));
  61.  
  62. % Расчет давления
  63. p_0_sh = p_inf * ((k + 1) / (2 * k * M_inf^2 * sin(theta_c)^2 - (k - 1)))^(1 / (k - 1)) * ...
  64.     (((k + 1) * M_inf^2 * sin(theta_c)^2 * ((k - 1) * M_inf^2 + 2)) / (2 * (2 + (k - 1) * M_inf^2 * sin(theta_c)^2)))^(k / (k - 1));
  65.  
  66. p_k = p_0_sh * (1 + (k - 1) / 2 * M_k^2)^(- k / (k - 1));
  67.  
  68. % Плотность воздуха на поверхности конуса
  69. rho_k = p_k / (R * T_k);
  70.  
  71. % Коэффициент давления
  72. C_p_k = (p_k - p_inf) / q_inf;
  73.  
  74. % Вывод
  75. disp('Расчетный коэффициент давления'); disp(C_p_k);
  76. disp('Расчетное число Маха'); disp(M_k);
  77.  
  78. %% Эмпирические соотношения
  79. % Коэффициент давления (погрешность порядка 5%)
  80. C_p_math = 2 * 10^(-3) * (0.8 + 1 / M_inf^2) * beta_k^(1.7);
  81.  
  82. % Угол СУ для острого конуса
  83. theta_c_math = asind(sqrt(1 / M_inf^2 + (k + 1) / 2 * sin(beta_k_rad)^2));
  84.  
  85. % Вывод эмпирических соотношений
  86. disp('Эмпирический коэффициент давления (погрешность 5%)'); disp(C_p_math);
  87. disp('Эмпирический угол СУ для острого конуса'); disp(theta_c_math);
  88.  
  89. %% Коэффициент продольной силы
  90. % Донное давление
  91. p_d = p_inf * (1 / M_inf - 0.1);
  92.  
  93. % Донный коеффициент давления
  94. C_p_d = (p_d - p_inf) / q_inf;
  95.  
  96. C_x = C_p_k + abs(C_p_d);
  97.  
  98. % Вывод
  99. disp('Коэффициент продольной силы Cx'); disp(C_x);
  100.  
  101. %% Метод местных конусов
  102.  
  103. % Создадим строки, заполненные нулями, чтобы записывать туда полученные АДХ
  104. Cx = zeros(1, 41);
  105. Cy = zeros(1, 41);
  106. mz = zeros(1, 41);
  107. Cxa = zeros(1, 41);
  108. Cya = zeros(1, 41);
  109. K = zeros(1, 41);
  110.  
  111. dalpha = 0.02 * beta_k;                                 % Шаг угла атаки, [deg]
  112. dgamma = 0.1;                                           % Шаг гамма, [rad]
  113. alpha = 0;
  114. i = 1;                                                  % Счетчик цикла
  115.  
  116. while alpha <= (0.8 * beta_k)
  117.     gamma = 0;
  118.     Int_1 = 0;                                          % Нижний предел первого интеграла
  119.     Int_2 = 0;                                          % Нижний предел второго интеграла
  120.     while gamma < pi
  121.         beta_f = Beta_F(beta_k_rad, deg2rad(alpha), gamma);      % Фиктивный угол полураствора
  122.         C_p_math_a = Pressue_Coefficient(beta_f, M_inf);
  123.         Int_1 = Int_1 + C_p_math_a * dgamma / pi;
  124.         Int_2 = Int_2 + C_p_math_a * cos(gamma) * dgamma / pi;
  125.         gamma = gamma + dgamma;
  126.     end
  127.     Cx(1, i) = Int_1 + abs(C_p_d);
  128.     Cy(1, i) = -1 / tan(beta_k_rad) * Int_2;
  129.  
  130.     mz_0 = 4 / (sin(2 * beta_k_rad) * 3) * Int_2;
  131.     mz(1, i) = mz_0 + Cy(1, i) * x_cm;
  132.  
  133.     Cxa(1, i) = Cx(1, i) * cos(deg2rad(alpha)) + Cy(1, i) * sin(deg2rad(alpha));
  134.     Cya(1, i) = - Cx(1, i) * sin(deg2rad(alpha)) + Cy(1, i) * cos(deg2rad(alpha));
  135.  
  136.     K(1, i) = Cya(1, i) / Cxa(1, i);
  137.  
  138.     alpha = alpha + dalpha;
  139.  
  140.     i = i + 1;
  141. end
  142.  
  143. al = 0:dalpha:(alpha - dalpha);
  144. table = cat(1, al, Cx, Cy, mz, Cxa, Cya, K);            % Обьединяем вектора в таблицу
  145. table = table';                                         % Транспонируем таблицу для вывода
  146.  
  147. % Вывод
  148. disp('Метод местных конусов | alpha | Cx | Cy | mz | Cxa | Cya | K |');
  149. disp(table);
  150.  
  151. %% Графики
  152. figure
  153. plot(al, Cx, "o"); grid on;
  154. title('Cx');
  155. xlabel('alpha, [град]');
  156. ylabel('Cx, [б/р]');
  157.  
  158. figure
  159. plot(al, Cy, "o"); grid on;
  160. title('Cy');
  161. xlabel('alpha, [град]');
  162. ylabel('Cy, [б/р]');
  163.  
  164. figure
  165. plot(al, mz, "o"); grid on;
  166. title('mz');
  167. xlabel('alpha, [град]');
  168. ylabel('mz, [б/р]');
  169.  
  170. figure
  171. plot(al, Cxa, "o"); grid on;
  172. title('Cxa');
  173. xlabel('alpha, [град]');
  174. ylabel('Cxa, [б/р]');
  175.  
  176. figure
  177. plot(al, Cya, "o"); grid on;
  178. title('Cya');
  179. xlabel('alpha, [град]');
  180. ylabel('Cya, [б/р]');
  181.  
  182. figure
  183. plot(al, K, "o"); grid on;
  184. title('K');
  185. xlabel('alpha, [град]');
  186. ylabel('K, [б/р]');
  187.  
  188. %% Функции
  189.  
  190. % Касательная составляющая скорости на СУ
  191. function [V_r_c] = SW_Tangent_Component_Of_Velocity(V_inf, theta_c)
  192.     V_r_c = V_inf * cos(theta_c);
  193. end
  194.  
  195. % Нормальная составляющая скорости на СУ
  196. function [V_th_c] = SW_Normal_Component_Of_Velocity(V_inf, theta_c, k, M_inf)
  197.     V_th_c = -SW_Tangent_Component_Of_Velocity(V_inf, theta_c) * tan(theta_c) *...
  198.         ((2 + (k - 1) * M_inf^2 * sin(theta_c)^2)/((k + 1) * M_inf^2 * sin(theta_c)^2));
  199. end
  200.  
  201. % Следующая касательная составляющая скорости за СУ
  202. function [V_r] = Tangent_Component_Of_Velocity(V_r_previous, V_th_previous, dtheta)
  203.     V_r = V_r_previous + V_th_previous * dtheta;
  204. end
  205.  
  206. % Следующая нормальная составляющая скорости за СУ
  207. function [V_th] = Normal_Component_Of_Velocity(theta_c, V_r_previous, V_th_previous, dtheta, T_0, k, R)
  208.     a_sqr = k * R * T_0 - ((k - 1) / 2) * (V_r_previous^2 - V_th_previous^2);
  209.     dv_dth = (-V_th_previous / tan(theta_c) + V_r_previous * (V_th_previous^2 / a_sqr - 2)) / ...
  210.         (1 - (V_th_previous^2 / a_sqr));
  211.     V_th = V_th_previous + dv_dth * dtheta;
  212. end
  213.  
  214. % Максимальная скорость
  215. function [V_max_sqr] = V_Maximum_Sqr(T_0, k, R)
  216.     V_max_sqr = (2 * k * R * T_0) / (k - 1);
  217. end
  218.  
  219. % Температура на поверхности конуса
  220. function [T_k] = Temperature_Surf(T_0, V_k, k, R)
  221.     T_k = T_0 * (1 - V_k^2 / V_Maximum_Sqr(T_0, k, R));
  222. end
  223.  
  224. % Цикл для определения расчетного угла полураствора конуса и V_r, V_th
  225. function [V_r, V_th, beta_n, theta_c] = Find_Beta_V_r(theta_c_pl, beta_k_rad, V_inf, ...
  226.     M_inf, T_0, R, k)
  227.     coef = 0.85;                                                           % Вводим коэффициент умешения                                  
  228.     dtheta = -0.00001;                                                     % Задаем шаг
  229.     beta_n = deg2rad(theta_c_pl);                                          % Определяем новую переменную, чтобы просто войти в цикл
  230.     while (beta_n - beta_k_rad) / beta_k_rad >= 0.00001
  231.         % Угол СУ в радианах
  232.         theta_c = coef * deg2rad(theta_c_pl);
  233.  
  234.         % Компоненты скорости за СУ
  235.         V_r_c = SW_Tangent_Component_Of_Velocity(V_inf, theta_c);                  
  236.         V_th_c = SW_Normal_Component_Of_Velocity(V_inf, theta_c, k, M_inf);
  237.  
  238.         % Принимаем начальные условия
  239.         V_r = V_r_c;
  240.         V_th = V_th_c;
  241.  
  242.         theta = theta_c;
  243.         while V_th < 0
  244.             V_r = Tangent_Component_Of_Velocity(V_r, V_th, dtheta);
  245.             V_th = Normal_Component_Of_Velocity(theta, V_r, V_th, dtheta, T_0, k, R);
  246.             theta = theta + dtheta;
  247.         end
  248.         beta_n = theta;
  249.         disp(rad2deg(beta_n))
  250.         coef = coef - 0.00001;
  251.     end
  252. end
  253.  
  254. % Фиктивный угол полураствора
  255. function [beta_f] = Beta_F(beta_k_rad, alpha, gamma)
  256.     beta_f = beta_k_rad - alpha * cos(gamma) - 0.5 * alpha^2 * sin(gamma)^2 / tan(beta_k_rad);
  257. end
  258.  
  259. % Эмпирическая зависимость для определения коэффициента давления
  260. function [C_p_math_a] = Pressue_Coefficient(beta_f, M_inf)
  261.     C_p_math_a = 4 * sin(beta_f)^2 * (2.5 + 8 * sqrt(M_inf^2 - 1) * sin(beta_f)) / (1 + 16 * sqrt(M_inf^2 - 1) * sin(beta_f));
  262. end
Add Comment
Please, Sign In to add comment