How can I make the algorithm finish the iterations with the specified tolerance?

조회 수: 1 (최근 30일)
Martin
Martin 2014년 9월 30일
편집: Matt J 2014년 9월 30일
Hi all, I am trying to use fsolve for a problem I need to solve.
fsolve usually get very close to the solution but not close enough.
The following message is shown:
"fsolve stopped because it exceeded the function evaluation limit, options.MaxFunEvals = 1000 (the selected value)."
I tried to use much larger number of iteration, but it did not change anything. I am getting a value that is very close to the exact solution, but not close enough.
This is the code of the function:
function [ f_eq ] = system_eq( theta, b )
f_eq = [ (3*cos(theta(1))*(3555*cos(theta(2) + theta(3)) - 3297*sin(theta(2) + theta(3) + theta(4)) + 2500*cos(theta(2))))/50 - b(1);
(3*sin(theta(1))*(3555*cos(theta(2) + theta(3)) - 3297*sin(theta(2) + theta(3) + theta(4)) + 2500*cos(theta(2))))/50 - b(2);
(9891*cos(theta(2) + theta(3) + theta(4)))/50 + (2133*sin(theta(2) + theta(3)))/10 + 150*sin(theta(2)) + 746/25 - b(3);
theta(4) + b(4)];
end
This is how I call the functin:
x0=[0 0 0 0];
b = [150 200 40 0];
tmp = 1.57*(580*580-b(1)*b(1)-b(2)*b(2)-b(3)*b(3)) / (580*580);
b(4) = tmp;
f = @(x0) system_eq(x0, b);
options = optimoptions('fsolve','Display','iter','FunValCheck','on', 'MaxFunEvals',1000, 'TolX', 0.0001);
jointangles = fsolve(f, x0, options)
How can I make the algorithm finish the iterations with the specified tolerance.
Thank you in advance,
Martin

답변 (1개)

SK
SK 2014년 9월 30일
편집: SK 2014년 9월 30일
Just as you have added the tag, "iterative solutions oscilate around the exact solution" yourself, this may be what is happening. Did you step through the debugger to check if that is indeed the case?
Having said that, did you notice that if you divide equation (2) by equation (1), you get:
tan( theta(1) ) = b(2)/b(1)
So unless there is a typo in your post, you can already calculate theta(1) manually. In fact after that you could probably solve the equations by hand.
In addition, why bother adding the last equation (eq # 4), when you already know that theta(4) = -b(4) ? You really have two equations in two unknowns that will probably boil down to two algebraic equations in cos(theta(2)) and cos(theta(3)).

카테고리

Help CenterFile Exchange에서 Time Series에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by