help with fzero function

Illustration
Sophia - 2020-11-17T11:17:49+00:00
Question: help with fzero function

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

Expert Answer

Profile picture of Neeta Dsouza Neeta Dsouza answered . 2025-11-20

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.


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!