# Solving a nonlinear equation

2 views (last 30 days)
Frederik Bjerregaard on 8 Dec 2021
Edited: John D'Errico on 8 Dec 2021
Hi. I have to solve a nonlinear equation over a range of values of a given parameter.
clc; clear;close all;
f = 0.35+0.1;
x0=f^2
r = 0.3:0.3:1.5;
zeta = 0.25;
eps = 1/6;
eqn= @(A)(r.^4.*A.^2)-(2.*r.^2.*A.^2)-(2.*r.^2.*((3.*eps.*A.^4)./4))+(3.*((3.*eps.*A.^4)./4))+(((9.*eps.^2.*A.^6)./16))+(4.*zeta.*r.^2.*A.^2);
Ans=fzero(eqn,x0);
I want the answer to give me a vector for A at the given value for r, but I can't get the code to work.

Abolfazl Chaman Motlagh on 8 Dec 2021
the eqn as you defined is a vector-value multi-variable function. fzero takes a scalar-value single-variable function.
so maybe you have a Writing error for eqn that make it vector value.
f = 0.35+0.1;
x0=f^2;
r = 0.3:0.3:1.5;
zeta = 0.25;
eps = 1/6;
eqn= @(A)(r.^4.*A.^2)-(2.*r.^2.*A.^2)-(2.*r.^2.*((3.*eps.*A.^4)./4))+(3.*((3.*eps.*A.^4)./4))+(((9.*eps.^2.*A.^6)./16))+(4.*zeta.*r.^2.*A.^2);
eqn(rand(1,5))
ans = 1×5
-0.0047 -0.0155 -0.0149 0.0471 0.1364
if you really want to solve the above system of equations you can use minimization functions like fminunc. or use solve for algebraic equations. ( you should change eqn for both of them)
for using fminunc the cost function should be a scalar value function. one easy method to change your eqn is taking norm from function:
eqn_= @(A)norm((r.^4.*A.^2)-(2.*r.^2.*A.^2)-(2.*r.^2.*((3.*eps.*A.^4)./4))+(3.*((3.*eps.*A.^4)./4))+(((9.*eps.^2.*A.^6)./16))+(4.*zeta.*r.^2.*A.^2));
x = fminunc(eqn_,ones(1,5));
Local minimum possible. fminunc stopped because it cannot decrease the objective function along the current search direction.
x
x = 1×5
0.4796 0.8806 0.9109 -0.0000 -0.0000
Y=eqn(x)
Y = 1×5
1.0e+-8 * -0.0519 -0.1379 -0.0523 0.0632 0.0381
norm(eqn(x))
ans = 1.7290e-09
John D'Errico on 8 Dec 2021
Is there a valid reason why you posted the same answer twice? My guess is the site was moving slow, so you reposted it. I deleted the first of your identical answers.