Как записать условие задачи в MATLAB для ее решения программой?
Дано условие задачи, которое необходимо решить с помощью MATLAB. Условие следующее:
В момент преодоления самолетом звукового барьера число Маха становится равным единице. Функция, определяющая число Маха:
M(v,H)=sqrt(5((((1+0.2*(v/a)^2)^3.5)-1)*(1-H*b/c)^d+1)^e-1)
где
v – скорость полета самолета;
H – высота полета;
коэффициенты:
a = 1222,5;
b = 6,875·10^-6;
c = 0,3048;
d = -5,2656;
e = 0,286.
Получить графики зависимости M(v) для H=500; 1000; 2000; 5000; показать уровень М=1, соответствующий достижению скорости звука.
Из условия M(v,H)=1 получить зависимость скорости преодоления звукового барьера v от высоты H. Для этого, изменяя H в диапазоне от 0 до 2,5·10^4, решать уравнение M(v,H) – 1 = 0. При решении уравнения передавать H в функцию, описывающую правую часть уравнения, как глобальное данное (командой global H).
Построить график зависимости v(H), при котором M(v,H) = 1.
(Для сведения: при H ≈ 0, v ≈1200 км/ч ; при H ≈ 2,5 * 10^4 ; v ≈150 км/ч ).
Я совсем не работала ранее в этой программе. Что-то попыталась составить в качестве решения, но ничего дельного не выходит. Помогите, пожалуйста, разобраться.
Вот код:
a = 1222.5;
b = 6.875*10^(-6);
c = 0.3048;
d = -5.2656;
e = 0.286;
h = 500; 1000; 2000; 5000;
M =(sqrt(5*((((1+0.2*(v/a)^2)^3.5-1)*(1-b*h/c)^d+1)^e-1)))-1;
plot(M)
Функции в матлабе лежат в отдельных файлах с расширением m. Имя файла должно соответствовать имени функции.
В вашем случае функция получает на вход 2 значения v и H и возвращает одно - M.
maxa.m:
function [M] = maxa(v, H)
a = 1222.5;
b = 6.875*10^(-6);
c = 0.3048;
d = -5.2656;
e = 0.286;
M =(sqrt(5*(power(((power((1+0.2*power(v/a,2)),3.5)-1)*power(1-b*H/c, d)+1),e)-1)))-1;
end
В консоли Матлаба делаем:
h = [500; 1000; 2000; 5000]
v = 1000
M = maxa(v, h)
Да, я подставила значения, но он выводит один график с 4 точками. Как бы мне вывести 4 графика? И как на осях узнать, что от чего он зависимость выводит?
И еще вопрос откуда мне брать v?
Наталья Филиппова, Диапазон изменений v должен быть в условии задачи, если нет - придумайте его сами в каких-то разумных пределах и с разумным шагом изменения.
Задать v можно таким образом:
v = v0 : vstep : vfinish
Кстати, точно так же можете задавать и h.
Если будете задавать h в том же стиле, а не как в примере, то после инициализации над одной из матриц (v или h) надо будет провести операцию транспонирования, чтоб одна матрица содержала значения в строках, а другая в столбцах. Только тогда у вас в результате получится правильная двумерная матрица.
При этом, придется немного изменить формулу в функции - при умножении матриц использовать оператор почленного умножения, а не матричного:
M =(sqrt(5*(power(((power((1+0.2*power(v/a,2)),3.5)-1)*.power(1-b*H/c, d)+1),e)-1)))-1;
В результате выполнения вы получите двумерный массив размерностью Nv x Nh, для получения Nh графиков, просто выводите в каждом графике только 1 размерность массива M:
for i = 1:size(M,1)
plot(M(i, :), ...)
end
Цикл набросал схематично, возможно нужно будет выводить не вторую размерность, а первую - зависит от того что вернет ваша функция и как вы инициализируете массивы v и h.