MATLAB Answers

0

Solving a non-linear problem for several lines

Asked by Bruno Martins on 12 Jan 2019
Latest activity Edited by Bruno Martins on 14 Jan 2019
Hello!
I'm trying to solve non linear equations for 8760 lines, meaning each line has a non-linear equation, all the vectors are of the size (8760,1). The code is below:
% Model start
Vwind_low = data(:,4)*0.51;
T_water = mi + ((alpha-mi)./(1+exp(gamma*(beta-data(:,3)))));
Tcell = 1.8081+0.9282*data(:,3)+0.021*data(:,2)-1.221*Vwind_low+0.0246*T_water;
TcellK = Tcell+273.15;
Isc = Isc_ref*data(:,2)/G_ref;
A = A_ref*TcellK/T_STC;
Ebg = 1.12*(1-0.0002677*(TcellK-T_STC));
Io = Io_ref*((TcellK/298.15).^3).*exp((1/k)*((1.12/T_STC)-(Ebg./TcellK)));
% Objective function
fun = @myfun
x0 = ones(8760,1)*39; % Initial guess is 39
for i=1:8760
x(i) = fsolve(fun,x0);
end
My myfun file is below:
function F = myfun (x)
for j=1:8760
F = exp(x(i)./A(j)) - ((Isc(j)./Io(j) + 1)./(1 + x(i)./A(j)));
end
My question is: the non-linear equation depends on the parameters A, Isc and Io that I calculated in the main code. How do I call these calculated parameters to the function?
Also, is this the way you guys would solve this problem? Is there another way?
Thank you!

  8 Comments

Hello Walter,
I implemented what you said as follows (the formulas are big, but whatever)
x0=[39; 9];
Vmp=zeros(8760,1);
Imp=zeros(8760,1);
for i=1:8760
%x(1)=vmp, x(2)=imp
objectiveVI = @(xx) [xx(2)+xx(1)*(-(1/Rsh(i))-((Rsh(i)*Isc(i)-Voc(i)+Rs*Isc(i))/(A(i)*Rsh(i)))*exp((xx(1)+Rs*xx(2)-Voc(i))/A(i))/((1+(Rs/Rsh(i))+Rs*(Rsh(i)*Isc(i)-Voc(i)+Rs*Isc(i))/(A(i)*Rsh(i)))*exp((xx(1)+Rs*xx(2)-Voc(i))/A(i)))), -xx(2)+ Isc(i) - ((Isc(i) - (Voc(i)-Rs*Isc(i))/Rsh(i))*exp((xx(1)+Rs*xx(2)-Voc(i))/A(i))) - ((xx(1)+Rs*xx(2)-Rs*Isc(i))/Rsh(i))];
xx = fsolve(objectiveVI,x0);
Vmp(i)=xx(1);
Imp(i)=xx(2);
end
Although it is returning the following error:
Error using trustnleqn (line 28)
Objective function is returning undefined values at initial point. FSOLVE cannot continue.
Error in fsolve (line 408)
trustnleqn(funfcn,x,verbosity,gradflag,options,defaultopt,f,JAC,...
Error in Floating_standard (line 67)
xx = fsolve(objectiveVI,x0);
Is my structure wrong? I cannot seem to solve the error.
we cannot tell without access to your data. For example A might be the wrong size.
Use
dbstop if caught error
to debug.
I got the code finished finally! Thanks a lot for the help, Walter.
PS.: I can't find where to accept your answer!

Sign in to comment.

Products


Release

R2018b

0 Answers


Translated by