How to use Fsolve with multiple variables
Mostrar comentarios más antiguos
Hi. I am trying to solve two non-linear equations using fsolve. Here are my two codes:
-------------
function G=Teth3(x,p,H,L);
g=9.82;
mu=0.0141*g;
G=[H-(x(2)/mu).*(cosh(mu.*(x(1)+p)/x(2))-cosh(mu.*x(1)/x(2))); %function G defines a vector of two functions to be solved
L-(x(2)/mu).*(sinh(mu.*(x(1)+p)/x(2))-sinh(mu.*x(1)/x(2)))];
end
-------------
function F = tethsolve3(p,H,L);
x0=[2;2];
g=9.82;
mu=0.0141*g;
[x,fval]=fsolve(@Teth3,x0,p,H,L);
end
-------------
I want the second one (tethsolve3) to get three inputs p, H, L (which will be used as constants) and solve the first function (Teth3) which is a function of x(vector of 2 variables) and p,H,L. I don't know what format I should use for the Fsolve. Please advise. Thank you very much.
2 comentarios
LAKKIMSETTI SUNANDA
el 1 de Feb. de 2021
Hi. I also have a problem in solving the equations. I have four equations and four unknowns and I have to find those 4 unknown variables. The equations are as follows:
2*Y1*tan(t1_1)+Y2*tan(t2_1)+Y3*tan(t3_1)==0;
2*Y1*tan(t1_3)+Y2*tan(t2_3)+Y3*tan(t3_3)==0;
b1== (t1_1*Y1)+(t2_1*(Y2/2)*((sec(t2_1)^2)/(sec(t1_1)^2)))+(t3_1*(Y3/2)*((sec(t3_1)^2)/(sec(t1_1)^2)));
b3== (t1_3*Y1)+(t2_3*(Y2/2)*((sec(t2_3)^2)/(sec(t1_3)^2)))+(t3_3*(Y3/2)*((sec(t3_3)^2)/(sec(t1_3)^2)));
Here Y1,b1,b3 are known values and the unknown variables are Y2,Y3,l2,l3. The above t1,t2,t3 are in terms of l2 and l3.
t2_1=(2*pi/lambda(1))*l2;
t3_1=(2*pi/lambda(1))*l3;
t2_3=(2*pi/lambda(3))*l2;
t3_3=(2*pi/lambda(3))*l3;
t1_1=(2*pi/lambda(1))*l1;
t1_3=(2*pi/lambda(3))*l1;
Please help me with this. Thank you.
Alan Weiss
el 21 de En. de 2022
I suggest that you ask your question in a new topic rather than reopening an old topic.
That said, have you tried the Problem-Based Workflow for Solving Equations? It is a very natural way of solving equations.
Alan Weiss
MATLAB mathematical toolbox documentation
Respuesta aceptada
Más respuestas (4)
Manuela Gräfe
el 24 de Abr. de 2017
1 voto
Hello umme mumtahina,
please send me an personal message. I am also interested in the solutions of your questions.
Sometimes you just write: "Got it!", but you don't give the final solution. Due to the fact, that this is a public community, you should provide the corresponding answers to your questions.
So please send me ASAP a personal message.
safi58
el 21 de Nov. de 2016
0 votos
in this paper on page 3284, they have used fsolve to solve those equations. see upper right side.
10 comentarios
Walter Roberson
el 21 de Nov. de 2016
fsolve() is completely numeric and so would require that you had specific numeric values for all of the symbols.
The fsolve version of your code would be to first give numeric values to everything except x and then define
f = @(x) [x(1)+[[x(1)-x(4)+1]*cos(x(3))+x(2)*sin(x(3))-1]*cos(k*(m-x(3)))+[[-x(1)+(1/x(4))-1]*sin(x(3))+x(2)*cos((3))]*sin(k*(m-x(3)))/k+(1/x(4));
x(2)+[-[x(1)-(1/x(4)+1)]*cos(x(3))-x(2)*sin(x(3))+1]*k*sin(k*(m-x(3)))+[-x(1)+1/x(4)-1]*sin(x(3))+x(2)*cos(x(3));
[-x(1)+1/x(4)-1]*sin(x(3))+x(2)*cos(x(3))-x(2)-n*m;
[[-x(1)+1/x(4)-1]*(1-cos(x(3)))+x(2)*sin(x(3))-x(2)*x(3)+(n*x(3)^2)/2]*((pri^2*R)/m*sec^2*Z)];
guess = rand(1,4); %or some other starting value
X = fsolve(f, guess);
safi58
el 1 de Dic. de 2016
Editada: Walter Roberson
el 1 de Dic. de 2016
k=0.423;
m=180;
n=0.218;
pri=6;
sec=80;
Z=1.36;R=533.33;
f = @(x) [x(1)+[[x(1)-x(4)+1]*cos(x(3))+x(2)*sin(x(3))-1]*cos(k*(m-x(3)))+[[-x(1)+(1/x(4))-1]*sin(x(3))+x(2)*cos((3))]*sin(k*(m-x(3)))/k+(1/x(4));
x(2)+[-[x(1)-(1/x(4)+1)]*cos(x(3))-x(2)*sin(x(3))+1]*k*sin(k*(m-x(3)))+[-x(1)+1/x(4)-1]*sin(x(3))+x(2)*cos(x(3));
[-x(1)+1/x(4)-1]*sin(x(3))+x(2)*cos(x(3))-x(2)-n*m;
[[-x(1)+1/x(4)-1]*(1-cos(x(3)))+x(2)*sin(x(3))-x(2)*x(3)+(n*x(3)^2)/2]*((pri^2*R)/m*sec^2*Z)];
x0 = [-1 -1 -1 -1]; %or some other starting value
X = fsolve(f, x0);
Hi Walter,
I have run this code but it is showing
Solver stopped prematurely.
fsolve stopped because it exceeded the function evaluation limit,
options.MaxFunEvals = 400 (the default value).
What should I do now?
Walter Roberson
el 1 de Dic. de 2016
options = optimoptions(@fsolve, 'MaxFunEvals', 1000);
X = fsolve(f, x0, options);
safi58
el 1 de Dic. de 2016
its still not working
Walter Roberson
el 1 de Dic. de 2016
If it stopped again saying it was stopping prematurely because of the function evaluation limit and listed the new value that you set, then try again with an even larger value.
If it gave any other message instead please show that message.
safi58
el 1 de Dic. de 2016
I tried with this
options = optimoptions(@fsolve, 'MaxFunEvals',2000);
it is showing
Solver stopped prematurely.
fsolve stopped because it exceeded the iteration limit, options.MaxIter = 400 (the default value).
Walter Roberson
el 1 de Dic. de 2016
options = optimoptions(@fsolve, 'MaxFunEvals', 1000000, 'MaxIter', 1000000);
safi58
el 4 de Dic. de 2016
Editada: Walter Roberson
el 5 de Dic. de 2016
Hi Walter,
Sorry to disturb you again and again.
But I am still having problem.
I have done some changes in equations.
Can you please tell me what should be done now?
f =@(x) [x(1)+[[x(1)-(1/x(4))+1]*cos(x(3))+x(2)*sin(x(3))-1]*cos(k*(m-x(3)))+(1/k)*[[-x(1)+(1/x(4))-1]*sin(x(3))+x(2)*cos(x(3))]*sin(k*(m-x(3)))+(1/x(4));
x(2)+[[-x(1)+(1/x(4))-1]*xos(x(3))-x(2)*sin(x(3))+1]*k*sin(k*(m-x(3)))+[[-x(1)+(1/x(4))-1]*sin(x(3))+x(2)*cos(x(3))]*cos(k*(m-x(3)));
[-x(1)+(1/x(4))-1]*sin(x(3))+x(2)*cos(x(3))-x(2)-n*x(3);
[[[-x(1)+1/x(4)-1]*(1-cos(x(3)))+x(2)*sin(x(3))-x(2)*x(3)+(n*x(3)^2)/2]*((pri^2*R)/m*sec^2*Z)]-1];
for these equations it is showing
Undefined function 'xos' for input arguments of type 'double'.
Error in dcmb (line 10)
f =
[x(1)+[[x(1)-(1/x(4))+1]*cos(x(3))+x(2)*sin(x(3))-1]*cos(k*(m-x(3)))+(1/k)*[[-x(1)+(1/x(4))-1]*sin(x(3))+x(2)*cos(x(3))]*sin(k*(m-x(3)))+(1/x(4));
Error in fsolve (line 217)
fuser = feval(funfcn{3},x,varargin{:});
Error in dcmb_driver (line 4)
X = fsolve(@dcmb, x0, optimset('MaxFunEvals',2000,'MaxIter',2000));
Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.
safi58
el 5 de Dic. de 2016
solved it!!!!!!!!
Manuela Gräfe
el 24 de Abr. de 2017
Hello umme mumtahina,
please send me an personal message. I am also interested in the solutions of your questions.
Sometimes you just write: "Got it!", but you don't give the final solution. Due to the fact, that this is a public community, you should provide the corresponding answers to your questions.
So please send me ASAP a personal message.
safi58
el 6 de Dic. de 2016
0 votos
Hi Walter, after solving these equations i have found the initial condition. Can you please tell me how to draw these waveforms? see page 3247
GUANGHE HUO
el 21 de En. de 2022
Editada: Walter Roberson
el 21 de En. de 2022
for i=1:1:position
global alpha_tspd alpha_trpd beta_d R_pd R_sd Rb_sd T_in
K_sp1=K_mesh_sp(i,1);
K_sp2=K_mesh_sp(i,2);
K_sp3=K_mesh_sp(i,3);
K_rp1=K_mesh_rp(i,1);
K_rp2=K_mesh_rp(i,2);
K_rp3=K_mesh_sp(i,3);
theta_s=Theta_s(i,1);
F=@(x)[ (K_sp1*x(1)*cos(alpha_tspd)-K_rp1*x(4)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp2*x(2)*cos(alpha_tspd)-K_rp2*x(5)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp3*x(3)*cos(alpha_tspd)-K_rp3*x(6)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp1*x(1)+K_sp2*x(2)+K_sp3*x(3))*cos(beta_d)*cos(alpha_tspd)*R_sd-T_in;
x(4)-theta_s*Rb_sd-x(1);
x(5)-theta_s*Rb_sd-x(2);
x(6)-theta_s*Rb_sd-x(3) ];
x0=delta(i,:);
options=optimoptions('fsolve','Algorithm','levenberg-marquardt');
delta(i+1,:)=fsolve(F,x0,options);
end
Hi, above are my code, every time I need to change some variables, but when I run, it shows that no solutions found, fsolve stopped because the last step was ineffective. However, the vector of function
values is not near zero, as measured by the value of the function tolerance.
I do not know why, can someone help me?
8 comentarios
Walter Roberson
el 21 de En. de 2022
As outside observers, we have no reason to believe that there is a solution at all, or that the solution is not complex valued. If we had values for all of the variables we could take a more detailed look.
GUANGHE HUO
el 22 de En. de 2022
Editada: Walter Roberson
el 22 de En. de 2022
position=270;
delta=zeros(position,6);
delta_0=[1e-6 1e-6 1e-6 1e-6 1e-6 1e-6]; % Initial value of delta
delta(1,:)=delta_0;
for i=1:1:position
K_sp1=K_mesh_sp(i,1); K_sp2=K_mesh_sp(i,2); K_sp3=K_mesh_sp(i,3);
K_rp1=K_mesh_rp(i,1); K_rp2=K_mesh_rp(i,2); K_rp3=K_mesh_sp(i,3);
theta_s=Theta_s(i,1);
F=@(x)[ (K_sp1*x(1)*cos(alpha_tspd)-K_rp1*x(4)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp2*x(2)*cos(alpha_tspd)-K_rp2*x(5)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp3*x(3)*cos(alpha_tspd)-K_rp3*x(6)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp1*x(1)+K_sp2*x(2)+K_sp3*x(3))*cos(beta_d)*cos(alpha_tspd)*R_sd-T_in;
x(4)-theta_s*Rb_sd-x(1);
x(5)-theta_s*Rb_sd-x(2);
x(6)-theta_s*Rb_sd-x(3) ];
x0=delta(i,:);
options=optimoptions('fsolve','Algorithm','levenberg-marquardt');
delta(i+1,:)=fsolve(F,x0,options);
end
GUANGHE HUO
el 22 de En. de 2022
Hi, Walter, these are my all variables
GUANGHE HUO
el 22 de En. de 2022
Rb_sd=0.122867515153017
Walter Roberson
el 22 de En. de 2022
clearvars
load K_mesh_sp.mat K_mesh_sp
load K_mesh_rp.mat K_mesh_rp
load Theta_s.mat Theta_s
load alpha_tspd.mat alpha_tspd
load alpha_trpd.mat alpha_trpd
load beta_d.mat beta_d
load K_mesh_sp.mat R_pd %not in file R_pd.mat !
load R_sd.mat R_sd
load T_in.mat T_in
syms X [1 6]
Rb_sd=0.122867515153017;
position=270;
delta=zeros(position,6);
delta_0=[1e-6 1e-6 1e-6 1e-6 1e-6 1e-6]; % Initial value of delta
delta(1,:)=delta_0;
for i=1:1:position
K_sp1=K_mesh_sp(i,1); K_sp2=K_mesh_sp(i,2); K_sp3=K_mesh_sp(i,3);
K_rp1=K_mesh_rp(i,1); K_rp2=K_mesh_rp(i,2); K_rp3=K_mesh_sp(i,3);
theta_s=Theta_s(i,1);
F=@(x)[ (K_sp1*x(1)*cos(alpha_tspd)-K_rp1*x(4)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp2*x(2)*cos(alpha_tspd)-K_rp2*x(5)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp3*x(3)*cos(alpha_tspd)-K_rp3*x(6)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp1*x(1)+K_sp2*x(2)+K_sp3*x(3))*cos(beta_d)*cos(alpha_tspd)*R_sd-T_in;
x(4)-theta_s*Rb_sd-x(1);
x(5)-theta_s*Rb_sd-x(2);
x(6)-theta_s*Rb_sd-x(3) ];
x0=delta(i,:);
options=optimoptions('fsolve','Algorithm','levenberg-marquardt');
T1 = F(X);
sol = solve(T1([1:3 5:7]), X)
T2 = subs(T1(4), sol)
assert(isAlways(T2 == 0, 'unknown', 'true'), 'seventh equation fail')
delta(i+1,:)=fsolve(F,x0,options);
end
You will get seventh equation fail in the first iteration.
The last three equations are of the form Xi - Xj which forces Xi and Xj to be the same. Substitute those equalities into the first three equations and you get equations that are all linear in a single variable and the right hand side of the equation is 0. When a linear multiple of a variable must be equal to 0, then it forces the variable to be equal to 0. So the first three variables must be 0 and the last 3 variables must be the same as the first three variables and so must equal 0 as well. This leaves you with one equation out of the 7, and if you substitute in all 0 for the variables there, you get something that cannot possibly be 0.
So, at least for the first round, the equations are inconsistent.
GUANGHE HUO
el 23 de En. de 2022
So, my problem is my equation, my equations must be checked
Walter Roberson
el 24 de En. de 2022
x(4)-theta_s*Rb_sd-x(1);
x(5)-theta_s*Rb_sd-x(2);
x(6)-theta_s*Rb_sd-x(3) ];
If theta_s happened to be 0, then those force equality relationships.
If theta_s were non-zero then those force simple linear relationships that you can substitute into the first four equations.
syms x [1 6]
syms alpha_trpd alpha_tspd beta_d K_rp1 K_rp2 K_rp3 K_sp1 K_sp2 K_sp3 R_pd R_sd Rb_sd T_in theta_s
eqn = [ (K_sp1*x(1)*cos(alpha_tspd)-K_rp1*x(4)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp2*x(2)*cos(alpha_tspd)-K_rp2*x(5)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp3*x(3)*cos(alpha_tspd)-K_rp3*x(6)*cos(alpha_trpd))*cos(beta_d)*R_pd;
(K_sp1*x(1)+K_sp2*x(2)+K_sp3*x(3))*cos(beta_d)*cos(alpha_tspd)*R_sd-T_in;
x(4)-theta_s*Rb_sd-x(1);
x(5)-theta_s*Rb_sd-x(2);
x(6)-theta_s*Rb_sd-x(3) ]
sol = solve(eqn([1:3 5:end]), x)
eqn4 = subs(eqn(4), sol)
In order for the system of equations to hold, that eqn4 would have to hold. It is independent of the x values: if it holds then there is a solution to the system, and if it does not hold then there is no solution to the system.
Categorías
Más información sobre Mathematics en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

