Advertisement
MI5TONER

Untitled

Nov 4th, 2023
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 13.84 KB | None | 0 0
  1. %% Начальные данные
  2.  
  3. beta_k = 15;                  % Угол полураствора конуса, [deg]
  4. M_inf = 3.397;                % Число Маха набегающего потока, [б/р]
  5. g_0 = 9.8066;                 % Ускорение свободного падения, [м/с^2]
  6. p_inf = 0.098 * g_0 * 10^4;   % Давление набегающего потока (статическое давление), [Па]
  7. p_0 = 6.45 * g_0 * 10^4;      % Давление полного торможения (давление в форкамере), [Па]
  8. T_0 = 288.15;                 % Давление полного торможения, [К]
  9. alpha = 0;                    % Угол атаки, [deg]
  10.  
  11. k = 1.4;                      % Отношение удельных теплоемкомстей воздуха [б/р]
  12. R = 287.05287;                % Газовая постоянная, Дж/(кг*К)
  13. x_cm = 2/3;                   % Положение ц.м. конуса от носка к длине конуса, [б/р]
  14.  
  15. beta_k_rad = deg2rad(beta_k); % Переведем угол полураствора конуса в радианы
  16.  
  17. %% Параметры потока
  18.  
  19. T_inf = T_0 * (1 + (k - 1) / 2 * M_inf^2)^(-1);     % Температура набегающего потока, [К]
  20. V_inf = M_inf * sqrt(k * R * T_inf);                % Скорость набегающего потока, [м/с]
  21. q_inf = ((p_inf / (R * T_inf)) * V_inf^2) / 2;      % Скоростной напор, [Па]
  22.  
  23. %% Донное давление
  24.  
  25. p_d = p_inf * (1 / M_inf - 0.1);                    % Донное давление
  26. C_p_d = (p_d - p_inf) / q_inf;                      % Донный коеффициент давления
  27.  
  28. %% Результаты эксперимента
  29. alpha_list = [3 6 9 12];
  30. gamma_list = 0:(pi/6):pi;
  31. Pressue_3deg  = [0.1891 0.1917 0.2104 0.2269 0.2499 0.2746 0.2771];
  32. Pressue_6deg  = [0.1551 0.1612 0.1867 0.2261 0.2805 0.3231 0.3376];
  33. Pressue_9deg  = [0.1266 0.1367 0.1675 0.2246 0.2970 0.3625 0.4019];
  34. Pressue_12deg = [0.1074 0.1158 0.1502 0.2256 0.3222 0.4170 0.4628];
  35.  
  36. % Переводим в Па
  37. Pressue_3deg_Pa  = Pressue_3deg .* g_0 .* 10^4;
  38. Pressue_6deg_Pa  = Pressue_6deg .* g_0 .* 10^4;
  39. Pressue_9deg_Pa  = Pressue_9deg .* g_0 .* 10^4;
  40. Pressue_12deg_Pa = Pressue_12deg .* g_0 .* 10^4;
  41.  
  42. % Рассчитываем коэффициенты давления
  43. Pressue_Coef_3deg  = (Pressue_3deg_Pa - p_inf) ./ q_inf;
  44. Pressue_Coef_6deg  = (Pressue_6deg_Pa - p_inf) ./ q_inf;
  45. Pressue_Coef_9deg  = (Pressue_9deg_Pa - p_inf) ./ q_inf;
  46. Pressue_Coef_12deg = (Pressue_12deg_Pa - p_inf) ./ q_inf;
  47.  
  48.  
  49. % Обьединим все в одну таблицу
  50. Pressue_Coef = cat(1, Pressue_Coef_3deg, Pressue_Coef_6deg, Pressue_Coef_9deg, Pressue_Coef_12deg);
  51.  
  52. %disp('Коэффициенты давления | 3 | 6 | 9 | 12 |'); disp(Pressue_Coef');
  53.  
  54. %% Обработка результатов эксперимента методом трапеций
  55.  
  56. Integral_1 = zeros();
  57. Integral_2 = zeros();
  58. Cx = zeros();
  59. Cy = zeros();
  60. mz = zeros();
  61.  
  62. Cxa = zeros();
  63. Cya = zeros();
  64. K   = zeros();
  65.  
  66. for i = 1:4
  67.     Integral_1(i) = pi / 6 * ((Pressue_Coef(i, 1) + Pressue_Coef(i, 7)) / 2 + Pressue_Coef(i, 2) + ...
  68.         Pressue_Coef(i, 3) + Pressue_Coef(i, 4) + Pressue_Coef(i, 5) + Pressue_Coef(i, 6));
  69.    
  70.     Integral_2(i) = pi / 6 * ((Pressue_Coef(i, 1) * cos(gamma_list(1)) + Pressue_Coef(i, 7) * cos(gamma_list(7))) / 2 + ...
  71.         Pressue_Coef(i, 2) * cos(gamma_list(2)) + Pressue_Coef(i, 3) * cos(gamma_list(3)) + Pressue_Coef(i, 4) * cos(gamma_list(4)) + ...
  72.         Pressue_Coef(i, 5) * cos(gamma_list(5)) + Pressue_Coef(i, 6) * cos(gamma_list(6)));
  73.  
  74.     Cx(i) = Integral_1(i) / pi + abs(C_p_d);
  75.     Cy(i) = (Integral_2(i) / pi) * (-1 / (tan(beta_k_rad)));
  76.     mz(i) = (Integral_2(i) / pi) * (4 / (3 * sin(2 * beta_k_rad)));
  77.  
  78.     Cxa(i) =  Cx(i) * cosd(alpha_list(i)) + Cy(i) * sind(alpha_list(i));
  79.     Cya(i) = -Cx(i) * sind(alpha_list(i)) + Cy(i) * cosd(alpha_list(i));
  80.     K(i)   =  Cya(i) / Cx(i);
  81. end
  82.  
  83. %% Расчет теоретических АДХ
  84. % Далее код для определения АДХ конуса методом последовательных приближений
  85. % и методом местных конусов
  86. %% Найдем угол СУ для плоского случая с помощью файла функции findThetaShockWave
  87. theta_c_pl = findThetaShockWave(k, M_inf, beta_k);
  88.  
  89. % Цикл для определения расчетного угла полураствора конуса и V_r, V_th при alpha = 0
  90. [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);
  91.  
  92. %% Расчет параметров воздуха за СУ
  93.  
  94. V_k = V_r;                              % Скорость на поверхности конуса
  95. T_k = Temperature_Surf(T_0, V_k, k, R); % Температура на поверхности конуса
  96. M_k = V_k / (sqrt(R * T_k * k));        % Число Маха
  97.  
  98. % Расчет давления
  99. p_0_sh = p_inf * ((k + 1) / (2 * k * M_inf^2 * sin(theta_c)^2 - (k - 1)))^(1 / (k - 1)) * ...
  100.     (((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));
  101.  
  102. p_k = p_0_sh * (1 + (k - 1) / 2 * M_k^2)^(- k / (k - 1));
  103.  
  104. C_p_k = (p_k - p_inf) / q_inf;          % Коэффициент давления
  105.  
  106. %% Метод местных конусов
  107.  
  108. C_x = zeros(1, 5);
  109. C_y = zeros(1, 5);
  110. m_z = zeros(1, 5);
  111.  
  112. C_xa = zeros(1, 5);
  113. C_ya = zeros(1, 5);
  114. K_k = zeros(1, 5);
  115.  
  116. dalpha = 3;                                             % Шаг угла атаки, [deg]
  117. dgamma = deg2rad(0.1);                                  % Шаг гамма, [rad]
  118. i = 1;                                                  % Счетчик цикла
  119.  
  120. while alpha <= 12
  121.     gamma = 0;
  122.     Int_1 = 0;                                          % Нижний предел первого интеграла
  123.     Int_2 = 0;                                          % Нижний предел второго интеграла
  124.     while gamma < pi
  125.         beta_f = Beta_F(beta_k_rad, deg2rad(alpha), gamma);      % Фиктивный угол полураствора
  126.         C_p_math_a = Pressue_Coefficient(beta_f, M_inf);
  127.         Int_1 = Int_1 + C_p_math_a * dgamma / pi;
  128.         Int_2 = Int_2 + C_p_math_a * cos(gamma) * dgamma / pi;
  129.         gamma = gamma + dgamma;
  130.     end
  131.     C_x(1, i) = Int_1 + abs(C_p_d);
  132.     C_y(1, i) = -1 / tan(beta_k_rad) * Int_2;
  133.  
  134.     mz_0 = 4 / (sin(2 * beta_k_rad) * 3) * Int_2;
  135.     m_z(1, i) = mz_0;                                                % + Cy(1, i) * x_cm;
  136.  
  137.     C_xa(1, i) = C_x(1, i) * cos(deg2rad(alpha)) + C_y(1, i) * sin(deg2rad(alpha));
  138.     C_ya(1, i) = - C_x(1, i) * sin(deg2rad(alpha)) + C_y(1, i) * cos(deg2rad(alpha));
  139.  
  140.     K_k(1, i) = C_ya(1, i) / C_xa(1, i);
  141.  
  142.     alpha = alpha + dalpha;
  143.  
  144.     i = i + 1;
  145. end
  146.  
  147. al = 0:dalpha:12;
  148. table = cat(1, al, C_x, C_y, m_z, C_xa, C_ya, K_k);            % Обьединяем вектора в таблицу
  149. table = table';                                         % Транспонируем таблицу для вывода
  150.  
  151. % Вывод
  152. disp('Метод местных конусов | alpha | Cx | Cy | mz | Cxa | Cya | K |');
  153. disp(table);
  154.  
  155.  
  156. %% Вывод результатов обработки эксперимента
  157.  
  158. % Обьединим полученные данные в одну таблицу
  159. table_data = cat(1, alpha_list, Cx, Cy, mz, Cxa, Cya, K);
  160. table_data = table_data';
  161.  
  162. disp('Вывод результатов обработки эксперимента | Cx | Cy | mz | Cxa | Cya | K |'); disp(table_data);
  163.  
  164. %% Графики
  165.  
  166. p_1_1 = polyfit(al,C_x,2);
  167. p_1_2 = polyfit(alpha_list,Cx,2);
  168.  
  169. x_all = linspace(0,12);
  170. y_1_1 = polyval(p_1_1,x_all);
  171. y_1_2 = polyval(p_1_2,x_all);
  172. figure
  173. plot(al, C_x, "or", alpha_list, Cx, "sb"); grid on;
  174. hold on
  175. plot(x_all, y_1_1, "--r", x_all, y_1_2, "b");
  176. hold off
  177. ylim([0 0.3]);
  178. title('Cx');
  179. xlabel('alpha, [град]');
  180. ylabel('Cx, [б/р]');
  181. legend({'Теория','Эксперимент'},'Location','southeast');
  182.  
  183. p_1_1 = polyfit(al,C_y,2);
  184. p_1_2 = polyfit(alpha_list,Cy,2);
  185.  
  186. x_all = linspace(0,12);
  187. y_1_1 = polyval(p_1_1,x_all);
  188. y_1_2 = polyval(p_1_2,x_all);
  189. figure
  190. plot(al, C_y, "or", alpha_list, Cy, "sb"); grid on;
  191. hold on
  192. plot(x_all, y_1_1, "--r", x_all, y_1_2, "b");
  193. hold off
  194. title('Cy');
  195. xlabel('alpha, [град]');
  196. ylabel('Cy, [б/р]');
  197. legend({'Теория','Эксперимент'},'Location','northwest');
  198.  
  199. p_1_1 = polyfit(al,m_z,2);
  200. p_1_2 = polyfit(alpha_list,mz,2);
  201.  
  202. x_all = linspace(0,12);
  203. y_1_1 = polyval(p_1_1,x_all);
  204. y_1_2 = polyval(p_1_2,x_all);
  205. figure
  206. plot(al, m_z, "or", alpha_list, mz, "sb"); grid on;
  207. hold on
  208. plot(x_all, y_1_1, "--r", x_all, y_1_2, "b");
  209. hold off
  210. title('mz');
  211. xlabel('alpha, [град]');
  212. ylabel('mz, [б/р]');
  213. legend({'Теория','Эксперимент'},'Location','northeast');
  214.  
  215. p_1_1 = polyfit(al, C_xa, 2);
  216. p_1_2 = polyfit(alpha_list, Cxa, 2);
  217.  
  218. x_all = linspace(0,12);
  219. y_1_1 = polyval(p_1_1, x_all);
  220. y_1_2 = polyval(p_1_2, x_all);
  221. figure
  222. plot(al, C_xa, "or", alpha_list, Cxa, "sb"); grid on;
  223. hold on
  224. plot(x_all, y_1_1, "--r", x_all, y_1_2, "b");
  225. hold off
  226. title('Cxa');
  227. xlabel('alpha, [град]');
  228. ylabel('Cxa, [б/р]');
  229. legend({'Теория','Эксперимент'},'Location','northwest');
  230.  
  231. p_1_1 = polyfit(al, C_ya, 2);
  232. p_1_2 = polyfit(alpha_list, Cya, 2);
  233.  
  234. x_all = linspace(0,12);
  235. y_1_1 = polyval(p_1_1, x_all);
  236. y_1_2 = polyval(p_1_2, x_all);
  237. figure
  238. plot(al, C_ya, "or", alpha_list, Cya, "sb"); grid on;
  239. hold on
  240. plot(x_all, y_1_1, "--r", x_all, y_1_2, "b");
  241. hold off
  242. title('Cya');
  243. xlabel('alpha, [град]');
  244. ylabel('Cya, [б/р]');
  245. legend({'Теория','Эксперимент'},'Location','northwest');
  246.  
  247. p_1_1 = polyfit(al, K_k, 2);
  248. p_1_2 = polyfit(alpha_list, K, 2);
  249.  
  250. x_all = linspace(0,12);
  251. y_1_1 = polyval(p_1_1, x_all);
  252. y_1_2 = polyval(p_1_2, x_all);
  253. figure
  254. plot(al, K_k, "or", alpha_list, K, "sb"); grid on;
  255. hold on
  256. plot(x_all, y_1_1, "--r", x_all, y_1_2, "b");
  257. hold off
  258. title('K');
  259. xlabel('alpha, [град]');
  260. ylabel('K, [б/р]');
  261. legend({'Теория','Эксперимент'},'Location','northwest');
  262.  
  263. %% Функции
  264.  
  265. % Касательная составляющая скорости на СУ
  266. function [V_r_c] = SW_Tangent_Component_Of_Velocity(V_inf, theta_c)
  267.     V_r_c = V_inf * cos(theta_c);
  268. end
  269.  
  270. % Нормальная составляющая скорости на СУ
  271. function [V_th_c] = SW_Normal_Component_Of_Velocity(V_inf, theta_c, k, M_inf)
  272.     V_th_c = -SW_Tangent_Component_Of_Velocity(V_inf, theta_c) * tan(theta_c) *...
  273.         ((2 + (k - 1) * M_inf^2 * sin(theta_c)^2)/((k + 1) * M_inf^2 * sin(theta_c)^2));
  274. end
  275.  
  276. % Следующая касательная составляющая скорости за СУ
  277. function [V_r] = Tangent_Component_Of_Velocity(V_r_previous, V_th_previous, dtheta)
  278.     V_r = V_r_previous + V_th_previous * dtheta;
  279. end
  280.  
  281. % Следующая нормальная составляющая скорости за СУ
  282. function [V_th] = Normal_Component_Of_Velocity(theta_c, V_r_previous, V_th_previous, dtheta, T_0, k, R)
  283.     a_sqr = k * R * T_0 - ((k - 1) / 2) * (V_r_previous^2 - V_th_previous^2);
  284.     dv_dth = (-V_th_previous / tan(theta_c) + V_r_previous * (V_th_previous^2 / a_sqr - 2)) / ...
  285.         (1 - (V_th_previous^2 / a_sqr));
  286.     V_th = V_th_previous + dv_dth * dtheta;
  287. end
  288.  
  289. % Цикл для определения расчетного угла полураствора конуса и V_r, V_th
  290. function [V_r, V_th, beta_n, theta_c] = Find_Beta_V_r(theta_c_pl, beta_k_rad, V_inf, ...
  291.     M_inf, T_0, R, k)
  292.     coef = 0.85;                                                           % Вводим коэффициент умешения                                  
  293.     dtheta = -0.00001;                                                     % Задаем шаг
  294.     beta_n = deg2rad(theta_c_pl);                                          % Определяем новую переменную, чтобы просто войти в цикл
  295.     while (beta_n - beta_k_rad) / beta_k_rad >= 0.00001
  296.         % Угол СУ в радианах
  297.         theta_c = coef * deg2rad(theta_c_pl);
  298.  
  299.         % Компоненты скорости за СУ
  300.         V_r_c = SW_Tangent_Component_Of_Velocity(V_inf, theta_c);                  
  301.         V_th_c = SW_Normal_Component_Of_Velocity(V_inf, theta_c, k, M_inf);
  302.  
  303.         % Принимаем начальные условия
  304.         V_r = V_r_c;
  305.         V_th = V_th_c;
  306.  
  307.         theta = theta_c;
  308.         while V_th < 0
  309.             V_r = Tangent_Component_Of_Velocity(V_r, V_th, dtheta);
  310.             V_th = Normal_Component_Of_Velocity(theta, V_r, V_th, dtheta, T_0, k, R);
  311.             theta = theta + dtheta;
  312.         end
  313.         beta_n = theta;
  314.         disp(rad2deg(beta_n))
  315.         coef = coef - 0.00001;
  316.     end
  317. end
  318.  
  319. % Максимальная скорость
  320. function [V_max_sqr] = V_Maximum_Sqr(T_0, k, R)
  321.     V_max_sqr = (2 * k * R * T_0) / (k - 1);
  322. end
  323.  
  324. % Температура на поверхности конуса
  325. function [T_k] = Temperature_Surf(T_0, V_k, k, R)
  326.     T_k = T_0 * (1 - V_k^2 / V_Maximum_Sqr(T_0, k, R));
  327. end
  328.  
  329. % Фиктивный угол полураствора
  330. function [beta_f] = Beta_F(beta_k_rad, alpha, gamma)
  331.     beta_f = beta_k_rad - alpha * cos(gamma) - 0.5 * alpha^2 * sin(gamma)^2 / tan(beta_k_rad);
  332. end
  333.  
  334. % Эмпирическая зависимость для определения коэффициента давления
  335. function [C_p_math_a] = Pressue_Coefficient(beta_f, M_inf)
  336.     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));
  337. end
  338.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement