Why Undefined operator '-' in function_handle?
Afficher commentaires plus anciens
When I enter ' H(3) ' in the command line, the following error is shown:
Undefined operator '-' for input arguments of type 'function_handle'.
Error in
Trial_H>@(m)d1+s*(cos(gama)+sum(cos(gama+(pi/2-phi_i))))+((2*r)-omega)*sin(B_j(m))+(r-omega)*sum(sin((1:m-1)*pi-sum(B_j(1:m-1))))
Here is the code:
% Variables
m = 3;
L = 10;
R = 1;
r = R/(m+1);
S = sqrt(2);
s = S/(m+1);
d1 = 1;
d2 = 0.25;
omega = R/(3*(m+1));
gama = atan(R/d1);
% Functions
phi_i = @(ii, m) atan( (d1+(ii*d2)./(m+1) )./(r/3) );
B_j = @(ii, m) 2*phi_i(ii, m);
H = @(m) d1 + s*( cos(gama) + sum(cos(gama+(pi/2-phi_i))) ) + ( (2*r)-omega)*sin(B_j(m) ) + (r-omega)*sum(sin((1:m-1)*pi - sum(B_j(1:m-1))));
8 commentaires
Ameer Hamza
le 7 Avr 2020
This statement uses variable m
r = R/(m+1);
But m is not defined in your code.
KSSV
le 7 Avr 2020
Give the input to phi_i in H.
Jay
le 7 Avr 2020
Walter Roberson
le 7 Avr 2020
Please see the discussion at
Walter Roberson
le 7 Avr 2020
We mean that when you refer to phi_i inside H, phi_i is not going to be invoked as a function: it would not have any idea where to get its inputs from. The variables ii and m that are given as its parameters are local to it, as I described in the link above, and phi_i will not look in the calling environment to see if there happens to be variables named ii or m there. Parameters to a function handle are always strictly positional, so if you do not pass something to phi_i insid H then phi_i is not going to have any idea what values it should be run on.
If you want to invoke phi_i inside H, you need to pass it particular parameters.
Walter Roberson
le 7 Avr 2020
Modifié(e) : Walter Roberson
le 7 Avr 2020
H = @(m) d1 + s*( cos(gama) + sum(cos(gama+(pi/2-phi_i))) ) + ( (2*r)-omega)*sin(B_j(m) ) + (r-omega)*sum(sin((1:m-1)*pi - sum(B_j(1:m-1))));
^^^^^^
That is a reference to the anonymous function phi_i but it is not a call to run phi_i with particular parametrs.
B_j = @(ii, m) 2*phi_i(ii, m);
That defines B_j as being a handle to an anonymous function that expects two parameters
H = @(m) d1 + s*( cos(gama) + sum(cos(gama+(pi/2-phi_i))) ) + ( (2*r)-omega)*sin(B_j(m) ) + (r-omega)*sum(sin((1:m-1)*pi - sum(B_j(1:m-1))));
^^^^^^ ^^^^^^^^^^
Those two places, you try to invoke B_j with one parameter.
Where is the ii value coming from that you expect to pass into B_j and phi_i ?
Réponses (0)
Catégories
En savoir plus sur Variables dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!