Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11

Построить график функции с фишками с координатами

01.10.2014, 00:48. Показов 3755. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, ребятки!
Крайне нужна помощь с одним заданием по MatLab.
Суть:
Построить функцию y=x^3+x^2*cos(x)+x*sin(x)+1 на участке от -pi до pi.
А теперь самое интересное: Если тыкнуть мышкой в любое место на графике, то от этой точки должны построится перпендикуляры, а такжевозле точки должны появиться координаты точек пересечения с нашей функцией. Если тыкнешь мышью в другое место, то первые линии+координаты исчезают и появляются новые запрашиваемые.

Я совсем в печали, как это реализовать
Миниатюры
Построить график функции с фишками с координатами  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2014, 00:48
Ответы с готовыми решениями:

Нужно построить график функции, найти максимальное и минимальное значение функции на заданном
Напишите файл-программу (M-file), которая должна: построить график функции, найти максимальное и минимальное значение функции на заданном...

Построить график функции
нужно построить график функции \begin{cases} \frac{\sqrt{y}}{9+x} & \text{ , } 1.3 \le x \\ \frac{sin\,\left(x \right)}{x^2+y^2}...

Построить график функции
Здравствуйте. Помогите пожалуста. На одном графике построить график функции f(x,y)=ln tg x+cos y при различных значения y. Значения у...

22
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
01.10.2014, 00:54
Цитата Сообщение от SiriusLi Посмотреть сообщение
Я совсем в печали, как это реализовать
Вы приступайте,а мы вам поможем
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
01.10.2014, 09:51
Начните с
[x, y] = ginput
0
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
01.10.2014, 10:29
А задачка то не такая простая как на первый взгляд кажется:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function PltWpt
x=-pi:pi/96:pi;
f=@(x)x.^3+x.^2.*cos(x)+x.*sin(x)+1;
y=f(x);
ha=axes;
line(x,y,'LineWidth',2,'ButtonDownFcn',@MyFun)
axis tight
set(ha,'ButtonDownFcn',@MyFun)
XL=get(gca,'XLim');
YL=get(gca,'YLim');
line(XL,[0,0],'Color','k','LineStyle',':','ButtonDownFcn',@MyFun)
line([0,0],YL,'Color','k','LineStyle',':','ButtonDownFcn',@MyFun)
hl=[];
ht=[];
hp=[];
  function MyFun(src,eventdata)
  delete([hl,ht,hp])
  CP=get(ha,'CurrentPoint');
  x0=CP(1,1);
  y0=CP(1,2);
  y1=f(x0);
  if sign(y0)~=sign(y1)
    y0=-y0;
  end
  if abs(y1)>abs(y0)
    y1=y0;
    x1=fzero(@(x)f(x)-y0,0);
  else
    x1=x0;
  end
  hl=line([0,x0,x0],[y0,y0,0],'Color','r','LineStyle',':');
  ht=text(x1,y1,['(',num2str(x1),';',num2str(y1),')'],'VerticalAlignment','top');
  hp=line([x1,x1],[y1,y1],'Marker','o','MarkerSize',4,...
    'MarkerEdgeColor','r','MarkerFaceColor','r');
  end
end
2
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.10.2014, 11:11
гляди
*чтобы завершить программу достаточно закрыть окно графика
программка
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
clear, clc
 
x = -pi:0.01:pi; % значения х
y = x.^3 + x.^2.*cos(x) + x.*sin(x) + 1; % значения функции
limt = [min(x) max(x) min(y) max(y)]; % пределы значений х и у
 
plot(x,y,'b') % рисуем кривую
grid on % вкл. сетку
axis(limt) % устанавливаем границы окна
 
while 1 % бесконечный цикл
    [x0,y0] = ginput(1); % вводим одну точку
    y1 = x0.^3 + x0.^2.*cos(x0) + x0.*sin(x0) + 1; % считаем кординату на кривой
   
    % координтаты перпендикуляров:
    yu0 = min([0,y0,y1,min(y)]);
    yu1 = max([0,y0,y1,max(y)]);
    %yu1 = max(y).*(y0>0)+min(y).*(y0<0);
   
   xu = max(x).*(x0>0)+min(x).*(x0<0);
   % рисуем:
   plot(x,y,'b',... % кривая 
        x0,y0,'or',... % точка на кривой
        x0,y1,'*r',... % точка на кривой
        [0 0],[min(y) max(y)],'k',... % ось Х
        [min(y) max(y)],[0 0],'k',... % ось Y
        [x0 x0],[yu0 yu1],'--r',... % вертикальный перпендикуляр
        [0 xu],[y1 y1],'--r') % горизонтальный перпендикуляр
    grid on
    axis(limt) 
    % наносим подпись:
    text(x0+0.1, y1, ['(',num2str(x0,2),', ',num2str(y1,2),')'],'BackgroundColor','g')
