How to apply looping in iteration process ?
이전 댓글 표시
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
Mathieu NOE
2022년 3월 17일
hello
can you share the csv file as well (R_mean_value_0.01.csv)
Andi
2022년 3월 17일
Torsten
2022년 3월 17일
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
2022년 3월 17일
Torsten
2022년 3월 17일
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
2022년 3월 18일
답변 (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
Andi
2022년 3월 18일
Walter Roberson
2022년 3월 18일
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
2022년 3월 18일
Walter Roberson
2022년 3월 18일
As an outsider.... I do not know that your current directory is one that you have write access to.
Andi
2022년 3월 18일
Mathieu NOE
2022년 3월 18일
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);
카테고리
도움말 센터 및 File Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

