matlab中中点,梯形和辛普森规则的误差

时间:2014-06-02 18:11:23

标签: matlab integration numerical

我正在编写一个脚本,使用这三种方法在数值上找到积分。现在我可以为积分计算正确的值,但我还需要打印错误及其上限分析。我不知道如何在matlab中做到这一点。从公式我需要找到f''和f''''的最大值,但我不知道如何做到这一点。有人能帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:1)

回想一下,f(x) 上的梯形规则,辛普森规则或中点规则的误差上限必须<{>>在{{1}的间隔之间或者我们无法找到此错误。我有两种解决方案,取决于给出的内容。

解决方案#1 - 给出f(x)的封闭形式解

如果您有积分的封闭形式解决方案,请使用MATLAB中的符号工具箱首先定义x in [a,b],然后使用f(x)命令区分以查找diff。如果您想要二阶导数,请对其应用另一个f'(x)命令。

示例:

diff

如果您想在特定时间间隔内找到最大值,假设下限syms x; f = x^4; df = diff(f); d2f = diff(df); f = x^4 df = 4*x^3 d2f = 12*x^2 T之间的步长a,您可以尝试:

b

上述代码的作用是,它在a = 1; b = 3; T = 0.01; maxf = max(abs(double(subs(f,a:T:b)))); maxf = 81 的步长中找到[1,3] x^4之间的最大值。你可以用你想要的任何函数替换第四行的第一个参数T = 0.01注意:错误术语需要**绝对值,这就是f函数存在的原因。

解决方案#2 - 未给出f(x)的封闭形式解决方案

如果您拥有该功能,但您只有一组abs对,您仍然可以在输出中使用(x,y)功能{ {1}}值,但它会实现导数的离散近似值。因此,导数约等于:

diff

这需要y点并用x_i' = x_{i+1} - x_i 点减去它。如果您对(i+1)点数组应用i,它将返回一个diff点数组,以适应提前查找一个样本以查找差异。之后,您可以使用此数组并找到派生的最大值。如果您想要找到二阶导数的最大值,只需在N的第一个出口再次调用N-1。帮助您入门的示例:

diff

以上所做的是它找到diff的导数的离散近似的最大值,由x = 0:0.01:2*pi; y = sin(x); ymax = max(abs(diff(y))); ymax = 0.0100 表示。

希望其中一个适合你!

除了

当我在大学担任讲师时,我曾经教过数学方法。看看这些幻灯片,使用Simpson规则和梯形规则进行数值积分的简介。还有关于如何在MATLAB中编写代码(不使用任何内置函数)的幻灯片,以及有关如何计算误差的一些幻灯片,以及在固定间隔内需要多少点以保证特定的近似误差。

http://www.rnet.ryerson.ca/~rphan/mth510/f2012/Lab_10/MTH510F2012_Lab10.pdf