Show time in the title of a plot, matlab - matlab

I'm working with unsteady state problems, that is problems that depends of time. And I'd like to know how to show computation time on a graph, something like this:
What I have found so far is:
tic
% PROCESS
toc
that tells me the time a process lasts. I'm not looking for tic toc.
Do you know how can I show how the time changes in seconds onto the graph?

For example: (Please read: https://www.mathworks.com/help/matlab/ref/title.html)
tic
% PROCESS
t = toc;
x = 1:10;
y = 1:10;
plot(x,y)
title({'Your title...'; strcat(['t=',num2str(t),'s.'])})
Output

Related

How to measure the time in simulink when it receives a signal

I have a model in matlab simulink .I want to measure the time when a signal is received in the simulink model .Is there any way to find the time .Appreciate if someone could share your knowledge on this .
I could not find any solution for this
In order to get the time that took to your Matlab commands you can use Matlab's tic & toc commands.
Add tic command before the code and toc after the code and you will get the time
Example from mathworks site:
tic
A = rand(12000,4400);
B = rand(12000,4400);
toc
It will print:
Elapsed time is 0.664779 seconds.

MATLAB Optimization column access

I'm working on optimizing my code. I'm going through MATLAB's own optimization webpage (https://www.mathworks.com/company/newsletters/articles/programming-patterns-maximizing-code-performance-by-optimizing-memory-access.html) and writing code to makes sure I understand how to increase the performance. Point 2 suggests that when you store and access matrix data, do so with columns. However, I can't construct my own code that shows this performance boost. If i'm reading it right the two simple codes below should differ in performance by about 30%, however I'm getting far, far less than that:
x=zeros(10000);
tic
for i = 1:10000
for j = 1:10000
if x(i,j) == 0
x(i,j)=randn(1);
end
end
end
toc
Elapsed time is 41.102294 seconds.
x=zeros(10000);
tic
for j = 1:10000
for i = 1:10000
if x(i,j) == 0
x(i,j)=randn(1);
end
end
end
toc
Elapsed time is 39.654574 seconds.

different tic toc results in one-time run or run in steps

i confront with a weird fact! i wrote a matlab code that compare runing time of two algorithms. i embrace codes of each algorithm by tic toc functions, so i can compare time complexities of them. but weird thing is here:
if i run the script at once, algorithm 1 has longer time than algorithm 2, but if i put breakmarks after each toc, algorithm 1 would has shorter time!
in order to understand better what I said, consider following:
tic
% some matlab codes implementing algorithm1
time1 = toc;
disp(['t1 = ',num2str(time1)]) % here is the place for first breakpoint
tic
% some matlab codes implementing algorithm2
time2 = toc;
disp(['t2 = ',num2str(time2)]) % here is the place for second breakpoint
can anyone please explain to me why this happen? thanks

clearing serial buffer in matlab

i am simply printing there floats form my arduino or any other serial output device... in matlab i am receiving them and plotting them. it is being printed in arduino very fast but in matlab it is slower and after a a minute or so the plot is not reacting to the numbers from arduino fast... it seams matlab is slower and it is keeping the records in buffer? how can i clear it and get the fresh data plotted?
one more thing does it make sense that matlab can't import and plot a few numbers in 100Hz? What i am doing wrong or inefficient ?
clc
clear all
h = figure(1);
set(h,'UserData',1);
s=serial('/dev/tty.usbmodem1411','BaudRate',115200);
set(s,'DataBits',8);
set(s,'StopBits',1);
fopen(s);
s.ReadAsyncMode='continuous';
readasync(s);
tStart = tic;
xplot=subplot(3,1,1);
hold on;
xlabel('time(ms)');
ylabel('X angle(deg)');
yplot=subplot(3,1,2);
hold on;
xlabel('time(ms)');
ylabel('Y angle(deg)');
zplot=subplot(3,1,3);
hold on;
xlabel('time(ms)');
ylabel('Z angle(deg)');
cont=true;
xAngle = zeros(1,1000000);
yAngle = zeros(1,1000000);
zAngle = zeros(1,1000000);
i=0;
while(true)
i=i+1;
t = toc(tStart);
%angle = fscanf(s, '%f');
[x y z] = strread(fgetl(s,s.BytesAvailable),'%f %f %f');
plot(xplot,t,x,'.');
plot(yplot,t,y,'.');
plot(zplot,t,z,'.');
drawnow;
end
fclose(s);
It is likely that the speed of the 'plot' command is the problem. Creating a new plot is a slow operation, and so after you have received a few points, the time it takes to create the plot gets large. If you want to plot "real time" data in matlab, you will need to use some methods such as discussed in this question.
You can investigate the situation by changing your loop code to read data from the device and just print the line on the screen without plotting it. I expect you will see that the numbers can be printed as fast as they are received.

How does TIC TOC in matlab work?

I am working with loops.I am using tic toc to check the time. I get different time when i run the same loop. The time is close to each other eg. 98.2 and 97.7. secondly when i reduce the size of the loop to half, i expect the time to change in half but it doesn't. Can anyone explain me how tic toc actually works?
Thanks.
tic
for i=1:124
for j=1:10
for k=1:11
end
end
end
toc
Secondly i tried to use tic toc inside the loop as shown below. Will it return total time? I get a number but i cant verify if it actually is the total.
for i=1:124
tic
for j=1:10
for k=1:11
end
end
toc
end
tic and toc just measure the elapsed time in seconds. MATLAB has now JIT meaning that the actual time to compute cannot be estimated correctly.
Matlab has (at least in this context) no real-time computation, so you basically always have different elapsed time for the same code.
Read this here, its nicely explained, hopefully it helps: http://www.matlabtips.com/matlab-is-no-longer-slow-at-for-loops/