How to solve a non-linear equation system as function handle with fsolve?
    4 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Jose Antonio Aliaga
 am 6 Apr. 2019
  
    
    
    
    
    Kommentiert: Jose Antonio Aliaga
 am 23 Mai 2019
            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
0 Kommentare
Akzeptierte Antwort
  madhan ravi
      
      
 am 6 Apr. 2019
        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 Kommentare
  madhan ravi
      
      
 am 6 Apr. 2019
				Just pass ec to the function fine by parameterizing the function. https://in.mathworks.com/help/matlab/math/parameterizing-functions.html
Weitere Antworten (1)
  Alex Sha
      
 am 22 Apr. 2019
        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:
...
Siehe auch
Kategorien
				Mehr zu Systems of Nonlinear Equations finden Sie in Help Center und File Exchange
			
	Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



