How to solve a non-linear equation system as function handle with fsolve?

8 次查看(过去 30 天)
Hello. I have been trying for long while to use the function fsolve to solve a non-linear equation system without success. This nonlinear equation system is basically a huge symbolic 12x1 column vector named ec with 12 equations built with 6 symbolic variables: q1,q2,...,q6.
I converted this vector ec into a function handle to be able to insert it into fsolve. However, this solution keeps issuing errors, and I have reached a point in which I do not know what to do.
The examples on the internet always include an external function with the non-linear equation system typed directly on it. I just cannot do this, because I need to do previously some symbolic operations to build ec. The values of ec and q are:
ec =
sin(q6)*(cos(q1)*cos(q2)*sin(q3)*sin(q4) - cos(q4)*sin(q1) + cos(q1)*cos(q3)*sin(q2)*sin(q4)) - cos(q6)*(cos(q2 + q3)*cos(q1)*sin(q5) + cos(q5)*sin(q1)*sin(q4) + cos(q1)*cos(q2)*cos(q4)*cos(q5)*sin(q3) + cos(q1)*cos(q3)*cos(q4)*cos(q5)*sin(q2)) - 3097002709122497/18014398509481984
cos(q6)*(cos(q1)*cos(q4) + cos(q2)*sin(q1)*sin(q3)*sin(q4) + cos(q3)*sin(q1)*sin(q2)*sin(q4)) + sin(q6)*(cos(q2 + q3)*sin(q1)*sin(q5) - cos(q1)*cos(q5)*sin(q4) + cos(q2)*cos(q4)*cos(q5)*sin(q1)*sin(q3) + cos(q3)*cos(q4)*cos(q5)*sin(q1)*sin(q2)) - 6124274932042799/36028797018963968
- sin(q2 + q3)*cos(q5) - cos(q2 + q3)*cos(q4)*sin(q5) - 139701203459709/140737488355328
70*cos(q1) + 360*cos(q1)*sin(q2) - 65*sin(q1)*sin(q4)*sin(q5) + 380*cos(q1)*cos(q2)*cos(q3) - 380*cos(q1)*sin(q2)*sin(q3) + 65*cos(q1)*cos(q2)*cos(q3)*cos(q5) - 65*cos(q1)*cos(q5)*sin(q2)*sin(q3) - 65*cos(q1)*cos(q2)*cos(q4)*sin(q3)*sin(q5) - 65*cos(q1)*cos(q3)*cos(q4)*sin(q2)*sin(q5) + 19869/50
sin(q6)*(cos(q1)*cos(q4) + cos(q2)*sin(q1)*sin(q3)*sin(q4) + cos(q3)*sin(q1)*sin(q2)*sin(q4)) - cos(q6)*(cos(q2 + q3)*sin(q1)*sin(q5) - cos(q1)*cos(q5)*sin(q4) + cos(q2)*cos(q4)*cos(q5)*sin(q1)*sin(q3) + cos(q3)*cos(q4)*cos(q5)*sin(q1)*sin(q2)) + 2202239090516653/2251799813685248
cos(q2 + q3)*cos(q6)*sin(q4) - sin(q6)*(sin(q2 + q3)*sin(q5) - cos(q2 + q3)*cos(q4)*cos(q5)) + 7591943296130745/288230376151711744
cos(q2 + q3)*cos(q1)*cos(q5) - sin(q5)*(sin(q1)*sin(q4) + cos(q1)*cos(q2)*cos(q4)*sin(q3) + cos(q1)*cos(q3)*cos(q4)*sin(q2)) - 102014544375725/18014398509481984
70*sin(q1) + 360*sin(q1)*sin(q2) - 380*sin(q1)*sin(q2)*sin(q3) + 380*cos(q2)*cos(q3)*sin(q1) + 65*cos(q1)*sin(q4)*sin(q5) + 65*cos(q2)*cos(q3)*cos(q5)*sin(q1) - 65*cos(q5)*sin(q1)*sin(q2)*sin(q3) - 65*cos(q2)*cos(q4)*sin(q1)*sin(q3)*sin(q5) - 65*cos(q3)*cos(q4)*sin(q1)*sin(q2)*sin(q5) - 1563/20
cos(q6)*(sin(q2 + q3)*sin(q5) - cos(q2 + q3)*cos(q4)*cos(q5)) + cos(q2 + q3)*sin(q4)*sin(q6) - 2129854249224409/18014398509481984
cos(q6)*(cos(q1)*cos(q2)*sin(q3)*sin(q4) - cos(q4)*sin(q1) + cos(q1)*cos(q3)*sin(q2)*sin(q4)) + sin(q6)*(cos(q2 + q3)*cos(q1)*sin(q5) + cos(q5)*sin(q1)*sin(q4) + cos(q1)*cos(q2)*cos(q4)*cos(q5)*sin(q3) + cos(q1)*cos(q3)*cos(q4)*cos(q5)*sin(q2)) - 8872946535830847/9007199254740992
cos(q2 + q3)*cos(q5)*sin(q1) - sin(q5)*(cos(q2)*cos(q4)*sin(q1)*sin(q3) - cos(q1)*sin(q4) + cos(q3)*cos(q4)*sin(q1)*sin(q2)) - 8718732974408059/72057594037927936
360*cos(q2) - 380*cos(q2)*sin(q3) - 380*cos(q3)*sin(q2) - 65*cos(q2)*cos(q5)*sin(q3) - 65*cos(q3)*cos(q5)*sin(q2) - 65*cos(q2)*cos(q3)*cos(q4)*sin(q5) + 65*cos(q4)*sin(q2)*sin(q3)*sin(q5) - 39571/100
q =
q1
q2
q3
q4
q5
q6
And here is the code.
funec = matlabFunction(ec); % Converts the symbolic column vector into a function handle
qini = zeros(1,6); % Initial guess
ci = fsolve(funec(q.'),qini); % fsolve with the function handle, unknown variables and initial guess
% done many variations here, none of them worked
The main error shown by MATLAB is:
Not enough input arguments.
Error in
symengine>@(q1,q2,q3,q4,q5,q6)[sin(q6).*(-cos(q4).*sin(q1)+cos(q1).*cos(q2).*sin(q3).*sin(q4)+cos(q1).*cos(q3).*sin(q2).*sin(q4))-cos(q6).*(cos(q2+q3).*cos(q1).*sin(q5)+cos(q5).*sin(q1).*sin(q4)+cos(q1).*cos(q2).*cos(q4).*cos(q5).*sin(q3)+cos(q1).*cos(q3).*cos(q4).*cos(q5).*sin(q2))-1.719181857497141e-1;cos(q6).*(cos(q1).*cos(q4)+cos(q2).*sin(q1).*sin(q3).*sin(q4)+cos(q3).*sin(q1).*sin(q2).*sin(q4))+sin(q6).*(cos(q2+q3).*sin(q1).*sin(q5)-cos(q1).*cos(q5).*sin(q4)+cos(q2).*cos(q4).*cos(q5).*sin(q1).*sin(q3)+cos(q3).*cos(q4).*cos(q5).*sin(q1).*sin(q2))-1.699827759672145e-1;-sin(q2+q3).*cos(q5)-cos(q2+q3).*cos(q4).*sin(q5)-9.926367529524001e-1;cos(q1).*7.0e1+cos(q1).*sin(q2).*3.6e2-sin(q1).*sin(q4).*sin(q5).*6.5e1+cos(q1).*cos(q2).*cos(q3).*3.8e2-cos(q1).*sin(q2).*sin(q3).*3.8e2+cos(q1).*cos(q2).*cos(q3).*cos(q5).*6.5e1-cos(q1).*cos(q5).*sin(q2).*sin(q3).*6.5e1-cos(q1).*cos(q2).*cos(q4).*sin(q3).*sin(q5).*6.5e1-cos(q1).*cos(q3).*cos(q4).*sin(q2).*sin(q5).*6.5e1+3.9738e2;sin(q6).*(cos(q1).*cos(q4)+cos(q2).*sin(q1).*sin(q3).*sin(q4)+cos(q3).*sin(q1).*sin(q2).*sin(q4))-cos(q6).*(cos(q2+q3).*sin(q1).*sin(q5)-cos(q1).*cos(q5).*sin(q4)+cos(q2).*cos(q4).*cos(q5).*sin(q1).*sin(q3)+cos(q3).*cos(q4).*cos(q5).*sin(q1).*sin(q2))+9.77990617608461e-1;-sin(q6).*(sin(q2+q3).*sin(q5)-cos(q2+q3).*cos(q4).*cos(q5))+cos(q2+q3).*cos(q6).*sin(q4)+2.633984452816549e-2;-sin(q5).*(sin(q1).*sin(q4)+cos(q1).*cos(q2).*cos(q4).*sin(q3)+cos(q1).*cos(q3).*cos(q4).*sin(q2))+cos(q2+q3).*cos(q1).*cos(q5)-5.662944800628733e-3;sin(q1).*7.0e1+sin(q1).*sin(q2).*3.6e2-sin(q1).*sin(q2).*sin(q3).*3.8e2+cos(q2).*cos(q3).*sin(q1).*3.8e2+cos(q1).*sin(q4).*sin(q5).*6.5e1+cos(q2).*cos(q3).*cos(q5).*sin(q1).*6.5e1-cos(q5).*sin(q1).*sin(q2).*sin(q3).*6.5e1-cos(q2).*cos(q4).*sin(q1).*sin(q3).*sin(q5).*6.5e1-cos(q3).*cos(q4).*sin(q1).*sin(q2).*sin(q5).*6.5e1-7.815e1;cos(q6).*(sin(q2+q3).*sin(q5)-cos(q2+q3).*cos(q4).*cos(q5))+cos(q2+q3).*sin(q4).*sin(q6)-1.182306613292333e-1;cos(q6).*(-cos(q4).*sin(q1)+cos(q1).*cos(q2).*sin(q3).*sin(q4)+cos(q1).*cos(q3).*sin(q2).*sin(q4))+sin(q6).*(cos(q2+q3).*cos(q1).*sin(q5)+cos(q5).*sin(q1).*sin(q4)+cos(q1).*cos(q2).*cos(q4).*cos(q5).*sin(q3)+cos(q1).*cos(q3).*cos(q4).*cos(q5).*sin(q2))-9.850949540347428e-1;-sin(q5).*(-cos(q1).*sin(q4)+cos(q2).*cos(q4).*sin(q1).*sin(q3)+cos(q3).*cos(q4).*sin(q1).*sin(q2))+cos(q2+q3).*cos(q5).*sin(q1)-1.2099672617183e-1;cos(q2).*3.6e2-cos(q2).*sin(q3).*3.8e2-cos(q3).*sin(q2).*3.8e2-cos(q2).*cos(q5).*sin(q3).*6.5e1-cos(q3).*cos(q5).*sin(q2).*6.5e1-cos(q2).*cos(q3).*cos(q4).*sin(q5).*6.5e1+cos(q4).*sin(q2).*sin(q3).*sin(q5).*6.5e1-3.9571e2]
Error in fsolve (line 242)
I hope I have been clear enough. Thank you very much for your time.
  • Jose

采纳的回答

madhan ravi
madhan ravi 2019-4-6
qini = zeros(1,6); % Initial guess
ci = fsolve(@funec,qini) % fsolve with the function handle, unknown variables and initial guess
% done many variations here, none of them worked
function ec = funec(x);
q1 = x(1);
q2 = x(2);
q3 = x(3);
q4 = x(4);
q5 = x(5);
q6 = x(6);
ec =[...
sin(q6)*(cos(q1)*cos(q2)*sin(q3)*sin(q4) - cos(q4)*sin(q1) + cos(q1)*cos(q3)*sin(q2)*sin(q4)) - cos(q6)*(cos(q2 + q3)*cos(q1)*sin(q5) + cos(q5)*sin(q1)*sin(q4) + cos(q1)*cos(q2)*cos(q4)*cos(q5)*sin(q3) + cos(q1)*cos(q3)*cos(q4)*cos(q5)*sin(q2)) - 3097002709122497/18014398509481984
cos(q6)*(cos(q1)*cos(q4) + cos(q2)*sin(q1)*sin(q3)*sin(q4) + cos(q3)*sin(q1)*sin(q2)*sin(q4)) + sin(q6)*(cos(q2 + q3)*sin(q1)*sin(q5) - cos(q1)*cos(q5)*sin(q4) + cos(q2)*cos(q4)*cos(q5)*sin(q1)*sin(q3) + cos(q3)*cos(q4)*cos(q5)*sin(q1)*sin(q2)) - 6124274932042799/36028797018963968
- sin(q2 + q3)*cos(q5) - cos(q2 + q3)*cos(q4)*sin(q5) - 139701203459709/140737488355328
70*cos(q1) + 360*cos(q1)*sin(q2) - 65*sin(q1)*sin(q4)*sin(q5) + 380*cos(q1)*cos(q2)*cos(q3) - 380*cos(q1)*sin(q2)*sin(q3) + 65*cos(q1)*cos(q2)*cos(q3)*cos(q5) - 65*cos(q1)*cos(q5)*sin(q2)*sin(q3) - 65*cos(q1)*cos(q2)*cos(q4)*sin(q3)*sin(q5) - 65*cos(q1)*cos(q3)*cos(q4)*sin(q2)*sin(q5) + 19869/50
sin(q6)*(cos(q1)*cos(q4) + cos(q2)*sin(q1)*sin(q3)*sin(q4) + cos(q3)*sin(q1)*sin(q2)*sin(q4)) - cos(q6)*(cos(q2 + q3)*sin(q1)*sin(q5) - cos(q1)*cos(q5)*sin(q4) + cos(q2)*cos(q4)*cos(q5)*sin(q1)*sin(q3) + cos(q3)*cos(q4)*cos(q5)*sin(q1)*sin(q2)) + 2202239090516653/2251799813685248
cos(q2 + q3)*cos(q6)*sin(q4) - sin(q6)*(sin(q2 + q3)*sin(q5) - cos(q2 + q3)*cos(q4)*cos(q5)) + 7591943296130745/288230376151711744
cos(q2 + q3)*cos(q1)*cos(q5) - sin(q5)*(sin(q1)*sin(q4) + cos(q1)*cos(q2)*cos(q4)*sin(q3) + cos(q1)*cos(q3)*cos(q4)*sin(q2)) - 102014544375725/18014398509481984
70*sin(q1) + 360*sin(q1)*sin(q2) - 380*sin(q1)*sin(q2)*sin(q3) + 380*cos(q2)*cos(q3)*sin(q1) + 65*cos(q1)*sin(q4)*sin(q5) + 65*cos(q2)*cos(q3)*cos(q5)*sin(q1) - 65*cos(q5)*sin(q1)*sin(q2)*sin(q3) - 65*cos(q2)*cos(q4)*sin(q1)*sin(q3)*sin(q5) - 65*cos(q3)*cos(q4)*sin(q1)*sin(q2)*sin(q5) - 1563/20
cos(q6)*(sin(q2 + q3)*sin(q5) - cos(q2 + q3)*cos(q4)*cos(q5)) + cos(q2 + q3)*sin(q4)*sin(q6) - 2129854249224409/18014398509481984
cos(q6)*(cos(q1)*cos(q2)*sin(q3)*sin(q4) - cos(q4)*sin(q1) + cos(q1)*cos(q3)*sin(q2)*sin(q4)) + sin(q6)*(cos(q2 + q3)*cos(q1)*sin(q5) + cos(q5)*sin(q1)*sin(q4) + cos(q1)*cos(q2)*cos(q4)*cos(q5)*sin(q3) + cos(q1)*cos(q3)*cos(q4)*cos(q5)*sin(q2)) - 8872946535830847/9007199254740992
cos(q2 + q3)*cos(q5)*sin(q1) - sin(q5)*(cos(q2)*cos(q4)*sin(q1)*sin(q3) - cos(q1)*sin(q4) + cos(q3)*cos(q4)*sin(q1)*sin(q2)) - 8718732974408059/72057594037927936
360*cos(q2) - 380*cos(q2)*sin(q3) - 380*cos(q3)*sin(q2) - 65*cos(q2)*cos(q5)*sin(q3) - 65*cos(q3)*cos(q5)*sin(q2) - 65*cos(q2)*cos(q3)*cos(q4)*sin(q5) + 65*cos(q4)*sin(q2)*sin(q3)*sin(q5) - 39571/100];
end
  7 个评论

请先登录,再进行评论。

更多回答(1 个)

Alex Sha
Alex Sha 2019-4-22
Multi-results:
1:
q1: 2.96669036114669
q2: 1.70487333682449
q3: 15.5136953998108
q4: 5.27144773940526
q5: 0.142189641996628
q6: 2.92624078062874
2:
q1: -0.174902292443192
q2: -1.65677974125393
q3: -0.222132574088401
q4: -2.7442677404906
q5: -0.315684317666849
q6: -4.74367456197212
3:
...

类别

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