2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 График кусочной функции в MATLAB.
Сообщение24.11.2017, 13:06 
Как построить график функции в матлабе( например, для n=3).В фигурных скобках - дробная часть числа. $$    T_{n}:[0,1]\to[0,1]$$
$$T_{n}(x)=\begin{cases}
\left\lbrace nx\right\rbrace,&\text{если $x\ne 1$;}\\
1,&\text{если $x=1$;}\\

\end{cases}$$

Пробовал сам построить, но ничего хорошего не получилось:
Код:
x=0:0.02:1;
y=(3*x-fix(3*x)).*(x~=1) + (1)*(x=1);
plot(x, y),   grid

 
 
 
 Posted automatically
Сообщение24.11.2017, 13:12 
 i  Тема перемещена из форума «Околонаучный софт» в форум «Карантин»
по следующим причинам:

- отсутствуют собственные содержательные попытки решения задачи.

Исправьте все Ваши ошибки и сообщите об этом в теме Сообщение в карантине исправлено.
Настоятельно рекомендуется ознакомиться с темами Что такое карантин и что нужно делать, чтобы там оказаться и Правила научного форума.

 
 
 
 Posted automatically
Сообщение24.11.2017, 23:28 
 i  Тема перемещена из форума «Карантин» в форум «Околонаучный софт»

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 00:17 
Создайте матлаб--функцию, или файл - функцию, подайте ей на вход массив х, получите на выходе массив у, далее plot.

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 01:53 
У Вас ошибка в 3 строке, в логическом выражении нужно писать "==" а не "=", т.е. нужно вот так:
(ось x советую продлить до 2, чтобы было видно точку x=1)
Используется синтаксис Matlab M
x=0:0.02:2;
y=(3*x-fix(3*x)).*(x~=1) + (1)*(x==1);
plot(x, y),   grid;
 

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 14:41 
Мне бы хотелось получить такой график, причем с выколотыми и закрашенными точками:

Изображение

а МАТЛАБ мне выдает такое:
Код:
x=0:0.02:2;
y=(3*x-fix(3*x)).*(x~=1) + (1)*(x==1);
plot(x, y),   grid;


Изображение

как решить эту проблему?

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 14:46 
Аватара пользователя
А Матлаб просто так, без доп. усилий вообще умеет рисовать графики с выколотыми и закрашенными точками и без вот этих вертикальных линий? Думаю, здесь нужно как следует постараться.

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 14:52 
К сожалению, не сумел найти хотя бы примера как это реализовать, а у Вас есть идеи?

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 15:01 
Практически все "графикорисовалки" просто соединяют точки линиями, отсюда и результат. То, что Вы хотите, можно сделать, если рисовать каждый участок как отдельный график, а потом также отдельно расставить выделенные точки.

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 15:18 
Запросто, рисуем линию по точкам без их соединения (шаг сетки увеличиваем в 100 раз, чтобы точки слились в сплошные линии),
находим точки разрыва по условию $y_n-y_{n+1}>0.8$ и наносим эти точки поверх предыдущего графика в виде кружочков, ну или как Вам больше нравится, вот рабочий пример:
Используется синтаксис Matlab M
x=0:0.0002:2;
y=(3*x-fix(3*x)).*(x~=1) + (1)*(x==1);
index=find(y(1:end-1)-y(2:end)>0.8);

figure; plot(x, y,'.','markersize',1);
hold on
plot(x(index), y(index),'o','markersize',8,'color','red','markerfacecolor','red'),
plot(x(index+1), y(index+1),'o','markersize',8,'color','red','markerfacecolor','red'),   grid;
hold off
 

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 15:22 
Andrey_Kireew, спасибо.

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение25.11.2017, 20:36 
Аватара пользователя
Pphantom в сообщении #1268944 писал(а):
Практически все "графикорисовалки" просто соединяют точки линиями, отсюда и результат.
Математика с некоторых пор умеет более красиво, даже на автомате. Есть ещё и опции (Exclusions, ExclusionsStyle), помогающие это контролировать.

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение26.11.2017, 00:23 
Аватара пользователя
Помнится, достаточно NaN вставить в точку разрыва....

 
 
 
 Re: График кусочной функции в MATLAB.
Сообщение26.11.2017, 03:19 
Matlab R2013b MuPAD Notebook
Вложение:
Matlab2013bPWPlot.png


-- Вс 26.11.2017 02:34:02 --

By default, the attribute DiscontinuitySearch = TRUE is set. This triggers a semi-symbolic preprocessing of the expression f to search for discontinuities and singularities. At each singular point, the function graph is split into disjoint branches to the left and to the right of the singularity. This avoids graphical artifacts such as lines connecting points to the left and to the right of a singularity.


У вас нет доступа для просмотра вложений в этом сообщении.

 
 
 
 оси с разным масштабом в МАТЛАБ
Сообщение05.12.2017, 02:40 
Можно ли добиться того, чтобы график на выходе получился приплюснутым по оси Х, т.е. масштаб осей был разным?
(внизу м-функция для построения графиков дробной части)

Код:
function TTT
n=2;
flag=0;

if flag==1

color=[0 0.5 0.5];
rectangle('Position',[0 0 0.5 1],'FaceColor',...
    color,'EdgeColor',color)
rectangle('Position',[0.75 0 0.25 1],'FaceColor',...
    color,'EdgeColor',color)
end

box on
ax = gca;
ax.DataAspectRatio=[1 1 1];
ax.XTick=[0:0.2:1];
ax.YTick=[0:0.2:1];


xlabel(['Т_' num2str(n) '(x)'])

k=0;
for i=1:n
   
    x1=k;
    x2=1/n+k;
    x=linspace(x1,x2);
    y=linspace(0,1);
   
    hold on
    plot(x,y,'b','LineWidth',1.5) 
   
    plot(x1,0,'.r','MarkerSize',28)
    if i~=n
    plot(x2,1,'og','MarkerSize',8)
    else
    plot(x2,1,'.r','MarkerSize',28)
    end
    k=k+1/n;

end

end

 
 
 [ Сообщений: 17 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group