Is the following algorithm to solve non-linear equations in complex variable consistent?
Show older comments
Dear users,
In order to solve the following equation((Z1/(ro_l*sqrt(G)))*((1-R).^2)* sqrt(1+0.25*(((ro_l*sqrt(G))/Z1)-(Z1/(ro_l*sqrt(G)))).^2*(sin(k*L)).^2) - 1=0) with respect to the complex variable G I have implemented this simple algorithm: function solveeqs()
guess=[1+i];
options = optimset('MaxFunEvals',1000000,'MaxIter',100000);
[result,fval,exit,output]=fsolve(@eqns,guess,options);
result
fval
eqns(guess)
output
end
function fcns=eqns(z)
G=z(1);
ro_s=2700; %insert density of the solid in kg/m3
cs= 3000;
Z1= ro_s*cs;
R= 0.995+i;
ro_l=1000;
om=10*10^6;
k=om/cs;
L=100*10^-6;
Z2=ro_l*sqrt(G);
fcns(1)= (Z1/Z2)*((1-R).^2) sqrt(1+0.25((Z2/Z1)-(Z1/Z2)).^2*(sin(k*L)).^2) - 1;
end
the result is the following:
Optimizer appears to be converging to a minimum that is not a root: Sum of squares of the function values is > sqrt(options.TolFun). Try again with a new starting point.
result =
2.7429e+004 -3.8961e+003i
fval =
-0.0182 - 0.0192i %result at last iteration
ans =
-5.2902e+003 +2.1171e+003i % first iteration result with guess value
output =
iterations: 78
funcCount: 158
algorithm: 'trust-region dogleg'
firstorderopt: 8.8405e-007
message: [1x169 char]
The message error rises because the solution obtained at the last iteration (the 78th) is of the order of magnitude 1 while this algorithm is consistent with a solution of the order of 10^-6. The doubt I have is: do you think this algorithm is consistent? working with complex number in fact I fear that matlab is not able to find a solution closer to the 0.
Is there a better way to threat this problem? (any other function or algorithm to threat with complex variable would be really usefull).
Accepted Answer
More Answers (0)
Categories
Find more on Systems of Nonlinear Equations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!