首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仿照辛普森法则,错误与伊娃

仿照辛普森法则,错误与伊娃
EN

Stack Overflow用户
提问于 2013-10-26 08:59:00
回答 2查看 364关注 0票数 0

我试图通过为辛普森写一个函数来复制辛普森法则。但是,我仍然不清楚如何在MatLab中将一个字符串转换为一个实际的函数。

其职能是:

代码语言:javascript
复制
function result = simpson(fun, x0, xn, n)
    f = eval(fun);
    h = (xn-x0)/2;
    xstart = f(x0) + f(xn);
    x1 = 0;
    x2 = 0;

    for i = 1:n-1
        x = x0 + h*i;
        if (mod(i,2) == 0)
            x2 = x2 + f(x);
        else
            x1 = x1 + f(x);
        end
    end

    result = h*(xstart + 2*x2 + 4*x1)/3;

报告的错误是

代码语言:javascript
复制
Error using eval
Undefined function or variable 'x'

如何将x传递给函数的字符串形式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-26 09:04:12

要做到这一点,最简单的方法是:使用一个函数句柄,不要使用eval。

函数句柄记录在这里:handle.html

将它们定义如下:

代码语言:javascript
复制
sqr = @(x) x.^2;

然后调用您的函数:

代码语言:javascript
复制
simpson(sqr, 1, 2, 3);

在您的功能中,您应该能够调用乐趣(3)并得到9作为结果。

如果您必须使用eval,我可以看到两种解决方案:

  1. 方法:simpson('@(x) x.^2') (eval创建一个适当的函数句柄)
  2. 肮脏的方式: 函数结果=simpson(兴趣)x= 4;f=eval(兴趣);结果= f;返回;结束

就这样叫它:simpson('x.^2')

票数 1
EN

Stack Overflow用户

发布于 2013-10-26 09:56:21

这里的问题是eval的使用方式。文档表示,在您的示例中,输出f将不是一个函数句柄(正如代码使用它的方式所期望的那样),而是fun函数的输出。

因此,为了使eval函数正常工作,您需要向它提供它的输入。

例如:

代码语言:javascript
复制
fun = 'x.^2';    
x = 4;    
f = eval(fun);

f == 16的结果

简而言之,每当您想要调用fun时,您都必须将x设置为适当的值,调用eval并存储结果。

例如,在您的代码中:

代码语言:javascript
复制
f = eval(fun);
h = (xn-x0)/2;
xstart = f(x0) + f(xn);

将成为:

代码语言:javascript
复制
h = (xn-x0)/2;
x = x0;
fx0 = eval(fun);
x = xn; 
fxn = eval(fun);
xstart = fx0 + fxn;

我建议函数句柄作为一种更安全、更容易实现的方法,但是正如注释中提到的那样,这在您的情况下是不允许的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19604819

复制
相关文章

相似问题

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