MATLAB Answers

About Newton's method

2 views (last 30 days)
Zekun Xue
Zekun Xue on 15 Feb 2020
Commented: Zekun Xue on 15 Feb 2020
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;
n = n+1;
delay_minimize = Dm + Tn;
%%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!

Answers (1)

Steven Lord
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.
  1 Comment
Zekun Xue
Zekun Xue on 15 Feb 2020
Thanks for your reply!
I tried to learn the documentations you referred, and now I can understand what you were saying.
May I ask you one more question?
I used the diff function instead now, but MATLAB gives me :Assignment cannot be performed because the number of elements on the left and right is different(which appear in the line of: u(n) = u(n-1) - Fe./Fpe)
The code I have changed:
F = @(u)A-u.*B; %% equation of the function
Fp = @(u) diff(F(u(n-1)))
while(n<= Number + 1)
Fe = F(u(n-1));
Fpe = Fp(u(n-1));
u(n) = u(n-1) - Fe./Fpe;
if(abs(Fe)<= tol)
nfinal = n;
n = n+1;

Sign in to comment.




Community Treasure Hunt

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

Start Hunting!