what is the wrong wtih the “fsolve” function to solve the problem?

1 Ansicht (letzte 30 Tage)
cheng sy
cheng sy am 10 Okt. 2015
Kommentiert: cheng sy am 28 Okt. 2015
the figure is the lightning voltage,if the maxium amplitude of it is Um, the green line
crosses the two points:(t1,90%*Um) and (t2,30%*Um),and it intersect at x-axis and horizontal
line of Um。tf is called wave-front time,and the Tt is the half-tail time。Usuallly,we
suppose the voltage can express as the following equation(also double exponential equation):
u(t)=U*ζ*(exp(-a*t)-exp(-b*t)). Now, we know the tf,Tt and U(the maxium amplitude),
the ζ,a,and b to be solved. this question can be solved by the matlab function fsolve. i
have defined the following fuction in matlab:
%--------------------------------------------------------------------%
function Vc = imp_f(x,tf,Tt,U)
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
% X is the [a;β;ζ;t1;t2]
% a/β/ζ are the parameters in function :i(t)=U*ζ*(exp(-a*t)-exp(-β*t));
% t1/t2/Tt/tf:(t1,90%*Um) and (t2,30%*Um) have the same meaning in the previous figure ,U is voltage crest,kV;
Vc=[tf-(x(4)-x(5))/0.6; % tf=(x(4)-x(5))/0.6
0.3*U-x(3)*(exp(-x(1)*x(5))-exp(-x(2)*x(5))); % cross the point (t2,30%*Um)
0.9*U-x(3)*(exp(-x(1)*x(4))-exp(-x(2)*x(4))); % cross the point (t1,90%*Um)
0.5*U-x(3)*(exp(-x(1)*(Tt+1.5*x(5)-0.5*x(4)))-exp(-x(2)*(Tt+1.5*x(5)-0.5*x(4)))); %cross the point
(Tt+1.5*t2-0.5*t1,50%*Um)
U-x(3)*(exp(-x(1)*log(x(2)/x(1))/(x(2)-x(1)))-exp(-x(2)*log(x(2)/x(1))/(x(2)-x(1))))];
%cross the maximu value point
(log(β/a)/(β-a),Um)
end
then use the following code to find the answer:
%--------------------------------------------------------------------------
tf=1.2; %
Tt=50; %
U=1.0; %
x0=[1;1;1;1;1]; %初值;
[x,fval]=fsolve(@(x) imp_f(x,tf,Tt,U),x0); % Call solver
%---------------------------------------------------------------
MATLAB give the following wrong answer:
%---------------------------------------------------------------
Error using trustnleqn (line 28)
Objective function is returning undefined values at initial point. FSOLVE cannot continue.
Error in fsolve (line 376)
[x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData]=...
Error in l_impluse (line 11)
[x,fval]=fsolve(@(x) imp_f(x,tf,Tt,U),x0); % Call solver
%--------------------------------------------------------------
and i donot know the reason? and how to solve the problem?

Antworten (1)

Walter Roberson
Walter Roberson am 10 Okt. 2015
@(x) imp_f(x,tf,tt,U) references the non-existent variable tt . There is a Tt a few lines earlier in the code but not tt
  5 Kommentare
Torsten
Torsten am 26 Okt. 2015
You divide by x(2)-x(1) which is 0 at the start.
Furthermore, be careful that during iteration, x(2)/x(1) remains positive. Otherwise, log(x(2)/x(1)) will produce complex results.
Best wishes
Torsten.
cheng sy
cheng sy am 28 Okt. 2015
thank you for your remind.

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by