How to solve a non-linear equation system as function handle with fsolve?
    5 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Jose Antonio Aliaga
 il 6 Apr 2019
  
    
    
    
    
    Commentato: Jose Antonio Aliaga
 il 23 Mag 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 Commenti
Risposta accettata
  madhan ravi
      
      
 il 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 Commenti
  madhan ravi
      
      
 il 6 Apr 2019
				Just pass ec to the function fine by parameterizing the function. https://in.mathworks.com/help/matlab/math/parameterizing-functions.html
Più risposte (1)
  Alex Sha
      
 il 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:
...
Vedere anche
Categorie
				Scopri di più su Systems of Nonlinear Equations in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



