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

6 ビュー (過去 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 件のコメント
madhan ravi
madhan ravi 2019 年 4 月 6 日
Just pass ec to the function fine by parameterizing the function. https://in.mathworks.com/help/matlab/math/parameterizing-functions.html
Jose Antonio Aliaga
Jose Antonio Aliaga 2019 年 4 月 6 日
Thank you for your patience and time. I've accepted your answer.

サインインしてコメントする。

その他の回答 (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 Center および File ExchangeSolver 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