我正在编写一个脚本,使用这三种方法在数值上找到积分。现在我可以为积分计算正确的值,但我还需要打印错误及其上限分析。我不知道如何在matlab中做到这一点。从公式我需要找到f''和f''''的最大值,但我不知道如何做到这一点。有人能帮助我吗?
谢谢
答案 0 :(得分:1)
回想一下,f(x)
上的梯形规则,辛普森规则或中点规则的误差上限必须<{>>在{{1}的间隔之间或者我们无法找到此错误。我有两种解决方案,取决于给出的内容。
如果您有积分的封闭形式解决方案,请使用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
函数存在的原因。
如果您不拥有该功能,但您只有一组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