How to have use int() in a for loop?

6 vues (au cours des 30 derniers jours)
Seba.V
Seba.V le 22 Avr 2020
Hi there
The goal of this loop is to plot the value of A over a defined set of angles values al.
I believe the integrating function is giving the following error:
Error using symengine
Invalid argument.
Error in sym/int (line 162)
rSym = mupadmex('symobj::intdef',f.s,x.s,a.s,b.s,options);
Is there a way to integrate a and gradually plot the values from an array?
I hope this makes sense
syms x
B=(pi-asin(1/2))
al=asin(1/2):0.001:B;
V=200*sin(x);
i=1;
for i=al(i)
F=double(subs(100*2*pi+int(V,x,al,B)-100*(B-al)))
Vdc=F/(2*pi);
A=(Vdc-100)/2
plot(al,A)
i=i+1
end

Réponse acceptée

Walter Roberson
Walter Roberson le 22 Avr 2020
syms x
B=(pi-asin(1/2));
al=asin(1/2):0.001:B;
V=200*sin(x);
nal = numel(al);
A = zeros(size(al));
for i = 1 : nal
F=double(subs(100*2*pi+int(V,x,al(i),B)-100*(B-al(i))));
Vdc=F/(2*pi);
A(i)=(Vdc-100)/2;
end
plot(al, A)
This is rather slow (!!) The secret to doing int() in a for loop faster, is not to do int() inside a for loop. Instead, do the int() once before the loop, using a symbolic lower bound, and then subs() the numeric lower bound into that; you can do all the calculations in vectorized form.

Plus de réponses (1)

KSSV
KSSV le 22 Avr 2020
syms x
B=(pi-asin(1/2))
al=asin(1/2):0.001:B;
V=200*sin(x);
i=1;
for i=1:length(al)
I = double(int(V,x,al(i),B)) ;
F=((100*2*pi+I-100*(B-al(i))))
Vdc(i) = F/(2*pi);
A(i) =(Vdc-100)/2 ;
end

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by