辛普森的复合规则GUI

时间:2015-09-18 01:30:12

标签: matlab

我在做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)必须是整数?

1 个答案:

答案 0 :(得分:0)

您收到错误是因为handles.funcion是一个字符串,但您认为它是一个实际的功能 - 正如您的评论中所述。因此,MATLAB将其解释为索引为字符串。尝试使用str2func将字符串转换为由该字符串的内容定义的函数句柄。此外,因为str2func接受格式化为匿名函数的字符串,所以需要在实际字符串之前添加@(x)

因此,要么将其添加到GUI小部件的字符串中,要么在捕获事件触发后抓取字符串后添加字符串。

让我们采取第二种方式,因为我假设您不希望用户键入超出需要的文本。因此,在get来电后,请使用str2func

funcion=get(handles.funcion,'string');
funcion = str2func(['@(x)' funcion]); %// New