3 views (last 30 days)

Show older comments

Hi , I want to find the root of nonlinear function, without giving initial point.

here is my .m file for parameters

alpha=0.74

g =0.5

gamma=1.2

sigma=1

phi=0.8

epsilon_1=1.5

w_r= (epsilon_1-1)/epsilon_1

then I made a function like this

function a=n_h_fun(n_h)

a= n_h-(alpha*(w_r/ ((n_h-1)/(g*(1-gamma)))^sigma)^(1/phi))

end

and saved that file as n_h_fun.m

I want to find the value of n_h where a gets the value 0. I used fzero command but it shows errors.

Alan Stevens
on 20 Sep 2021

Like this?

n_h0 = 0.1; %initial guess

n_h = fzero(@n_h_fun, n_h0);

disp(n_h)

function a=n_h_fun(n_h)

alpha=0.74;

g =0.5;

gamma = 1.2;

sigma=1;

phi=0.8;

epsilon_1=1.5;

w_r= (epsilon_1-1)/epsilon_1;

a= n_h-(alpha*(w_r/ ((n_h-1)/(g*(1-gamma)))^sigma)^(1/phi));

end

John D'Errico
on 20 Sep 2021

Or do this:

alpha=0.74;

g =0.5;

gamma=1.2;

sigma=1;

phi=0.8;

epsilon_1=1.5;

w_r= (epsilon_1-1)/epsilon_1;

syms n_h

a = n_h-(alpha*(w_r/ ((n_h-1)/(g*(1-gamma)))^sigma)^(1/phi));

pretty(a)

So a is a simple nonlinear function of n_h.

% first, plot it. ALWAYS PLOT EVERYTHING

fplot(a,[-20,20])

grid on

vpasolve(a,n_h)

So vpasolve found the root near zero for n_h. There may be other solutions, but when n_h is negative, it looks like that curve goes to -inf almost linearly. We can probably show that to be true. And for positive values of n_h, above some point, it looks like a becomes complex. So the only real solution is probably the one found by vpasolve.

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

Start Hunting!