Solving for two variable.

13 Ansichten (letzte 30 Tage)
Sebastian
Sebastian am 10 Sep. 2022
Bearbeitet: Torsten am 10 Sep. 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 Kommentare
Alan Stevens
Alan Stevens am 10 Sep. 2022
Bearbeitet: Alan Stevens am 10 Sep. 2022
What are the equivalents of x and y in your equation? Presumably, y represents I. What does x represent?
Sebastian
Sebastian am 10 Sep. 2022
x=I and y=U

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Alan Stevens
Alan Stevens am 10 Sep. 2022
Bearbeitet: Alan Stevens am 10 Sep. 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 Kommentare
Sebastian
Sebastian am 10 Sep. 2022
Bearbeitet: Sebastian am 10 Sep. 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 am 10 Sep. 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')

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Torsten
Torsten am 10 Sep. 2022
Bearbeitet: Torsten am 10 Sep. 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 Kommentare
Sebastian
Sebastian am 10 Sep. 2022
Bearbeitet: Sebastian am 10 Sep. 2022
I0 and n are both wrong.
I0 = 0.249*10^(-9)
and
n = 1.521
Torsten
Torsten am 10 Sep. 2022
Bearbeitet: Torsten am 10 Sep. 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Linear and Nonlinear Regression finden Sie in Help Center und File Exchange

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by