fsolve problem appears regular

3 次查看(过去 30 天)
Hello, I have a system of 2 equations defined in a function file: It takes a vector x =[x1 x2] and gives back F a vector.
function F = stepoli(x)
num = xlsread('constants.xlsx');
lam = num(2,:)*1d-9;
Ai = num(1,:)*1d6;
rg = num(5,:);
m = 39.948*6.02214086d-26;
T = 600;
k = 1.38064852*1d-23;
for i = 1:8
l(i) = (lam(i)^3)/(8*pi)*Ai(i)*rg(i)*sqrt(m/(2*pi*k*T)); %l around 1d-15
end
R = [ 1.4 1.2];
F(1) = 1-l(1)*1d-3*x(1)+l(2)*x(2) - R(1)*(1-l(2)*x(2)*1d-3 +l(1)*x(1) - l(1)*x(1)*l(2)*x(2)*1d-3);
F(2) = 1-l(4)*1d-3*x(2)+l(5)*x(2) - R(2)*(1-l(5)*x(2)*1d-3 +l(4)*x(1) - l(4)*x(1)*l(5)*x(2)*1d-3);
end
Then in a script i have
g = @stepoli;
x0 = [10d15 10d15];
x = fsolve(g,x0)
If as x0 I input a solution, it does say it is one. However, as soon as I start from a very close point, it returns:
No solution found.
fsolve stopped because the problem appears regular as measured by the gradient, but the vector of function values is not near zero as measured by the default value of the function tolerance.
And doesn't do any step. Do you know if the problem comes from this gradient or from elsewhere? Maybe you do have some optimization advices. Thanks for reading.

采纳的回答

John D'Errico
John D'Errico 2017-6-2
How can anyone give you a valid answer if we don't know what is in your variables? What is in num?
My guess is this is a dynamic range problem. Your numbers seem to have a huge range, but double precision arithmetic is pretty limited in that respect. So I would STRONGLY recommend that you look at the computations from the standpoint of 16 digit computations. It may be that a careful scaling of the units in this problem will suffice. Of course, you could always go the symbolic route, and look for solutions that way.
By the way, you should recognize that 10d15 is equivalent to 1d16. Or do you think that you were trying to start at 10^15? You have written the number 10^16, not 15.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Solver Outputs and Iterative Display 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by