Having problems with lsqnonlin function

1 次查看(过去 30 天)
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 个评论
Andrew Newell
Andrew Newell 2011-7-17
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".
Francisco
Francisco 2011-7-18
Hey Andrew,
I am varying several parameters, actually four! :) Which may too many for one single equation, but I guess it's worth trying!! ;) I am fitting the values of J and V to the equation by varying the values of L.
Francisco

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2011-7-17
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 个评论
Walter Roberson
Walter Roberson 2011-7-18
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.
Francisco
Francisco 2011-8-5
Awesome guys, I love MatLab now even more!! :)

请先登录,再进行评论。

更多回答(0 个)

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by