2 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!

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.

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

Start Hunting!