Anonymous Function
    9 views (last 30 days)
  
       Show older comments
    
    Jerry Walker
 on 24 Jun 2011
  
    
    
    
    
    Commented: Steven Lord
    
      
 on 31 Jan 2023
            [EDIT: 20110623 22:10 CDT - reformat - WDR]
I am having considerable difficulty with the program below. My goal is to be able to enter or change the Current Density (J) in the integral as an anonymous function. When j = 2*cos(theta)/r^3, the result should be about 31.4. Are there any other methods that would allow me to enter J inot the integral?
When I run I get the following error message:
??? Undefined function or method 'mtimes' for input arguments of type 'function_handle'.
When I swap the "%" on the operator inside the loops I get a 31.4, a good result.
clc
clear  
close
r = 0.2;
dt = .1;
dp = .1;
jinput =  input('Enter an expression for the Current Density (J)... > ','s') 
jfactor = eval(['@(r,theta,phi)' jinput]);
% set initial total sum to zero
sum1 = 0; 
% outer integral loop
for theta = 0:dt:pi/2
    % inner integral loop 
    for phi = 0:dp:2*pi
% add the partial sums to the total sum
sum1 = sum1 + jfactor*r^2*sin(theta)*dt*dp; 
%sum1 = sum1 + 2*cos(theta)/r^3*r^2*sin(theta)*dt*dp; 
    end 
end 
% display the output  
fprintf('>The total current through the defined spherical shell is %g  A.\n', sum1)
1 Comment
  Steven Lord
    
      
 on 31 Jan 2023
				%{
jfactor = eval(['@(r,theta,phi)' jinput]);
%}
Don't use eval. Use str2func. [I've commented out the code above so the code below can run.] Since the input function isn't supported when running code in MATLAB Answers I've hard-coded the body of the function below.
jinput = 'r+theta.^phi';
jfactor = str2func(['@(r, theta, phi) ', jinput])
% check
jfactor(1, 2, 3) % 1+2^3 = 9
Accepted Answer
  Walter Roberson
      
      
 on 24 Jun 2011
        jfactor becomes a function, and that function needs to be passed arguments.
sum1 = sum1 + jfactor(r,theta,phi)*r^2*sin(theta)*dt*dp;
0 Comments
More Answers (2)
  Siphumelele Vatsha
 on 31 Jan 2023
        sum1 = sum1 + jfactor(r,theta,phi)*r^2*sin(theta)*dt*dp;
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


