我在做Simpson的复合规则时遇到了这个问题
尝试访问功能(1.2); index必须是正整数或逻辑。
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)
必须是整数?
答案 0 :(得分:0)
您收到错误是因为handles.funcion
是一个字符串,但您认为它是一个实际的功能 - 正如您的评论中所述。因此,MATLAB将其解释为索引为字符串。尝试使用str2func
将字符串转换为由该字符串的内容定义的函数句柄。此外,因为str2func
接受格式化为匿名函数的字符串,所以需要在实际字符串之前添加@(x)
。
因此,要么将其添加到GUI小部件的字符串中,要么在捕获事件触发后抓取字符串后添加字符串。
让我们采取第二种方式,因为我假设您不希望用户键入超出需要的文本。因此,在get
来电后,请使用str2func
:
funcion=get(handles.funcion,'string');
funcion = str2func(['@(x)' funcion]); %// New