我在做Simpson复合规则时遇到了这个问题
尝试访问funcion(1.2);索引必须是正整数或逻辑。 Simpson_Comp>Calcular_Callback (第185行) sum_even = sum_even +funcion(x(I))中的错误;
funcion=get(handles.funcion,'string');
b=str2num(get(handles.b,'string'));
a=str2num(get(handles.a,'string'));
n=str2num(get(handles.n,'string'));
h = (b-a)/n;
sum_even = 0;
for i = 1:n/2-1
x(i) = a + 2*i*h;
sum_even = sum_even + funcion(x(i));
end
sum_odd = 0;
for i = 1:n/2
x(i) = a + (2*i-1)*h;
sum_odd = sum_odd + funcion(x(i));
end
integral = h*(funcion(a)+ 2*sum_even + 4*sum_odd +funcion(b))/3
fprintf('el valor aproximado de la integral es: %10.15f\n\n',integral);
set(handles.solucion,'string',num2str(integral));我正在用x^2和[0,3]测试它
我不知道为什么x(i)必须是整数?
发布于 2015-09-18 07:34:37
您会得到一个错误,因为handles.funcion是一个字符串,但是您假设它是一个实际的函数--正如您的注释中所指出的。因此,MATLAB将其解释为将其索引为字符串。尝试使用str2func将字符串转换为由该字符串的内容定义的函数句柄。另外,由于str2func接受的字符串格式类似于匿名函数,所以需要在实际字符串之前添加@(x)。
因此,要么将其添加到GUI小部件中的字符串中,要么在捕获事件触发器之后抢占字符串后将字符串放在前面。
让我们来做第二种方式,因为我假设您不希望用户输入比他们需要的更多的文本。因此,在调用get之后,使用str2func
funcion=get(handles.funcion,'string');
funcion = str2func(['@(x)' funcion]); %// Newhttps://stackoverflow.com/questions/32642472
复制相似问题