end


эх, я чуток не правильно сделал перпендикуляры
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
01.10.2014, 20:18  [ТС]
Мне выдает какую-то ошибку...

Добавлено через 2 минуты
tvoretsmira, там что-то неверно работает. В нижних четвертях

Добавлено через 35 секунд
Зосима, ой, спасибо! Сейчас постараюсь перпендикуляры доработать :3
0
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
01.10.2014, 21:57
Цитата Сообщение от SiriusLi Посмотреть сообщение
tvoretsmira, там что-то неверно работает. В нижних четвертях
Например, что? Я думаю, что сделал всё правильно. Обьясните как должно быть.
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
02.10.2014, 21:18  [ТС]
tvoretsmira, смотрите. На скрине я тыкаю во 2 четверть. А он рисует перпендикуляры где-то не там. Не внизу...
Миниатюры
Построить график функции с фишками с координатами  
0
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
02.10.2014, 21:36
Вы наверно четвёртую четверть имели ввиду.
Ладно, а если так ...
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function PltWpt
x=-pi:pi/96:pi;
f=@(x)x.^3+x.^2.*cos(x)+x.*sin(x)+1;
y=f(x);
ha=axes;
line(x,y,'LineWidth',2,'ButtonDownFcn',@MyFun)
axis tight
set(ha,'ButtonDownFcn',@MyFun)
XL=get(gca,'XLim');
YL=get(gca,'YLim');
line(XL,[0,0],'Color','k','LineStyle',':','ButtonDownFcn',@MyFun)
line([0,0],YL,'Color','k','LineStyle',':','ButtonDownFcn',@MyFun)
hl=[];
ht=[];
hp=[];
  function MyFun(src,eventdata)
  delete([hl,ht,hp])
  CP=get(ha,'CurrentPoint');
  x0=CP(1,1);
  y0=CP(1,2);
  y1=f(x0);
  hl=line([0,x0,x0],[y0,y0,0],'Color','r','LineStyle',':');
  if sign(y0)==sign(y1)
    if abs(y1)>abs(y0)
      y1=y0;
      x1=fzero(@(x)f(x)-y0,0);
    else
      x1=x0;
    end
    ht=text(x1,y1,['(',num2str(x1),';',num2str(y1),')'],'VerticalAlignment','top');
    hp=line([x1,x1],[y1,y1],'Marker','o','MarkerSize',4,...
      'MarkerEdgeColor','r','MarkerFaceColor','r');
  else
    ht=[];hp=[];
  end
  end
end
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
02.10.2014, 21:40  [ТС]
tvoretsmira,да, 4-ую, извиняюсь.
Но все равно не то. Он доводит до системы координат, а должен до функции. Ну, это в моем представлении.
Миниатюры
Построить график функции с фишками с координатами  
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
02.10.2014, 21:47  [ТС]
tvoretsmira, я поняла что именно Вы сделали. В 4ой просто функции нет типа.
Но, на рисунке в шапке показана 1 точка. Она хоть и во 2 четверти, но пересечение получает в 3 и все равно отображается.
0
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
02.10.2014, 22:18
Тогда, так ...
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function PltWpt1
x=-pi:pi/96:pi;
f=@(x)x.^3+x.^2.*cos(x)+x.*sin(x)+1;
y=f(x);
ha=axes;
line(x,y,'LineWidth',2,'ButtonDownFcn',@MyFun)
axis tight
set(ha,'ButtonDownFcn',@MyFun)
XL=get(gca,'XLim');
YL=get(gca,'YLim');
line(XL,[0,0],'Color','k','LineStyle',':','ButtonDownFcn',@MyFun)
line([0,0],YL,'Color','k','LineStyle',':','ButtonDownFcn',@MyFun)
hlx=[];
hly=[];
ht=[];
hp=[];
  function MyFun(src,eventdata)
  delete([hlx,hly,ht,hp])
  CP=get(ha,'CurrentPoint');
  x0=CP(1,1);
  y0=CP(1,2);
  y1=f(x0);
  x1=x0;
  if sign(y0)==sign(y1)
    hlx=line([0,x0],[y0,y0],'Color','r','LineStyle',':');%перепендикуляр к оси x
    if abs(y1)>abs(y0)
      hly=line([x0,x0],[0,y1],'Color','r','LineStyle',':');%перепендикуляр к оси y
    else
      hly=line([x0,x0],[0,y0],'Color','r','LineStyle',':');%перепендикуляр к оси y
    end
  else
    hlx=line([0,x0],[y0,y0],'Color','r','LineStyle',':');%перепендикуляр к оси x
    hly=line([x0,x0],[y0,y1],'Color','r','LineStyle',':');%перепендикуляр к оси y
  end
  ht=text(x1,y1,['(',num2str(x1),';',num2str(y1),')'],'VerticalAlignment','top');
  hp=line([x1,x1],[y1,y1],'Marker','o','MarkerSize',4,...
    'MarkerEdgeColor','r','MarkerFaceColor','r');
  end
