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

时间:2017-06-09 10:07:59

标签: matlab for-loop compiler-errors cell-array function-handle

当我尝试运行此代码时,出现以下错误:"未定义的运算符'。*'对于类型' 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'或者'单身'值。找到' function_handle'。 为行

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

任何提示?

1 个答案:

答案 0 :(得分: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));