我试图通过为辛普森写一个函数来复制辛普森法则。但是,我仍然不清楚如何在MatLab中将一个字符串转换为一个实际的函数。
其职能是:
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;报告的错误是
Error using eval
Undefined function or variable 'x'如何将x传递给函数的字符串形式?
发布于 2013-10-26 09:04:12
要做到这一点,最简单的方法是:使用一个函数句柄,不要使用eval。
函数句柄记录在这里:handle.html
将它们定义如下:
sqr = @(x) x.^2;然后调用您的函数:
simpson(sqr, 1, 2, 3);在您的功能中,您应该能够调用乐趣(3)并得到9作为结果。
如果您必须使用eval,我可以看到两种解决方案:
simpson('@(x) x.^2') (eval创建一个适当的函数句柄)就这样叫它:simpson('x.^2')
发布于 2013-10-26 09:56:21
这里的问题是eval的使用方式。文档表示,在您的示例中,输出f将不是一个函数句柄(正如代码使用它的方式所期望的那样),而是fun函数的输出。
因此,为了使eval函数正常工作,您需要向它提供它的输入。
例如:
fun = 'x.^2';
x = 4;
f = eval(fun);f == 16的结果
简而言之,每当您想要调用fun时,您都必须将x设置为适当的值,调用eval并存储结果。
例如,在您的代码中:
f = eval(fun);
h = (xn-x0)/2;
xstart = f(x0) + f(xn);将成为:
h = (xn-x0)/2;
x = x0;
fx0 = eval(fun);
x = xn;
fxn = eval(fun);
xstart = fx0 + fxn;我建议函数句柄作为一种更安全、更容易实现的方法,但是正如注释中提到的那样,这在您的情况下是不允许的。
https://stackoverflow.com/questions/19604819
复制相似问题