matlab中的中点误差、梯形误差和simpson规则误差

matlab中的中点误差、梯形误差和simpson规则误差,matlab,integration,numerical,Matlab,Integration,Numerical,我正在写一个脚本,用这三种方法计算积分。现在我可以计算出积分的正确值,但我还需要打印误差和它的分析上限。我不知道如何在matlab中做到这一点。从公式中我需要找到f''和f''的最大值,但我不知道怎么做。有人能帮我吗 感谢您回想一下,f(x)上的梯形规则、辛普森规则或中点规则的误差上限必须在[a,b]中的x间隔之间,否则我们将无法找到此误差。我有两个解决方案给你,这取决于所给的 给出了f(x)的解#1-闭式解 如果您有积分的封闭形式解,请使用MATLAB中的符号工具箱,首先定义f(x),然后使用

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


感谢您

回想一下,
f(x)
上的梯形规则、辛普森规则或中点规则的误差上限必须在[a,b]中的
x间隔之间,否则我们将无法找到此误差。我有两个解决方案给你,这取决于所给的

给出了f(x)的解#1-闭式解 如果您有积分的封闭形式解,请使用MATLAB中的符号工具箱,首先定义
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
如果要在某个时间间隔内找到最大值,假设下限
a
b
之间的步长
T
,可以尝试执行以下操作:

a = 1;
b = 3;
T = 0.01;
maxf = max(abs(double(subs(f,a:T:b))));

maxf = 

81
上述代码的作用是在
T=0.01的步长中,找到
x^4
[1,3]
之间的最大值。您可以用所需的任何函数替换第四行的第一个参数
f
。注意:错误项需要**绝对*值,这就是为什么有
abs
功能的原因

解#2-未给出f(x)的闭式解 如果没有该函数,但只有一组
(x,y)
对,则仍可在输出
y
值上使用
diff
函数,但它将实现对导数的离散近似。因此,导数近似等于:

x_i' = x_{i+1} - x_i
这取
(i+1)
点,然后用
i
点减去它。如果对
N
点的数组应用
diff
,它将返回一个
N-1
点的数组,以适应向前查看一个样本以查找差异。之后,可以使用此数组并找到导数的最大值。如果要求二阶导数的最大值,只需在
diff
的第一个输出上再次调用
diff
。开始的示例:

x = 0:0.01:2*pi;
y = sin(x);
ymax = max(abs(diff(y)));

ymax =

    0.0100
上面所做的是,它找到导数
y=sin(x)
的离散近似的最大值,如
diff(y)
所示

希望其中一个对你有用

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


您能提供您尝试的代码吗?再解释一下什么部分不起作用?嗨,问题是我没有实现任何东西来发现错误,因为我不知道如何计算它。如前所述,我的问题是,我不知道如何计算结果与精确积分之间的误差,也不知道如何计算误差的上界(我的公式是-(f'(c)*(b-a)*h^2)/12)。我可以说,我需要给定区间内函数的精确积分来计算误差(abs)(近似-实数))我需要一种方法来找到f''的最大值来计算te界