matlab错误使用 function_handle 输出参数太多。

我的是自定义求曲面面积,然后我给的曲面方程及范围是
曲面方程exp(-x.^2/2).*sin(x.^2+y)范围x -1/2 1 范围y -sqrt(1-x.^2/2) sqrt(1-x.^2/2)
以下是报错
错误使用 function_handle
输出参数太多。

操作环境、软件版本等信息

版本号matlab2018b

下是我的代码


clc;clear;
syms x y q
f=input('请输入任意一个曲面的函数表达式:','s');
x1=input('请输入表达式中x的最小值(一定为常量):');
x2=input('请输入表达式中x的最大值(一定为常量):');
y1=input('请输入表达式中y的最小值(常量或表达式):','s')
y2=input('请输入表达式中y的最大值(常量或表达式):','s');
fun=function_handle:@(x,y) f;
y3=@(x)y1;
y4=@(x)y2;
q=integral2(fun,x1,x2,y3,y4,'Method',2); 
fprintf('该函数的面积为:%d ',q)
能够得到正确结果(q=0.4119)
clc;clear;
syms x y q
f = input('请输入任意一个曲面的函数表达式:','s');
x1 = input('请输入表达式中x的最小值(常量):');
x2 = input('请输入表达式中x的最大值(常量):');
y1 = input('请输入表达式中y的最小值(常量或表达式):','s');
y2 = input('请输入表达式中y的最大值(常量或表达式):','s');
fun = @(x, y) eval(f);
y3 = @(x) eval(y1);
y4 = @(x) eval(y2);
q = integral2(fun,x1,x2,y3,y4,'Method',2);
fprintf('该函数的面积为:%d\n',q)

改进后的代码将输入的函数表达式转化成函数句柄,并在求解积分的时候使用eval函数来动态计算函数值。这样可以避免错误使用 function_handle 输出参数太多的问题。

根据你提供的代码和报错信息,问题出现在函数句柄的使用上。
在你的代码中,fun是一个函数句柄,用于表示输入的曲面方程。然而,你在创建函数句柄时的语法是不正确的。你可以修改代码如下:

clc;
clear;
f = input('请输入任意一个曲面的函数表达式:','s');
x1 = input('请输入表达式中x的最小值(一定为常量):');
x2 = input('请输入表达式中x的最大值(一定为常量):');
y1 = str2func(['@(x)' input('请输入表达式中y的最小值(常量或表达式):','s')]);
y2 = str2func(['@(x)' input('请输入表达式中y的最大值(常量或表达式):','s')]);
fun = @(x, y) eval(f);
q = integral2(fun, x1, x2, y1, y2, 'Method', 'iterated');
fprintf('该函数的面积为:%f\n', q);

在修改后的代码中,使用str2func函数将输入的字符串转换为匿名函数,以便正确创建函数句柄。同时,使用eval函数来评估输入的曲面方程。
注意,integral2函数的第一个参数应该是一个函数句柄,用于表示被积函数。我们在这里将输入的字符串方程转换为匿名函数,并通过eval对其进行评估。
另外,你提到你想要计算曲面的面积,但是在你的代码中使用了fprintf函数来输出结果,这可能会导致格式错误。我在代码中使用了%f来输出面积的浮点数值。如果你希望使用整数格式输出结果,可以使用%d
注意,这段代码使用了eval函数来评估用户输入的字符串,可能会导致安全风险。
如果你觉得有用可以微信给我发五块钱吗,我想喝蜜雪冰城