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