当我尝试运行此代码时,出现以下错误:"未定义的运算符'。*'对于类型' 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);
任何提示?
答案 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));