end

2
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
02.10.2014, 22:37  [ТС]
tvoretsmira, теперь вроде как корректно :3
А не мог ли бы Вы мне еще комментарии написать к тому, что здесь происходит... У меня матлаб был 4 года назад, и я уже в нем абсолютно не разбираюсь, а сдавать надо
0
 Аватар для tvoretsmira
462 / 452 / 56
Регистрация: 28.05.2013
Сообщений: 699
02.10.2014, 23:26
Лучший ответ Сообщение было отмечено Зосима как решение

Решение

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function PltWpt1
x=-pi:pi/96:pi; % вектор абсцисс
f=@(x)x.^3+x.^2.*cos(x)+x.*sin(x)+1; %указатель на анонимную функцию
y=f(x); % вектор ординат
ha=axes; %строим оси и получаем с них укзатель
line(x,y,'LineWidth',2,'ButtonDownFcn',@MyFun) %строим линию по ранее найденым
% векторам.
% Также учитываем что пользователь может нажать на этой линии. Если такое
% произойдёт, то выполнится функция MyFun
axis tight %устанавливаем диапазоны на осях равные диапазонам изменения 
% абсцисс и ординат нарисованой кривой
set(ha,'ButtonDownFcn',@MyFun) %Если пользователь нажмёт мышкой на белом полотне осей,
% то выполнится функция MyFun
XL=get(gca,'XLim'); % XL=[min(x),max(x)] c той лишь разницей
% что достал со свойства объекта оси
YL=get(gca,'YLim'); % YL=[min(y),max(y)]
line(XL,[0,0],'Color','k','LineStyle',':','ButtonDownFcn',@MyFun) % ось X
line([0,0],YL,'Color','k','LineStyle',':','ButtonDownFcn',@MyFun) % ось Y
box on % рамка вокруг осей
hlx=[];% Пустые массивы специально чтобы функции delete не было чего удалять
hly=[];% при первом щелчке мышкой
ht=[];
hp=[];
  function MyFun(src,eventdata)
  delete([hlx,hly,ht,hp]) % удаляем старые перпендикуляры, текст, точку
  CP=get(ha,'CurrentPoint'); % узнаём куда ж ткнул пользователь
  x0=CP(1,1);
  y0=CP(1,2);
  y1=f(x0);% расчитываем ординату кривой для выбраной пользователем абсциссы
  if sign(y0)==sign(y1) %если кривая по одну сторону оси х с выбраной пользователем точкой 
    hlx=line([0,x0],[y0,y0],'Color','r','LineStyle',':','ButtonDownFcn',@MyFun);%перепендикуляр к оси x
    if abs(y1)>abs(y0) %если кривая дальше от оси чем выбраная точка  
      hly=line([x0,x0],[0,y1],'Color','r','LineStyle',':','ButtonDownFcn',@MyFun);%то перепендикуляр опускаем с кривой
    else %если выбраная точка дальше от оси чем кривая
      hly=line([x0,x0],[0,y0],'Color','r','LineStyle',':','ButtonDownFcn',@MyFun);%то перепендикуляр опускаем с выбраной точки
    end
  else %если кривая и выбранная пользователем точка с разных сторон оси х 
    hlx=line([0,x0],[y0,y0],'Color','r','LineStyle',':','ButtonDownFcn',@MyFun);%перепендикуляр к оси x
    hly=line([x0,x0],[y0,y1],'Color','r','LineStyle',':','ButtonDownFcn',@MyFun);%перепендикуляр к оси y
  end
  ht=text(x0,y1,['(',num2str(x0),';',num2str(y1),')'],'VerticalAlignment','top','ButtonDownFcn',@MyFun);% подписываем точку на кривой
  hp=line([x0,x0],[y1,y1],'Marker','o','MarkerSize',4,...
    'MarkerEdgeColor','r','MarkerFaceColor','r','ButtonDownFcn',@MyFun); %собственно рисуем точку на кривой
  end
