フィルターのクリア

Anonymous Function

3 ビュー (過去 30 日間)
Jerry Walker
Jerry Walker 2011 年 6 月 24 日
コメント済み: Steven Lord 2023 年 1 月 31 日
[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 件のコメント
Steven Lord
Steven Lord 2023 年 1 月 31 日
%{
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])
jfactor = function_handle with value:
@(r,theta,phi)r+theta.^phi
% check
jfactor(1, 2, 3) % 1+2^3 = 9
ans = 9

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

採用された回答

Walter Roberson
Walter Roberson 2011 年 6 月 24 日
jfactor becomes a function, and that function needs to be passed arguments.
sum1 = sum1 + jfactor(r,theta,phi)*r^2*sin(theta)*dt*dp;

その他の回答 (2 件)

Jerry Walker
Jerry Walker 2011 年 6 月 24 日
Thanks, I made the change and the program works as expected.

Siphumelele Vatsha
Siphumelele Vatsha 2023 年 1 月 31 日
sum1 = sum1 + jfactor(r,theta,phi)*r^2*sin(theta)*dt*dp;

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by