1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Newton-Raphson Method for Non-linear System of 3 variables in Matlab

  1. Jun 17, 2014 #1


    User Avatar
    Gold Member

    I am trying to solve 3 non-linear system of 3 variables using the newton-raphson method in matlab. Here are the 3 non-linear equations:

    \begin{equation} c[\alpha I+ k_f+k_d+k_ns+k_p(1-q)]-I \alpha =0 \end{equation}
    \begin{equation} s[\lambda_b c P_C +\lambda_r (1-q)]- \lambda_b c P_C =0 \end{equation}
    \begin{equation} q[\gamma +c k_p \frac{P_C}{P_Q}]- c k_p \frac{P_C}{P_Q}=0 \end{equation}

    I need to find the values of c,s, and q using the newton-raphson method.

    This is my matlab code :

    Code (Text):
     format long
     %values of parameters
        k_f= 6.7*10.^7;
        k_d= 6.03*10.^8;
        lambda_b= 0.0087;
        lambda_r =835;
        gamma =2.74;
        alpha =1.14437*10.^-3;
        P_C= 3 * 10.^(11);
        P_Q= 2.87 * 10.^(10);    
    tol = 10.^-4;  %tol is a converge tolerance    
    %initial guess or values
      iter= 0; %iterations
      xnew =[c;s;q];
      xold = zeros(size(xnew));
      while norm(xnew - xold) > tol
          iter= iter + 1;
          xold = xnew;      % update c, s, and q
          c = xold(1);
          s = xold(2);
          q = xold(3);
    %Defining the functions for c,s and q.
          f = c * (alpha*I + k_f + k_d + k_n * s + k_p*(1-q))-I *alpha;
          g = s * (lambda_b * c* P_C + lambda_r *(1-q))- lambda_b* c * P_C;
          h = q * ( gamma + c * k_p *(P_C / P_Q))- (c * k_p * (P_C / P_Q));    

    %Partial derivatives in terms of c,s and q.
          dfdc = alpha*I + k_f + k_d + k_n * s + k_p*(1-q);
          dfds = k_n *c ;
          dfdq = - k_p *c;      
          dgdc = lambda_b * P_C *(s-1);
          dgds = lambda_b * c* P_C + lambda_r *(1-q);
          dgdq = - lambda_r * s;      
          dhdc = k_p *(P_C / P_Q)*(q-1);
          dhds = 0;
          dhdq = gamma + c * k_p *(P_C / P_Q);    
           %Jacobian matrix
          J = [dfdc dfds dfdq; dgdc dgds dgdq; dhdc dhds dhdq];    
          % Applying the Newton-Raphson method
          xnew = xold - J\[f;g;h];
          disp(sprintf('iter=%6.15f,  c=%6.15f,  s=%6.15f, q=%6.15f', iter,xnew));
    can someone please check my code, there are no errors but did i got accurate values of c,s, and q?. Thanks in advance.
    Last edited: Jun 17, 2014
  2. jcsd
  3. Jun 17, 2014 #2


    User Avatar
    Science Advisor

    I'm not a Matlab expert, and I didn't check your code in detail, but clearly your definition of the Jacobian is wrong.

    You have: J = [dfdc dfds dfds; dgds dgds dgds; dhds dhds dhds];

    You want: J = [dfdc dfds dfdq; dgdc dgds dgdq; dhdc dhds dhdq];
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted

Similar Discussions: Newton-Raphson Method for Non-linear System of 3 variables in Matlab