what is the wrong wtih the “fsolve” function to solve the problem?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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?
0 commentaires
Réponses (1)
Walter Roberson
le 10 Oct 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 commentaires
Torsten
le 26 Oct 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.
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!