Solving a non-linear problem for several lines
이전 댓글 표시
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
Walter Roberson
2019년 1월 12일
Bruno Martins
2019년 1월 12일
Walter Roberson
2019년 1월 12일
put the two unknown into a vector and index the vector as needed.
Bruno Martins
2019년 1월 12일
Walter Roberson
2019년 1월 12일
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
2019년 1월 14일
Walter Roberson
2019년 1월 14일
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
2019년 1월 14일
편집: Bruno Martins
2019년 1월 14일
ahmad mohmad
2019년 9월 16일
hello mr. Bruno
colud you help me ih have a such problem
Thanks
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Problem-Based Optimization Setup에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!