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

Click For Summary
SUMMARY

The discussion focuses on solving a system of three non-linear equations using the Newton-Raphson method in MATLAB. The equations involve variables c, s, and q, with specific parameters defined, such as I, k_f, k_d, k_n, and others. A MATLAB code snippet is provided, which includes the calculation of the Jacobian matrix. A critical error in the Jacobian definition is identified, where the user mistakenly repeated the same derivative instead of using the correct ones for each variable.

PREREQUISITES
  • Understanding of the Newton-Raphson method for solving non-linear equations
  • Familiarity with MATLAB programming and syntax
  • Knowledge of Jacobian matrices and their role in numerical methods
  • Basic concepts of non-linear systems and their mathematical representation
NEXT STEPS
  • Review MATLAB's documentation on the Newton-Raphson method
  • Learn about Jacobian matrix construction in numerical analysis
  • Explore error handling and debugging techniques in MATLAB
  • Investigate alternative methods for solving non-linear systems, such as the Broyden's method
USEFUL FOR

Mathematics students, engineers, and researchers working with non-linear systems in MATLAB, as well as anyone looking to improve their numerical analysis skills.

wel
Gold Member
Messages
36
Reaction score
0
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:
 format long
    clear; 
  
 %values of parameters
    I=1200;
    k_f= 6.7*10.^7;
    k_d= 6.03*10.^8; 
    k_n=2.92*10.^9; 
    k_p=4.94*10.^9;
    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
  c=1; 
  s=0.015;
  q=0.98; 
  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)); 
  end
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:
Physics news on Phys.org
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];
 
  • Like
Likes   Reactions: 1 person

Similar threads

Replies
1
Views
4K
  • · Replies 9 ·
Replies
9
Views
4K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
4K
Replies
1
Views
1K
  • · Replies 21 ·
Replies
21
Views
3K
Replies
1
Views
4K
Replies
6
Views
3K