About Newton's method
6 views (last 30 days)
Show older comments
Hello guys,
thanks for looking over here!
I'd like to ask about Newton's method in the MATLAB, I have seen many questions about the newton's method in the forum, while I have tried to apply those in my code but it seems that something goes wrong and I spent a lot of time trying to figure what's going on. HereI attached my code, I appreicate if you can help me to figure it out.
Thanks in advance again!
This is what I have wrote:
clear all
close all
u0 = inf; % x0 initial point
h1 = 1; % constant in the equation
E = 25; % constant in the equation
Number = 10; %N
tol = 1e-10;
u(1) = u0;
n = 2;
nfinal = Number+1;
Dm = 10; % constant in the equation
N = 10; % constant in the equation
P1 = (E - (abs(h1).^2).* (exp(N./Dm)-1).* u.^-1)./(Dm + u.^-1);
P2 = (E + (abs(h1).^2).* (exp(N./Dm)-1).* Dm)./(Dm + u.^-1);
A = log2(1+(abs(h1).^2).*P2);
B = N - Dm.* log2(1+exp(-N./Dm).*P1.*abs(h1).^2);
F = A - u.*B; %% equation of the function
while(n<= Number + 1)
Fe = F(u(n-1));
Be = B(u(n-1));
u(n) = u(n-1) + Fe./(Be-(E+Dm.*(exp(N/Dm)-1))/(exp(N/Dm).*Dm.*u+E.*u + 1));
Tn(n) = 1/u(n);
if(abs(Fe)<= tol)
nfinal = n;
break;
end
n = n+1;
end
delay_minimize = Dm + Tn;
plot(0:nfinal-1,delay_minimize)
%%end of the code
What goes wrong is that in the line:
Fe = F(u(n-1));
The MATLAB gives me that the index has to be positve integer or logical value. But I already set n to the 2, I don't really know what's going on.
Btw, the reason for I didn't use diff function is that the F'(u) is equal to the equation I put in the while loop which is : (Be-(E+Dm.*(exp(N/Dm)-1))/(exp(N/Dm).*Dm.*u+E.*u + 1)); and the requirement of the the initial point has to be inf.
Thank you! have a good day!
0 Comments
Answers (1)
Steven Lord
on 15 Feb 2020
As you've written your code F isn't a function. It's a numeric array. That means F(u(n-1)) is an attempt to get whatever is in element u(n-1) of F.
You probably want to specify your function as an anonymous function (if it's simple enough) or as a function handle to a function written in a file (if it's more complicated.) Search the documentation for "anonymous function" or "function handle" for more information.
F = @(u) someExpressionDependingOnTheVariableu
You will need to fill in what "someExpressionDependingOnTheVariableu" is. You'll also need to do the same thing for B.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!