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 provided, such as I=1200 and k_f=6.7*10^7. The user outlines their approach, including defining functions and calculating partial derivatives to set up the Jacobian matrix. The MATLAB code provided iteratively solves for c, s, and q until convergence is achieved at a tolerance of 10^-4.

PREREQUISITES
  • Understanding of the Newton-Raphson method for solving non-linear equations
  • Familiarity with MATLAB programming and syntax
  • Knowledge of matrix operations and Jacobian matrices
  • Basic concepts of partial derivatives in multivariable calculus
NEXT STEPS
  • Study MATLAB's built-in functions for numerical methods, such as fsolve
  • Learn about optimization techniques in MATLAB for non-linear systems
  • Explore advanced topics in numerical analysis, focusing on convergence criteria
  • Investigate error handling and debugging techniques in MATLAB code
USEFUL FOR

This discussion is beneficial for MATLAB users, particularly those working in engineering or applied mathematics, who need to solve non-linear systems of equations efficiently. It is also useful for students and professionals looking to enhance their numerical analysis skills.

ra_forever8
Messages
106
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 three 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}
Solve the above systems of equation to get the values for $c,s$ and $q$? $tolerence= 10^{-4}$. initail values:$ (c_0,s_0,q_0)=0$.
The values for the parameters are:
$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}$=>
This is what I think to do in matlab, but i don't know how to start the code in matlab. I have define the function for 3 systems of equation.\begin{equation} f(c,s,q)=> c[\alpha I+ k_f+k_d+k_ns+k_p(1-q)]-I \alpha =0 \end{equation}
\begin{equation} g(c,s,q)=>s[\lambda_b c P_C +\lambda_r (1-q)]- \lambda_b c P_C =0 \end{equation}
\begin{equation} h(c,s,q)=>q[\gamma +c k_p \frac{P_C}{P_Q}]- c k_p \frac{P_C}{P_Q}=0 \end{equation}now, i have to do partial derivatives of $f(c,s,q), g(c,s,q), h(c,s,q)$ in terms of $c, s, q$.Then set up the matrix $J$ and do the inverse matrix ($J^{-1}$). And apply the netwon iteration method, using $(c,s,q)= (c_0,s_0,q_0) - J^{-1} (f,g,h)$.I need to do some iterations until it converges to $tolerence= 10^{-4}$.Can please help me how to do in MATLAB with the MATLAB code. I am beginner in matlab.
 
Physics news on Phys.org
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.

=>
can someone please check my code, there are no errors. did I got correct values for c,s and q? Thanks in advance.
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
 
Last edited:

Similar threads

Replies
1
Views
4K
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 9 ·
Replies
9
Views
4K
Replies
1
Views
3K
Replies
1
Views
1K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 60 ·
3
Replies
60
Views
4K