### Translated by

이 페이지의 내용은 영어에서 자동 번역되었습니다. 자동 번역 기능을 해제하려면 "<a class="turn_off_mt" href="#">여기</a>"를 클릭하십시오.

## Solving a non-linear problem for several lines

### Bruno Martins (view profile)

on 12 Jan 2019
Latest activity Edited by Bruno Martins

### Bruno Martins (view profile)

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!

Bruno Martins

### Bruno Martins (view profile)

on 14 Jan 2019
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)
Error in Floating_standard (line 67)
xx = fsolve(objectiveVI,x0);
Is my structure wrong? I cannot seem to solve the error.
Walter Roberson

### Walter Roberson (view profile)

on 14 Jan 2019
Use
dbstop if caught error
to debug.
Bruno Martins

### Bruno Martins (view profile)

on 14 Jan 2019
I got the code finished finally! Thanks a lot for the help, Walter.

R2018b