Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/79: Рейтинг темы: голосов - 79, средняя оценка - 4.90
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
1

Построение графика движения тела, брошенного под углом к горизонту.

30.09.2013, 18:04. Показов 14574. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. Запустил первый раз матлаб, чтобы выполнить задание. Задание следующее:

Без учета сил сопротивления уравнения движения тела, брошенного под углом L к горизонту с начальной скоростью V , задаются формулами:

x=(V*cos(L))*t;
y=((V*sin(L))*t)-(10.*(t.^2))/2;


Написать программу 1 расчета траектории движения тела x=F(y) при различных значениях угла L и начальной скорости V . Ввод угла (в градусах) и начальной скорости осуществлять с помощью команды input. Для построения графика использовать функцию plot(x,y).

Вроде все элементарно (для проверки не ввожу числа с клавиатуры):

Matlab M
1
2
3
4
5
6
7
8
9
10
11
%V0=input('Enter ');
%L0=input('Enter ');
 
V0=10;
L0=60;
 
t=[0,1,2,3,300,500,900,1000];
 
x=(V0*cos(L0))*t;
y=((V0*sin(L0))*t)-(10.*(t.^2))/2;
plot(y, x);
Проблема в том, что график из себя представляет нечто странное, он должен быть положительным, от нуля и в положительную сторону по обеим осям, но этого нет. Я не понимаю как правильно задать время (t -я его задал в виде массива значений, может совершенно не верно), ведь оно растет от нуля к бесконечности, ну или хотя бы до тех пор, пока y не станет нулем. Запутался я после первого запуска.(

График в приложении.
Миниатюры
Построение графика движения тела, брошенного под углом к горизонту.  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2013, 18:04
Ответы с готовыми решениями:

Моделирование движения упругого мяча, брошенного под углом к горизонту
Дано: на вложениях. Решал похожую задачу с условиями: Упругий мячик имеет начальное положение и...

Построение графика движения тела под углом к горизонту
Привет всем!Очень нужна ваша помощь в создании программы в лазарусе.Вот само задание-Построить...

Изучение движения тела, брошенного под углом к горизонту с некоторой начальной скоростью
Составить программу, помогающую в изучении движения тела, брошенного под углом к горизонту с...

Сделать блок-схему к курсовой работе (движения тела, брошенного под углом к горизонту)
Есть готовая курсовая работа. Нужно вот сделать блок-схему с метода решения . Уже есть...

22
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
30.09.2013, 18:40 2
Угол – в радианах (L0 = pi/3), временной промежуток – поменьше (t = 0:0.1:1.5), абсциссу – вперёд (plot(x, y)).
2
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
30.09.2013, 19:03  [ТС] 3
Цитата Сообщение от Heidegger Посмотреть сообщение
Угол – в радианах (L0 = pi/3), временной промежуток – поменьше (t = 0:0.1:1.5), абсциссу – вперёд (plot(x, y)).
Очень благодарен. Теперь мой график и вправду похож на физический процесс. Просто меня смутило описание задания функции x=F(y), поэтому наоборот и строил график)
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
30.09.2013, 19:27 4
Цитата Сообщение от Fasterovich Посмотреть сообщение
Просто меня смутило описание задания функции x=F(y)
Да, странная формулировка – для параболы в общем случае нельзя построить обратную функцию, поэтому для одного и того же значения y возможны 2 различных значения x. Возможно, просто опечатка.
1
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
01.10.2013, 12:19  [ТС] 5
У меня еще один вопрос:
Нашел максимум высоты полета:

ymax=max(y);

