Problem with a code

1 view (last 30 days)
david david
david david on 24 May 2015
Commented: david david on 26 May 2015
Hi, I need to find out the minimum N so that Eg<10^(-7). I got that N=199...and it's to much... Can anyone help me what is the problem with my code?
Thanks,
<<
>>
  2 Comments
James Tursa
James Tursa on 24 May 2015
Please don't post your code as an image ... it forces the reader to type your code in by hand in order to run it, and nobody wants to do that. Please re-post your code as text and use the { } Code button to format it.
david david
david david on 25 May 2015
Edited: david david on 25 May 2015
h=1/2000;
er= 10^(-7);
N=1;
eg=10;
while (eg>er)
sumup=0;
sumdown=0;
for m=0:5000,
nsum=0;
for n=0:N,
nsum=nsum+(((32/((pi).^3)).*(((-1)^n)/((2.*n+1).^3).*(cos(((2*n+1)/5)*(pi)*m*h)))));
end
sumup=sumup+(abs(nsum-(1-(2.*m.*h/5).^2)).^2);
sumdown=sumdown+((1-(2.*m.*h/5).^2).^2);
end
eg=sqrt((sumup)/(sumdown));
N=N+1;
end
N;

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 25 May 2015
Edited: Stephen23 on 25 May 2015
Here is a solution using no loops, and only vectorized code:
hy = 1/2000;
mv = 0:5000;
den = sqrt(sum((1-(2/5*mv*hy).^2).^2));
pfx = @(nv) (-1).^nv ./ (2*nv + 1).^3;
trg = @(nv) bsxfun(@times, (2*nv+1)/5, pi*mv*hy);
foo = @(nv) bsxfun(@times, pfx(nv), cos(trg(nv)));
bar = @(nv) sqrt(sum((32/pi^3 * sum(foo(nv)) - (1-(2/5*mv*hy).^2)).^2));
fun = @(N) bar((0:N)') / den;
First lets take a look at the function:
>> X = 1:300; % range of N values
>> Y = arrayfun(fun, X);
>> semilogy(X,Y)
And now the first value <1e-7 occurs for an N of:
>> Z = Y<1e-7;
>> X(find(Z,1,'first'))
ans =
198

More Answers (0)

Categories

Find more on Environment and Settings in Help Center and File Exchange

Tags

No tags entered yet.

Products

Community Treasure Hunt

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

Start Hunting!