首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >辛普森的复合规则GUI

辛普森的复合规则GUI
EN

Stack Overflow用户
提问于 2015-09-18 01:30:11
回答 1查看 211关注 0票数 0

我在做Simpson复合规则时遇到了这个问题

尝试访问funcion(1.2);索引必须是正整数或逻辑。 Simpson_Comp>Calcular_Callback (第185行) sum_even = sum_even +funcion(x(I))中的错误;

代码语言:javascript
复制
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)必须是整数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-18 07:34:37

您会得到一个错误,因为handles.funcion是一个字符串,但是您假设它是一个实际的函数--正如您的注释中所指出的。因此,MATLAB将其解释为将其索引为字符串。尝试使用str2func将字符串转换为由该字符串的内容定义的函数句柄。另外,由于str2func接受的字符串格式类似于匿名函数,所以需要在实际字符串之前添加@(x)

因此,要么将其添加到GUI小部件中的字符串中,要么在捕获事件触发器之后抢占字符串后将字符串放在前面。

让我们来做第二种方式,因为我假设您不希望用户输入比他们需要的更多的文本。因此,在调用get之后,使用str2func

代码语言:javascript
复制
funcion=get(handles.funcion,'string');
funcion = str2func(['@(x)' funcion]); %// New
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32642472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档