Having problems with lsqnonlin function
    3 views (last 30 days)
  
       Show older comments
    
Hello guys, I have an equation I am trying to fit to voltage and current. The problem that I have is that the equation has the current (Jcal) in both sides of the equation and I can't simplify the equation. Is there a way to bypass this problem and have MatLab fit the equation to data? I have four unknowns and here is what the program looks like.
    J=current(1,:);   
    V=voltage(1,:);
    q=1.60e-19; % C
    k=1.38e-23; % m2 Kg s-2 K-1
    T=298; % Kelvin
    L0=[2 0.1 0.1 0.1];
    L=lsqnonlin('recfun',L0);
Jcal=L(4)/(L(4)+L(3))*(L(2)*(exp(q*(V-Jcal*L(3))/L(1)*k*T)-1)+V/L(4));
Thanks,
Francisco
2 Comments
  Andrew Newell
      
 on 17 Jul 2011
				To fit an equation to data, you need to have some parameters that you can vary. But as far as I can tell from the above code, all the parameters are fixed - unless there is something I need to know about "recfun".
Accepted Answer
  Walter Roberson
      
      
 on 17 Jul 2011
        For whatever it is worth,
Jcal = (L(1)*(L(4)+L(3))*LambertW(q*k*T*L(3)*L(2)*L(4)*exp(T*(L(2)*L(4)*L(3)+V*L(4))*q*k/L(1)/(L(4)+L(3)))/L(1)/(L(4)+L(3))) - q*k*T*L(3)*(-V+L(2)*L(4)))/q/k/T/L(3)/(L(4)+L(3))
4 Comments
  Walter Roberson
      
      
 on 18 Jul 2011
				Yes, solved in the way Andrei indicates.
LembertW is a non-algebraic function suitable for solving y*exp(y)=x. It works well over a limited class of equations, but it doesn't take much of a tweak of the equation before it is unsuitable.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


