how to vectorize this "For Loop" ?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
nelson
le 16 Juil 2017
Réponse apportée : Walter Roberson
le 16 Juil 2017
close all
clear all
clc
tic;
for k=1:0.5:10;
for a=1:0.5:5;
num=k;
den=[1 a 0];
sys=tf(num,den);
bode(sys);grid on;hold on;
end
end
time=toc
0 commentaires
Réponse acceptée
Walter Roberson
le 16 Juil 2017
k=1:0.5:10;
a=1:0.5:5;
[K, A] = ndgrid(k, a);
Numerator = num2cell(K(:));
nusz = size(Numerator);
Denominator = num2cell( [ones(nusz), A(:), zeros(nusz)], 2);
tfs = tf(Numerator, Denominator);
Now at this point you have two choices:
1)
bode(tfs); grid on
This is not the same as your original code: it produces an array of plots. To be honest, it is not understandable even in full screen mode -- it just looks like a series of straight lines across the screen. However, the execution time is not so bad considering.
2)
for K = 1 : 171; bode(tfs(K)); hold on; end; grid on
This is the same as your original code. It would create a single pair of plots with 171 lines each (but most of which overlay each other.) This takes quite a while to execute.
The drawing of the plots takes much much longer than the creation of the transfer functions -- to the point where it is hardly even worth bothering to vectorize the creation of the transfer functions considering the loss in clarity about what is being plotted.
0 commentaires
Plus de réponses (1)
scadaprog
le 16 Juil 2017
Hi, This is one way of doing it:
k=1:.5:10; a=1:.5:5;
num=repmat(k',numel(a),1);
a = [ones(numel(a),1) a' zeros(numel(a),1)];
den = repmat(a, numel(k),1);
sys = tf(num2cell(num),num2cell(den,2));
bode(sys);
0 commentaires
Voir également
Catégories
En savoir plus sur Time and Frequency Domain Analysis dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!