How to have use int() in a for loop?
11 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Walter Roberson
2020-4-22
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.
0 个评论
更多回答(1 个)
KSSV
2020-4-22
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!