当我尝试运行此代码时,出现以下错误:“类型为'cell'的输入参数的未定义运算符'。*'。我的目标是通过for循环构建一个数组(单元格数组,因为我正在使用函数句柄),并获取结果数组中每个元素的积分。错误发生在最后一行。我正在尝试为数组中的每个元素插入值1.5。关于如何“处理”此错误的任何提示?
FUN_1 = @(y_1,y_2,x_1,x_2)sum(heaviside(y_1-a_k(1:m,1)).*dirac(1,y_2-a_k(1:m,2))).*(-1/2.*log((x_1-y_1).^2+(x_2-y_2).^2))+(x_1-y_1).^2./((x_1-y_1).^2)+sum(dirac(y_1-a_k(1:m,1)).*dirac(y_2-a_k(1:m,2))).*(-1/2.*log((x_1-y_1).^2+(x_2-y_2).^2))+(x_1-y_1).*(x_2-y_2)./((x_1-y_1).^2+(x_2-y_2).^2);
Q_1 = @(x_1,x_2)integral2(@(y_1,y_2)FUN_1(y_1,y_2,x_1,x_2),a(1,1),c(1,1),a(1,2),c(1,2));
FUN_2 = @(y_1,y_2,x_1,x_2)sum(heaviside(y_1-a_k(1:m,1)).*dirac(1,y_2-a_k(1:m,2))).*(-1/2.*log((x_1-y_1).^2+(x_2-y_2).^2))+(x_1-y_1).*(x_2-y_2)./((x_1-y_1).^2)+sum(dirac(y_1-a_k(1:m,1)).*dirac(y_2-a_k(1:m,2))).*(-1/2.*log((x_1-y_1).^2+(x_2-y_2).^2))+(x_2-y_2).^2./((x_1-y_1).^2+(x_2-y_2).^2);
Q_2 = @(x_1,x_2)integral2(@(y_1,y_2)FUN_1(y_1,y_2,x_1,x_2),a(1,1),c(1,1),a(1,2),c(1,2));
k = cell(1,2*M-1);
n=0;
for n = 0:2*M-1
k{1,n+1} = @(x_1,x_2)Q_1(x_1,x_2)*2*n*(x_1+1i*x_2)^(n-1)+ Q_2(x_1,x_2)*2*n*1i*(x_1+1i*x_2)^(n-1)]);
end
R = @(x_2)integral(@(x_1)k,a(1,1),c(1,1),'ArrayValued',true);
x= 1.5;
R{x}
我将代码更新如下:
k = zeros(1,2*M);
n=0;
for n = 0:2*M-1
S = @(x_1,x_2)Q_1(x_1,x_2)*2*n*(x_1+1i*x_2)^(n-1) + Q_2(x_1,x_2)*2*n*1i*(x_1+1i*x_2)^(n-1);
R = @(x_2)integral(@(x_1)S,a(1,1),c(1,1));
k(1,n+1) = R(1);
end
disp(k);
但我仍然收到以下错误:
“输入函数必须返回'double'或'single'值。找到'function_handle'。
为线
k(1,n+1) = R(1);
有小费吗?
最佳答案
在这一行:
R = @(x_2) integral(@(x_1) S, a(1, 1), c(1, 1));
您没有在匿名函数
S
中将任何值传递给@(x_1) S
,因此匿名函数只是返回函数句柄S
而不是为一组输入评估S
。我猜你想这样定义它:R = @(x_2) integral(@(x_1) S(x_1, x_2), a(1, 1), c(1, 1));
关于matlab - Matlab : function handle in cell array with undefined operators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44455018/