在我的课程中,我开始学习使用MatLab进行数值分析。到目前为止,我们已经介绍了多项式插值(样条线、多边形拟合、约束样条线等)。我正在做这道练习题,我得不到正确的答案。我已经上传了我使用的代码和问题,我哪里做错了?提前谢谢!
close all; clear all; clc;
format long e
x = linspace(0,1,8);
xplot = linspace(0,1);
f = @(x) atan(x.*(x+1));
y_val = f(xplot);
c = polyfit(x,f(x),7);
p = polyval(c,0.7);
err = abs(f(0.7)-p)/(f(0.7))
我遇到的问题在图中可见
2条答案
按热度按时间e4yzc0pl1#
经过一番尝试后,这似乎是一个计算绝对误差的问题,而不是相对绝对误差的问题。
下面的代码将生成所需的答案。是的,从问题中很不清楚哪个错误是故意的。
nhaq1z212#
你做的错事是:
1.在计算误差时混合绝对值和相对值,以输入结果变量
err
。1.计算错误时不正确地放置
abs()
括号:您的abs()
只修复分子,然后修复分母。要获得|f(0.7)|,还需要另一个abs(f(0.7))
用于点
x=0.7
而不是很可能仅仅是
1、考核点0.5只计算
err
。为了从可能的候选答案中进行选择,我们需要在0.5上选择err
,在0.7上选择err
,然后在所有提供的可能答案中,以正确的顺序匹配这两个对。1.虽然用
N-1
次多项式逼近N
点的多项式是很常见的,但用比N-1
低的多项式来逼近低于满意的误差通常是可能的。低次多项式意味着计算量更少,逼近点所花费的时间更少。如果一个人得到了一个足够公平的近似值,例如一个4次多项式,为什么要浪费时间计算一个一直到
N-1
的高次近似值?因为这个问题没有说明什么次数应该有逼近多项式,所以你必须发现它覆盖了从1到合理阶数的所有多项式次数。
1.我发现的最后一个错误是,您使用了线性空间,但没有指定点数,然后,MatLab默认情况下会取100点,希望它会没事。
那么,在你的问题中,100分是一个太低的点数,我将在提供以下几行之后展示,就像前面提到的,横扫所有可能的近似多项式,而不是默认的你默认选择的100分。
。
。
唯一按正确顺序匹配的误差对确实是7阶多项式误差,但总的最小误差对应于6阶逼近多项式。
在没有定义足够大的点数的情况下取
linspace
会发生什么情况?让我们来看看:只有100分,所有的错误都太大了,没有一个错误接近1e-5或1e-6。
这就是为什么人们不知道该选哪一对,因为所有的值都是在距离着陆区至少5个数量级的地方获得的。
我正要添加一个带有图例的图,但这种特定方法的可视化在这种情况下是最具误导性的,因为在100点和1000点的两个图中,乍一看,无论使用多少网格点,误差都应该是相似的。
但如上所述,1E2点不能近似函数,就像一片漆黑,寻找什么东西,并从我们应该瞄准的地方指向180号手电筒,没有机会发现它。
然而,1e3网格点会产生一对与可能答案之一匹配的错误,这就是选项D。
我希望这对我有帮助,谢谢你阅读我的回答。