How to apply looping in iteration process ?
Show older comments
Hi everyone,
I required to apply diffrent initail guess for iterative solutions. For a single solution, the following script works perfectly.
L = readmatrix('R_bounds_0.01.csv'); (coloumn matrix with 1986 rows)
for i=1:length(L);
f = @(n)((n+1)*log(n+1)-n)/n^2 - L(i);
n0 = 100; % Initial guess
n(i) = fzero(f,n0 );
disp(n );
end
nn=n';
csvwrite('N_lower_100.csv',nn);
However, i need to try with different values of initial guesses [0, 10, 100, 1000] etc. Someone suggets me a modified script but that is still not working,
A = readmatrix('R_mean_value_0.01.csv');
m = length(A) ;
IG = [0, 10, 100, 1000] ; % initial guess
n = length(IG) ;
nn = zeros(m,n) ;
for i = 1:n
n0 = IG(i) ;
for j=1:m
f = @(n)((n+1)*log(n+1)-n)/n^2 - A(j);
nn(i,j) = fzero(f,n0 );
disp(nn(i,j) );
end
end
csvwrite('N_mean_10000.csv',nn);
May someone suggest me any possibel solution.
Thank you!
6 Comments
Mathieu NOE
on 17 Mar 2022
hello
can you share the csv file as well (R_mean_value_0.01.csv)
Andi
on 17 Mar 2022
Torsten
on 17 Mar 2022
Someone suggets me a modified script but that is still not working,
Do you mean that you get a syntax error message or that fzero has problems finding a solution ?
Andi
on 17 Mar 2022
Torsten
on 17 Mar 2022
The implementation is correct.
I think the task of the assignment was to show you that the rootfinder may fail if the initial guess is far off. So there is nothing wrong with your code if fzero does not converge in all test cases.
Andi
on 18 Mar 2022
Answers (1)
If your initial guess is not between about -1 and about +40 then you might not get a solution.
filename = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/930814/R_mean_value_0.01%20.csv';
A = readmatrix(filename);
syms N
f = @(n)((n+1)*log(n+1)-n)/n^2;
baseeqn = f(N);
fplot(baseeqn, [-1.5 40])
hold on
minA = min(A)
maxA = max(A)
yline([minA, maxA]);
ylim([minA-1/4, maxA+1/4])
hold off
sol1 = vpasolve(baseeqn - A(1), 0.5)
fplot(baseeqn, [32 40]); hold on;
yline([minA]);
hold off
6 Comments
Andi
on 18 Mar 2022
Walter Roberson
on 18 Mar 2022
You use log(n+1) . n+1 would be negative for n < -1 and that would give you a complex log. So your n values can never be <= -1 .
You can use a vector of two values for the second parameter to fzero() to prevent fzero from guessing that a number < -1 might perhaps be acceptable.
Andi
on 18 Mar 2022
Walter Roberson
on 18 Mar 2022
As an outsider.... I do not know that your current directory is one that you have write access to.
Andi
on 18 Mar 2022
Mathieu NOE
on 18 Mar 2022
hello
a very minor bug in the first code posted is the initialization of nn is done with the wrong dimensions (flip m and n)
I have no problel running the corected code - attached the output file
of course the IG must contains only values strictly above -1 (otherwise log(n+1) is complex) and different from zero (division by zero)
A = readmatrix('R_mean_value_0.01.csv');
m = length(A) ;
IG = [0.0001,0.001, 0.01, 0.1, 1, 10, 100, 1000] ; % initial guess (n> - 1) and (n # 0)
n = length(IG) ;
nn = zeros(n,m) ; % mod here
for i = 1:n
n0 = IG(i) ;
for j=1:m
f = @(n)((n+1)*log(n+1)-n)/n^2 - A(j);
nn(i,j) = fzero(f,n0 );
disp(nn(i,j) );
end
end
csvwrite('N_mean_10000.csv',nn);
Categories
Find more on Solver Outputs and Iterative Display in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
