Solving for two variable.

13 visualizaciones (últimos 30 días)
Sebastian
Sebastian el 10 de Sept. de 2022
Editada: Torsten el 10 de Sept. de 2022
I have:
clearclc
x=[7.53*10^(-5) 3.17*10^(-4) 1.07*10^(-3) 3.75*10^(-3) 1.35*10^(-2) 4.45*10^(-2) 1.75*10^(-1) 5.86*10^(-1)];
y=[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85];
but I need do find n and I0 from:
I = I0 * e^( (q*U)/(n*k*T) )
I already know q, U, k and T.
  2 comentarios
Alan Stevens
Alan Stevens el 10 de Sept. de 2022
Editada: Alan Stevens el 10 de Sept. de 2022
What are the equivalents of x and y in your equation? Presumably, y represents I. What does x represent?
Sebastian
Sebastian el 10 de Sept. de 2022
x=I and y=U

Iniciar sesión para comentar.

Respuesta aceptada

Alan Stevens
Alan Stevens el 10 de Sept. de 2022
Editada: Alan Stevens el 10 de Sept. de 2022
In that case one way is to take logs of both sides to get:
log(I) = log(I0) + q/(n*k*T)*U
then do a best-fit straight line to the data (use log(x)) and get log(I0) from the intercept and q/(n*k*T) from the slope, from which yoiu can then get I0 and n.
  4 comentarios
Sebastian
Sebastian el 10 de Sept. de 2022
Editada: Sebastian el 10 de Sept. de 2022
I have q = 1.60*10^(-19), k=1.38*10^(-23) and t=300
I get n = 1.5966
using n=(q*y)/(k*t*(log(x)-log(I0)))
the correct n is 1.521
Torsten
Torsten el 10 de Sept. de 2022
x=[7.53*10^(-5) 3.17*10^(-4) 1.07*10^(-3) 3.75*10^(-3) 1.35*10^(-2) 4.45*10^(-2) 1.75*10^(-1) 5.86*10^(-1)];
y=[0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85];
% You said x = I and U = y so
p=polyfit(y,log(x),1);
f=polyval(p,y);
figure(1)
plot(y,log(x),'o',y,f,'-'), grid
xlabel('U'),ylabel('logI')
% Intercept is p(2), slope is p(1)
I0 = exp(p(2));
q_on_nkT = p(1); % You need to rearrange this to get n, using
% your known values for q, k and T
q = 1.60*10^(-19);
k = 1.38*10^(-23);
T = 300;
n = q/(k*T*q_on_nkT);
disp(I0)
2.4861e-10
disp(n)
1.5206
figure(2)
plot(y,x,'o',y,I0*exp(q/(k*T)*y/n),'-'), grid
xlabel('U'),ylabel('I')

Iniciar sesión para comentar.

Más respuestas (1)

Torsten
Torsten el 10 de Sept. de 2022
Editada: Torsten el 10 de Sept. de 2022
I = [7.53*10^(-5) 3.17*10^(-4) 1.07*10^(-3) 3.75*10^(-3) 1.35*10^(-2) 4.45*10^(-2) 1.75*10^(-1) 5.86*10^(-1)];
U = [0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85];
q = 1.60*10^(-19);
k = 1.38*10^(-23) ;
T = 300;
value = q/(k*T);
fun = @(I0,n) I - I0 * exp( value * U / n );
p0 = [1 ; 10]; % Initial guess for I0 and n
options = optimset('TolX',1e-10,'TolFun',1e-10,'MaxFunEvals',100000,'MaxIter',100000);
sol = lsqnonlin(@(p)fun(p(1),p(2)),p0,[],[],options);
Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance.
format long
I0 = sol(1)
I0 =
4.840384083194344e-10
n = sol(2)
n =
1.570628124624527
hold on
plot(U,I,'o')
plot(U,I0 * exp( value * U / n ))
grid
hold off
  4 comentarios
Sebastian
Sebastian el 10 de Sept. de 2022
Editada: Sebastian el 10 de Sept. de 2022
I0 and n are both wrong.
I0 = 0.249*10^(-9)
and
n = 1.521
Torsten
Torsten el 10 de Sept. de 2022
Editada: Torsten el 10 de Sept. de 2022
No, you are wrong.
Applying log to your equation distorts the fitting.
You must fit I0*exp(value * U / n) against U to get unbiased estimates for your parameters.
Fitting log(I0) + value/n * U against log(U) only gives an approximation for I0 and n.

Iniciar sesión para comentar.

Categorías

Más información sobre Linear and Nonlinear Regression en Help Center y File Exchange.

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by