An elegant alternative to nested for loops for plotting simulations
조회 수: 4 (최근 30일)
이전 댓글 표시
Hi everyone,
I am plotting a 3D simulation plot using the plot3 function. Here is the code:
clear all; clc; close all;
addpath(genpath(pwd));
load Data.mat
%For loop is used to simulate iteration over time. So I is each time
%instant. I am plotting one data point for each time instant. It might make
%more sense if MarkerSize = 'b.';
MarkerSize = 'b-';
for I =1:91
for J = 1:100
plot3(Location(J,1:I),Time(J,1:I),Magn(J,1:I),MarkerSize)
hold on
end
xlim([0 100]);
ylim([0 100]);
zlim([0 1.5]);
xlabel('Location');
ylabel('Time');
zlabel('Magnitude');
grid on;
pause(1);
end
Here:
Location = 100x91 Matrix
Time = 100x91 Matrix
Mag = 100x91 matrix
Essentially, there are 100 locations. Each of these 100 locations has a time history of 91 data points, where each data point corresponds to some magnitude value over time. I want to simulate the data for all 100 locations changing over time. For example, for each iteration, there is a new data point across time.
My problem is this takes a long time to compute. Is there a more elegant way of doing this? Thanks for your time.
댓글 수: 0
답변 (1개)
Pourya Alinezhad
2013년 7월 14일
편집: Pourya Alinezhad
2013년 7월 14일
hi. do not use HOLD ON command. you can compute and save your data in another matrix.then plot the whole data generated at once.so you will run Plot command just once.here is an example :
plotting with hold on :
x=[0:0.2:20];
for i=1:3
y=sin(x/i)./sqrt(x+1);
plot(y)
hold on
end
plotting without using hold on :
x=[0:0.2:20];
y=sin(x)./sqrt(x+1);
y(2,: )=sin(x/2)./sqrt(x+1);
y(3, : )= sin(x/3)./sqrt(x+1);
plot(x,y);
or simpler:
x=[0:0.2:20];
for i=1:3
y(i,:)=sin(x/i)./sqrt(x+1);
end
plot(x,y)
just use the above examples with a little change for 3d case.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Annotations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!