56 views (last 30 days)

I have an equation of the form:

3*(1-f1/alphax)*A1+(f1/3*alphax)*(A2+2*A3/A4)=0 with

A1 = (sigma_e - sigma_m)/(2*sigma_e - sigma_m);

A2 = (sigma_e - sigma33_com)/(sigma_e + 0.14*(d/L)*(sigma33_com- sigma_e));

A3 = (sigma_e - sigma11_com);

A4 = sigma_e + ((1-0.14*(d/L))/2)*(sigma11_com - sigma_e);

I want to plot a curve of sigma_e for selected values of f1. sigma_m, d,L are user supplied variables while sigma11_com and sigma33_com are obtained by calling some function.

In order to obtain the unknown sigma_e for every f1, I have tried to use the fzero function but for all initial guesses of sigma_e I try, I get the output as NaN, implying the function may not have a root.

I am not sure this is the right function or the right method to solve the sort of equation I have above; if anyone could confirm or correct my approach, I would most appreciate.

Assuming this is the right method; I am trying to solve the equation using the following statement after assigning values the variables:

x3 = fzero(@(sigma_e) trial0(sigma_e,L,d,sigma_m,f1),0.015)

where trial0 is the function given below. Is this correct? I am new to MATLAB and any help will be most appreciated.

function sigma_e1 = trial0(sigma_e,L,d,sigma_m,f1)

global sigma_m

global L

global d

global sigma_e

global f1

A1 = (sigma_e - sigma_m)/(2*sigma_e - sigma_m);

A2 = (sigma_e - sigma33_com)/(sigma_e + 0.14*(d/L)*(sigma33_com-sigma_e));

A3 = (sigma_e - sigma11_com);

A4 = sigma_e + ((1-0.14*(d/L))/2)*(sigma11_com - sigma_e);

sigma_e1 = 3*(1-f1/alphax)*A1+(f1/3*alphax)*(A2+2*A3/A4);

end

I am using the following command lines:

>> sig3=sigma33_com(0.0025,1.5e-6,1.85,1850,2.5e-7)

sig3 =

936.23

>> sig1=sigma11_com(2.5e-3,1.5e-6,1.85,2.5e-7,7.5e-7,1850)

sig1 =

6.5845

>> x3=fzero(@(sigma_e) trial0(2.5e-3,1.5e-6,1e-9,8e-4,sig3,sig1,sigma_e),0.02)

and the functions are:

function sigma_e1 = trial0(L,d,sigma_m,f1,sigma33_com,sigma11_com,sigma_e)

A1 = (sigma_e - sigma_m)/(2*sigma_e - sigma_m);

A2 = (sigma_e - sigma33_com)/(sigma_e + 0.14*(d/L)*(sigma33_com-sigma_e));

A3 = (sigma_e - sigma11_com);

A4 = sigma_e + ((1-0.14*(d/L))/2)*(sigma11_com - sigma_e);

sigma_e1 = 3*(1-f1/alphax)*A1+(f1/3*alphax)*(A2+2*A3/A4);

end

function sigma11 = sigma11_com(L,d,sigma_s,t,a,sigma_c)

B1 = d^2*sigma_c + 2*(sigma_c + sigma_s)*(t^2 + 2*a*t);

B2 = d^2*sigma_s + 2*(sigma_c + sigma_s)*(t^2 + 2*a*t);

sigma11 = sigma_s/(L+2*t)*(L*B1/B2+2*t);

end

function sigma33 = sigma33_com(L,d,sigma_s,sigma_c,t)

B3 = (L+2*t)*sigma_s*(sigma_c*d^2 + sigma_s*(4*d*t+4*t^2));

B4 = 2*t*sigma_c*d^2+2*t*sigma_s*(4*d*t+4*t^2)+sigma_s*L*(d+2*t)^2;

sigma33 = B3/B4;

end

and alphax is obtained from the function:

function alpha1 = alphax(L,d,t)

alpha1 = d^2*L/((d+2*t)^2*(L+2*t));

end

Todd Flanagan
on 21 Jan 2011

I think the issue is that you are using alphax but not passing parameters in trial0 here:

A4 = sigma_e + ((1-0.14*(d/L))/2)*(sigma11_com - sigma_e);

sigma_e1 = 3*(1-f1/alphax)*A1+(f1/3*alphax)*(A2+2*A3/A4);

end

It should look something like:

A4 = sigma_e + ((1-0.14*(d/L))/2)*(sigma11_com - sigma_e);

sigma_e1 = 3*(1-f1/alphax(L,d,whatever_t_is))*A1+(f1/3*alphax(L,d,whatever_t_is))*(A2+2*A3/A4);

end

This is causing your anonymous function to fail.

Walter Roberson
on 23 Jan 2011

If you are going to pass sigma33_com, sigma1_com, or alphax in to your function, you need to pass their function handle. Otherwise at the point you list them, it is going to try to evaluate them with no inputs and take the first output that results and pass that in to trial0.

x3 = fzero( @(sigma_e) trial0(L, d, sigma_m, f1, @sigma33_com, @sigma11_com, @alphax, sigma_e), 0.02)

There is, however, no good reason to pass the functions in to trial0 at all as long as the they are "visible" as functions to trial0 (e.g., trial0 is in the same file as they are, or the functions are in individual .m files on the matlab path.)

Mike W.
on 22 Jan 2011

Walter Roberson
on 22 Jan 2011

I think we need to see the current version of the code to solve that.

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

Start Hunting!
## 3 Comments

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/223-help-with-fzero-function#comment_119

⋮## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/223-help-with-fzero-function#comment_119

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/223-help-with-fzero-function#comment_120

⋮## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/223-help-with-fzero-function#comment_120

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/223-help-with-fzero-function#comment_121

⋮## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/223-help-with-fzero-function#comment_121

Sign in to comment.