но никак не могу с помощью команды disp(ymax) вывести на экран максимальную высоту полета (но число выдает при отладке верное), ругается компилятор, а если вычислить длину полета xmax=max(x) - то выдает какое-то число в экспонициальной форме(.
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
01.10.2013, 12:59 6
А что пишет компилятор? Лучше привести полный код.

Тег [MATLAB][/MATLAB] вверху справа под значком динамика.
1
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
01.10.2013, 13:05  [ТС] 7
Вот что выдает:

Subscript indices must either be real positive integers or logicals.

Error in First (line 17)
disp(ymax);

Видимо, что-то не нравится по типу

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
L0=35;
V0=15;
L0=(L0*pi)/180;
t = 0:0.1:100;
x=(V0*cos(L0))*t;
y=((V0*sin(L0))*t)-(10.*(t.^2))/2;
plot(x,y);
axis([0 100 0 100]);
 
ymax=max(y); % при отладке реально выдает самую высокую точку, как я понял в double
xmax=max(x);  %не выдает самое большое значение x, 1.2287e+03 - такое число при отладке выдает
disp(ymax); 
disp(xmax);
График теперь выглядит так:
Миниатюры
Построение графика движения тела, брошенного под углом к горизонту.  
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
01.10.2013, 13:21 8
Это точно весь текст программы? Здесь нет строки 17.

Время (t = 0:0.1:100) задано слишком большое – за это время снаряд уйдёт глубоко под землю и пророет длинный тоннель (отсюда и огромные значения xmax).

Параметры параболы лучше искать по явным формулам. Или применять более изощрённые методы.

В начало программы можно добавить clear all.
1
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
01.10.2013, 13:33  [ТС] 9
Цитата Сообщение от Heidegger Посмотреть сообщение
Это точно весь текст программы? Здесь нет строки 17.

Время (t = 0:0.1:100) задано слишком большое – за это время снаряд уйдёт глубоко под землю и пророет длинный тоннель (отсюда и огромные значения xmax).

Параметры параболы лучше искать по явным формулам. Или применять более изощрённые методы.

В начало программы можно добавить clear all.
Строка 17 - это строка 13, просто я не стал вставлять верхние закомментированные строки

Добавлено через 8 минут
Цитата Сообщение от Heidegger Посмотреть сообщение
Это точно весь текст программы? Здесь нет строки 17.

Время (t = 0:0.1:100) задано слишком большое – за это время снаряд уйдёт глубоко под землю и пророет длинный тоннель (отсюда и огромные значения xmax).

Параметры параболы лучше искать по явным формулам. Или применять более изощрённые методы.

В начало программы можно добавить clear all.
А есть ли возможность вычислить
Matlab M
1
xmax=max(x)
при y=0? Мне как раз и нужно это значение.
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
01.10.2013, 13:37 10
Где-то (в тексте программы или в командном окне), видимо, проскочило присваивание вида (disp = ...) – и теперь Matlab принимает disp за переменную. Инструкция clear all (или просто clear) очистит память от переменных, и disp снова станет функцией вывода на экран.

Можно так:

Matlab M
1
2
ixmax = find(y > 0, 1, 'last');
xmax = x(ixmax);
Ищем последнее положительное значение y и выводим соответствующее значение x.
0
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
01.10.2013, 13:43  [ТС] 11
Цитата Сообщение от Heidegger Посмотреть сообщение
Где-то (в тексте программы или в командном окне), видимо, проскочило присваивание вида (disp = ...) – и теперь Matlab принимает disp за переменную. Инструкция clear all (или просто clear) очистит память от переменных, и disp снова станет функцией вывода на экран.

Можно так:

Matlab M
1
2
ixmax = find(y > 0, 1, 'last');
xmax = x(ixmax);
Ищем последнее положительное значение y и выводим соответствующее значение x.
Если я правильно понимаю, то это будет предыдущая точка перед пересечением с абсциссой, т.к. в данном случае
Matlab M
1
y
должен быть равен нулю. но он равен нулю и в точке 0:0
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
01.10.2013, 13:53 12
Цитата Сообщение от Fasterovich Посмотреть сообщение
это будет предыдущая точка перед пересечением с абсциссой
Да.
Цитата Сообщение от Fasterovich Посмотреть сообщение
но он равен нулю и в точке 0:0
Он может быть ни в какой больше точке не равен нулю – вычисления ведь идут с определённым шагом.

Можно уменьшить шаг по времени до необходимой точности (t = 0:0.01:2) или вычислять среднее:

Matlab M
1
2
ixmax = find(y > 0, 1, 'last');
xmax = (x(ixmax) + x(ixmax+1))/2;
1
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
02.10.2013, 13:05  [ТС] 13
Еще есть вопрос. В задании сказано, что нужно построить график Xmax(L0), где Xmax -длина полета, а L- это начальный угол броска. Это же две постоянные, каким образом можно построить график? Наверное, я не совсем верно понимаю задание( Ни у кого нет мыслей?
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
02.10.2013, 13:12 14
Максимальная длина полёта Xmax меняется в зависимости от начального угла броска L, так что график вполне можно построить. Функцию можно задать либо явно, выразив из уравнений движения, либо на основе анализа параболы, как это было сделано выше.
1
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
02.10.2013, 14:10  [ТС] 15
То есть, мне нужно взять диапазон значений начального угла и находить максимальное значение длины полета в зависимости от этих значений угла?
Matlab M
1
2
3
4
5
6
7
8
9
10
11
L1 = 0:(pi/180):pi/2;
t1 = 0:0.1:100;
x1=(V0*cos(L1))*t1;
y1=((V0*sin(L1))*t1)-(10.*(t1.^2))/2;
 
ixmax1 = find(y1 >0, 11, 'last');
xmax1 = x1(ixmax1);
 
 
plot(L1, xmax1);
axis([-100 100 -100 100]);
Добавлено через 27 минут
Он так не считает, я не понимаю как сделать так, чтобы он мог считать это максимальное значение Xm, если у нас есть две не постоянные L1 и t1.
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
02.10.2013, 15:03 16
Цитата Сообщение от Fasterovich Посмотреть сообщение
То есть, мне нужно взять диапазон значений начального угла и находить максимальное значение длины полета в зависимости от этих значений угла?
Да, идея правильная, но реализацию нужно продумать – например, заполнять массив в цикле. И максимальное расстояние лучше искать в отдельной функции.

Но самый разумный вариант – рассчитывать по готовой формуле (если только заданием не предусмотрено непосредственное исследование параболы).
0
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
02.10.2013, 15:32  [ТС] 17
Цитата Сообщение от Heidegger Посмотреть сообщение
Да, идея правильная, но реализацию нужно продумать – например, заполнять массив в цикле. И максимальное расстояние лучше искать в отдельной функции.

Но самый разумный вариант – рассчитывать по готовой формуле (если только заданием не предусмотрено непосредственное исследование параболы).
А как я могу получить готовую формулу, если у меня xmax вычисляется в самом конце и отдельно
0
617 / 242 / 16
Регистрация: 31.07.2013
Сообщений: 376
02.10.2013, 15:51 18
Цитата Сообщение от Fasterovich Посмотреть сообщение
А как я могу получить готовую формулу
Я выше приводил ссылку на явные формулы:

Matlab M
1
xmax = V0^2/g*sin(2*L0);
Можно посчитать обоими методами и сравнить.

Если считать программно, нужно для каждого значения L0 рассчитать xmax и результаты поместить в матрицу.
0
Эксперт по математике/физике
4217 / 3412 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
02.10.2013, 15:59 19
Цитата Сообщение от Fasterovich Посмотреть сообщение
t=[0,1,2,3,300,500,900,1000];
Цитата Сообщение от Fasterovich Посмотреть сообщение
не понимаю как правильно задать время (t -я его задал в виде массива значений, может совершенно не верно), ведь оно растет от нуля к бесконечности, ну или хотя бы до тех пор, пока y не станет нулем
Вся задача - яркая иллюстрация тезиса: компьютер - зло для неграмотных, поскольку внушает ложную уверенность в том, что теперь можно не думать головой.
Решение и полное исследование (задачка известна уже много веков) есть в любом школьном учебнике, стоило бы сначала туда посмотреть, прежде чем вычислять (с компьютером) бессмыслицу.
Практический совет: прежде, чем включить компьютер, нужно сделать расчет вручную (одну, две точки траектории, калькулятора достаточно). Многое стало бы понятным. Напр., необходимый интервал времени.
1
0 / 0 / 1
Регистрация: 30.09.2013
Сообщений: 15
02.10.2013, 17:27  [ТС] 20
Цитата Сообщение от Heidegger Посмотреть сообщение
Я выше приводил ссылку на явные формулы:

Matlab M
1
xmax = V0^2/g*sin(2*L0);
Можно посчитать обоими методами и сравнить.

Если считать программно, нужно для каждого значения L0 рассчитать xmax и результаты поместить в матрицу.
Я правильно понимаю, график Xmax(L0) будет прямая, параллельная оси абсцисс?

Добавлено через 7 минут
Ох нет, это бред

Добавлено через 43 минуты
Вопрос по поводу инициализации массива.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
L1 = 0;
i=1;
 
while L1>(pi/2)
  [xmax, ymax, tFlying] = calculateParameters(L1, V0);
   xmax1(i)=xmax;
    L2(i)=L1;
  
    L1 = L1+pi/180;  
++i;
 
end
 
plot(L2, xmax1);
В цикле хочу заполнить массивы L2 и массив xmax1. Не получается, выдает ошибку.

Undefined function or variable 'L2'.

Error in Untitled4 (line 39)
plot(L2, xmax1);
0
02.10.2013, 17:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2013, 17:27
Помогаю со студенческими работами здесь

Движение тела, брошенного под углом к горизонту
нужно выполнить задание на платформе Wolfram: движение тела, брошенного под углом к горизонту....

Движение тела , брошенного под углом к горизонту
Здравствуйте , нужно помощь в редактирование кода. Анимация движения шара, тело не летит по...

Полет тела, брошенного под углом к горизонту
Реализация модели «Полет тела, брошенного под углом к горизонту» Помогите,пожалуйста, переделать...

Движение тела, брошенного под углом к горизонту
Здравствуйте было задание: построить траекторию полета тела массой 1 кг, брошенного по углом 45...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru