Solving a non-linear problem for several lines
Afficher commentaires plus anciens
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!
9 commentaires
Walter Roberson
le 12 Jan 2019
Bruno Martins
le 12 Jan 2019
Walter Roberson
le 12 Jan 2019
put the two unknown into a vector and index the vector as needed.
Bruno Martins
le 12 Jan 2019
Walter Roberson
le 12 Jan 2019
objective =@(xx) [f1(xx(1),xx(2)), f2(xx(1), xx(2))]
vector input indexed as needed in two expression in a list .
Bruno Martins
le 14 Jan 2019
Walter Roberson
le 14 Jan 2019
we cannot tell without access to your data. For example A might be the wrong size.
Use
dbstop if caught error
to debug.
Bruno Martins
le 14 Jan 2019
Modifié(e) : Bruno Martins
le 14 Jan 2019
ahmad mohmad
le 16 Sep 2019
hello mr. Bruno
colud you help me ih have a such problem
Thanks
Réponses (0)
Catégories
En savoir plus sur Symbolic Math Toolbox dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!