How to apply looping in iteration process ?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Torsten
le 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.
Réponses (1)
Walter Roberson
le 17 Mar 2022
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 commentaires
Mathieu NOE
le 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);
Voir également
Catégories
En savoir plus sur Startup and Shutdown 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!