Matlab:具有未定义运算符的单元格数组中的函数句柄

Matlab: function handle in cell array with undefined operators

当我尝试 运行 此代码时,出现以下错误: "Undefined operator '.*' for input arguments of type 'cell'." 我的目标是通过 for 构建一个数组(单元格数组,因为我正在使用函数句柄)循环并对结果数组的每个元素进行积分。错误发生在最后一行。我正在尝试为数组中的每个元素插入值 1.5。关于如何 "handle" 这个错误的任何提示?

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);

但我仍然收到以下错误: “输入函数必须 return 'double' 或 'single' 值。找到 'function_handle'。 对于行

k(1,n+1) = R(1);

有什么建议吗?

在这一行中:

R = @(x_2) integral(@(x_1) S, a(1, 1), c(1, 1));

您没有在匿名函数 @(x_1) S 中向 S 传递任何值,因此匿名函数只是返回一个函数句柄 S 而不是计算 S 一组输入。我猜你想这样定义它:

R = @(x_2) integral(@(x_1) S(x_1, x_2), a(1, 1), c(1, 1));