end
2
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
03.10.2014, 18:23  [ТС]
tvoretsmira, спасибо!
Завтра попробую сдать оба варианта отписавших.
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
06.10.2014, 14:49  [ТС]
Зосима, я показала твой код преподу. Он сказал, что все миленько рисуется, но потом он посмотрел код... И сказал кое-что изменить.
А точнее: он хочет, чтоб график рисовался 1 раз, а не перерисовывался при каждой новой координате. Посоветовал использовать set. "Должен быть набор объектов, а меняться только координаты. Доступ к объекту в момент создания".
Можешь с этим помочь?
0
06.10.2014, 14:55

Не по теме:

SiriusLi, ты с ней из одного универа? :) Построение кривой

0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
06.10.2014, 14:56  [ТС]
Зосима, хахаха, из одной группы))
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
06.10.2014, 15:25
tvoretsmira лучше разбирается с get/set, но кое чему я у него научился
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
clear, clc
 
x = -pi:0.01:pi; % значения х
y = x.^3 + x.^2.*cos(x) + x.*sin(x) + 1; % значения функции
limt = [min(x) max(x) min(y) max(y)]; % пределы значений х и у
 
% рисуем:
hold on
plot(x,y,'b') % кривая
plot([min(x) max(x)],[0 0],'k',... % ось Х
    [0 0],[min(y) max(y)],'k') % ось Y
% сохраняем указатели(handle) объектов 
hp = plot(NaN,NaN,'or'); % точка тыка
hk = plot(NaN,NaN,'*r'); % точка на кривой
hpv = plot(NaN,NaN,'--r'); % вертикальный перпендикуляр
hph = plot(NaN,NaN,'--r'); % горизонтальный перпендикуляр
ht = text(NaN, NaN,'','BackgroundColor','g');
 
grid on % вкл. сетку
axis(limt) % устанавливаем границы окна
while 1 % бесконечный цикл
    [x0,y0] = ginput(1); % вводим одну точку
    set(hp,'XData',x0,'YData',y0);
    
    y1 = x0.^3 + x0.^2.*cos(x0) + x0.*sin(x0) + 1; % считаем координату на кривой
    set(hk,'XData',x0,'YData',y1);
    
    % координаты перпендикуляров:
    yu0 = min([0,y0,y1,min(y)]);
    yu1 = max([0,y0,y1,max(y)]);
    %yu1 = max(y).*(y0>0)+min(y).*(y0<0);
    xu = max(x).*(x0>0)+min(x).*(x0<0);
    set(hpv,'XData',[x0 x0],'YData',[yu0 yu1]);
    set(hph,'XData',[0 xu],'YData',[y1 y1]);
        
    % наносим подпись:
    str = ['(',num2str(x0,2),', ',num2str(y1,2),')'];
    set(ht,'Position',[x0+0.1, y1],'String',str)
end
1
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 11
06.10.2014, 16:38  [ТС]
Зосима, еще одна просьба. Скажи, пожалуйста, как теперь это работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2014, 16:38
Помогаю со студенческими работами здесь

Построить график функции
Добрый вечер, помогите пожалуйста построить в матлабе график такой функции. Не знаю как правильно задать это. а в инете не знаю как...

Построить график функции
z=\sqrt{|{x}^{7}|*{e}^{y} Помогите построить график функции

Построить график функции
построить график функции F1(a,b,t)={2sin(3t),если t&lt;a, 0,если a&lt;=t&lt;b, ...

Построить график функции
Построить в математическом пакете график функции f (x) и приблизительно определить один из корней уравнения. Решить уравнение с точностью ...

Построить график функции
Друзья, помогите пожалуйста... На этой неделе зачет, не получается оформить график.. Вроде все вбиваю, а на графике ничего не...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru