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

1 次查看(过去 30 天)
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?

回答(1 个)

Walter Roberson
Walter Roberson 2015-10-10
@(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 个评论
Torsten
Torsten 2015-10-26
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.

请先登录,再进行评论。

Community Treasure Hunt

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

Start Hunting!

Translated by