# How to use Fsolve with multiple variables

726 views (last 30 days)

Show older comments

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 Comments

Alan Weiss
on 21 Jan 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

### Accepted Answer

Walter Roberson
on 22 Oct 2013

[x,fval] = fsolve(@(x) Teth3(x, P, H, L), x0);

##### 23 Comments

Alek Yawfimetz
on 18 Apr 2020

I appreciate the help Walter, I had a similar issue and this helped me solve it instantly. Thanks.

### More Answers (4)

safi58
on 21 Nov 2016

in this paper on page 3284, they have used fsolve to solve those equations. see upper right side.

##### 10 Comments

Manuela Gräfe
on 24 Apr 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
on 6 Dec 2016

##### 0 Comments

Manuela Gräfe
on 24 Apr 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.

##### 0 Comments

GUANGHE HUO
on 21 Jan 2022

Edited: Walter Roberson
on 21 Jan 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 Comments

Walter Roberson
on 24 Jan 2022

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.

### See Also

### Community Treasure Hunt

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

Start Hunting!