Asked by Yonas Gezahegn
on 14 Nov 2018

Dear all, I am trying to solve transcendental equations of TM mode using fsolve, but I constantly get error message stating:

"The vector of function values is near zero, as measured by the selected value of the function tolerance. However, the last step was ineffective."

Here are the code and myfun fiels, please help me!

Thxs!

% Given:

clear;clc;

mu_o = 4*pi*10^(-7);

mu_r = 1;

esp_o = (10^(-9))/(36*pi);

esp_r = 2.56;

esp_d = esp_o*esp_r;

mu_d = mu_o*mu_r;

h = 0.3175; % [cm]

f_c1 = 18.913e9; % from example 8-11 pp 17.

f = 0:f_c1/1000:2*f_c1;

b_z = 0; %Initialization

for f_index = 1:1:length(f)

w = (2*pi*f(f_index));

b_z = 793; % Initial point guessing

options = optimset('Display','iter','MaxFunEvals',1e20,'TolFun',1e-10,'TolX',1e-10);

b_z_sol = fsolve(@myfun, b_z, options);

end

b_yd_sol = (sqrt(w.^2*mu_d*esp_d - b_z_sol.^2))/100; % [rad/cm] equ. 8-160c

a_sol = (sqrt(b_z_sol.^2 - (w.^2*mu_o*esp_o)))/100; % [rad/cm] equ. 8-160d

b_o = w*sqrt(mu_o*esp_o);

b_d = w*sqrt(mu_d*esp_d);

% Figure-a

subplot(2,1,1);

plot(f(f_index)/f_c1,real(b_z_sol));

hold on;

plot(f(f_index)/f_c1, real(b_yd_sol), ':');

plot(f(f_index)/f_c1, real(a_sol), '--');

hold off;

axis([0 f(f_index)/f_c1 0 9]);

xlabel('Normalized frequency (f/f_C_1)');

title('Attenuation and Phase Constants of TM^{Z}_m');

subplot(2,1,2);

% Figure-b

plot(b_o, w);

hold on;

plot(b_d, w);

plot(real(b_z_sol), w);

axis([0 13e2 0 2e11]);

xlabel('\beta_o \beta_z \beta_d');

ylabel('\omega(\beta_o \beta_z \beta_d)');

title('Dispersion Curve');

hold off;

% myfum.m file code:

function F = myfun(b_z)

global w;

mu_o = 4*pi*10^(-7);

mu_r = 1;

esp_o = (10^(-9))/(36*pi);

esp_r = 2.56;

esp_d = esp_o*esp_r;

mu_d = mu_o*mu_r;

h = 0.3175; % [cm]

f_c1 = 18.913e9; % from example 8-11 pp 417

f = 0:18.913e6:2*f_c1;

for f_index = 1:1:length(f)

end

w = (2*pi*f(f_index));

% Iteration equations for the three unknowns

b_yd = (sqrt(w.^2*mu_d*esp_d - b_z.^2))/100; % [rad/cm] equ. 8-160c

a = (sqrt(b_z.^2 - (w.^2*mu_o*esp_o)))/100; % [rad/cm] equ. 8-160d

F = (a*(esp_d/esp_o)) - (b_yd*h*tan(b_yd*h)); % equ 8-160b

end

Answer by Alan Weiss
on 15 Nov 2018

Accepted Answer

Without running your code, I can tell you that the exit message you give is NOT an error message. Read its first part:

"The vector of function values is near zero, as measured by the selected value of the function tolerance."

This means that fsolve found a solution. So I think that you should't worry about the second part of the message, which is about algorithm internals.

Alan Weiss

MATLAB mathematical toolbox documentation

Yonas Gezahegn
on 16 Nov 2018

Thanks a lot Alan!

My problem is to plot a graph using the output results.

Can anyone can give me a hint please.

Alan Weiss
on 16 Nov 2018

I don't understand what you want to plot. I suggest that you start a new question with some details.

Alan Weiss

MATLAB mathematical toolbox documentation

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## madhan ravi (view profile)

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/429764-how-to-solve-error-message-in-fsolve-stating-the-vector-of-function-values-is-near-zero-as-measur#comment_640834

Sign in to comment.