计算方法作业

绪论和插值

填空题

分别用 2.718281,2.718282 作数 e 的近似值,则其有效数字分别有 ( 6 ) 位和 ( 7 ) 位。

选择题

取$\sqrt{3}\approx1.732$,现在计算$x=(\sqrt{3}-1)^{4}$,下列方法中哪种最好?( C )

A. $28-16 \sqrt{3}$

B.$(4-2 \sqrt{3})^{2}$

C.$\frac{16}{(4+2 \sqrt{3})^{2}}$

D.$\frac{16}{(\sqrt{3}+1)^{4}}$

计算题

假设测得一个圆柱体容器的底面半径和高分别为 50.00m 和 100.00m,且已知其测量误差为 0.005m。试估计由此算得的容积的绝对误差和相对误差?

$V=\pi r^{2} h$

绝对误差:$V’-V=2 \pi r h\left(r’-r\right)
$=2 × 3.1415926 × 50 × 100 × 0.005=157.0796325

相对误差:$\frac{V’-V}{V}=2\frac{r’-r}{r} $=0.0002

证明题

证明方程$ f(x) = e^x + 10x − 2 $在区间$ [0, 1] $内有唯一的实根,使用二分法求这一实根,要求误差不超过 $\frac{1}{2}× 10^{−2}$?

$f(0.5)=4.648>0 ===> f(0.25)=1.784>0 ===> f(0.125)=0.383>0$

$ ===> f(0.0625)= -0.311<0 ===>f(0.09375)=0.0357>0$

$ ===> f(0.078125)=-0.137<0 ===> f(0.0859375)=-0.050 $

$===> f(0.08984375)=-0.0075 ===> f(0.091796875)=0.0141 $

$===> f(0.0908203125)=0.0032< \frac{1}{2}× 10^{-2}$

实根是0.0908203125

编程题

编程实现二分法算法?

以二分查找为例,函数编写如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int BinarySearch(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
while(left<=right)
{
int mid=(right-left)/2+left;//有效防止溢出
if(nums[mid]==target) return mid;
else if(nums[mid]<target)
{
left=mid+1;
}
else
{
right=mid-1;
}
}
return -1;
}

填空题

已知$f(x)=x^3+x+1$,差商$f[0,1,2,3]=(1),f[0,1,2,3,4]=(0)$

计算题

下表是中国新冠肺炎疫情自 2.9 日到 2.17 日真实确认人数 (数据来自https://wh.opensource-service.cn)

image-20221015130314171

现以 (9,11,13,15,17) 为样本点,试用拉格朗日插值方法,预测 (10,12,14,16) 日的确诊人数,并与真实值进行比较,计算绝对误差。

image-20221015132233347

计算题

对上表数据以 (9,11,13,15,17) 为样本点,试用牛顿插值方法,预测 (10,12,14,16) 日的确诊人数,并与真实值进行比较,计算绝对误差。

image-20221015133417623

计算题

求次数$\leq3$的多项式$p(x)$,使满足如条件:

答:$f(x) = x^3-x^2+x$

问答题

给定插值点$ (x_i,y_i), i = 0, 1, 2, · · ·, n$,可分别构造$ Lagrange $插值多项式和 $Newton$插值多项式,证明两者相同并说明各自具有的特点?

由于两者都是通过模拟多项式函数,并计算不同次数前参数的方法,因此两者得到的结果相同。

Lagrange 插值多项式:

  • 插值点要求等距
  • 插值基函数形式简单
  • 当有新的插值点加入时,基函数要重新计算

Newton 插值多项式:

  • 当有新的插值点加入时,基函数不需要重新计算

数值积分

填空题

求$\int_{1}^{2} x^{2} d x$,利用梯形公式的计算结果为($\frac{5}{2}$),利用Simpson公式的计算结果为($\frac{7}{3}$)。

梯形公式:$\frac{2-1}{2} \times(f(1)+f(2))=\frac{5}{2}$

Simpson公式:$\frac{1}{6}[f(1)+4 \cdot f(\frac{1+2}{2})+f(2)]=\frac{7}{3}$

计算题

使用New-Cotes公式($n=2,3,4$时)计算积分$\int_{-1}^{1} x^{2}e^x d x$

当$n=2$时,原式=$\frac{2}{6}[f(-1)+4*f(\frac{-1+1}{2})+f(1)]=\frac{1}{3}(e+\frac{1}{e})$

当$n=3$时,原式=$\frac{2}{8}[f(-1)+3f(-\frac{1}{3})+3f(\frac{1}{3})+f(1)]=\frac{1}{4}(e^{-1}+\frac{1}{3}e^{-\frac{1}{3}}+\frac{1}{3}e^{\frac{1}{3}}+e)$

当$n=4$时,原式=$\frac{2}{90}[7f(-1)+32f(-0.5)+12f(0)+32f(0.5)+7f(1)]=\frac{1}{45}(7e^{-1}+8e^{-\frac{1}{2}}+8e^{\frac{1}{2}}+7e)$

计算题

求$A,B$使求积公式的代数精度尽可能高,并求出其代数精度,利用此公式计算$I=\int_{1}^{2} \frac{1}{x} d x$,保留四位小数.

令$f(x)=1,x^2$,代入得:,解得$A=\frac{1}{9},B=\frac{8}{9}$

代入$f(x)=x^3$时等式成立,但$f(x)=x^4$时等式不成立,因此代数精度为3.

解得$I=1.6667$

计算题

用三点的 Gauss 公式求下面的积分:$\int_{-1}^{1} \frac{x^{2}}{\sqrt{1-x^{2}}} \mathrm{~d} x$

$\int_{-1}^{1} f(x) d x =\frac{5}{9} f\left(-\sqrt{\frac{3}{5}}\right)+\frac{8}{9} f(0)+\frac{5}{9} f\left(\sqrt{\frac{3}{5}}\right)$,解得$f(x)=\frac{\sqrt{10}{3}$

问答题

什么是求积公式的代数精确度?如何利用代数精确度的概念去确定求积公式中的待定参数?

代数精确度:对于函数$f(x)$的次数精确成立的求积公式

如何确定:令$f(x)=x^i(i=0,1,…,m)$,直到精确符合的$m$达到最大的符合值为止

非线性方程求根

填空题

写出立方根 $\sqrt[3]{13}$ 的牛顿迭代公式 ( )。

答:由牛顿迭代公式$x_{n+1}=x_n-\frac{f(x_n)}{f^{\prime}(x_n)}$,可得公式:$x_{k+1}=\frac{2 x_{k}^{3}+13}{3 x_{k}^{2}}$

因此牛顿迭代法的求$\sqrt[3]{x}$ C++函数如下:

1
2
3
4
5
6
7
8
9
10
11
12
float CubeRoot(float num)
{
float x = num;
float error = 1e-5;

while (fabs(num - (x * x * x)) >= error)
{
x = (2 * x + num / (x * x)) / 3.0;
}

return x;
}

选择题

已知方程$x^3-2x-5=0$在$x=2$附近有根,下列迭代格式中在$x_0=2$不收敛的是(C)。

(A) $ x_{k+1}=\sqrt[3]{2 x_{k}+5} $
(B) $ x_{k+1}=\sqrt{2+\frac{5}{x_{k}}} $
(C)$ x_{k+1}=x_{k}^{3}-x_{k}-5 $
(D) $ x_{k+1}=\frac{2 x_{k}^{3}+5}{3 x_{k}^{2}-2} $

计算题

用迭代法求方程$x^3-x-1=0$在$x=1.5$附近的一个根。

解:首先将方程改写为$x_i+1 = (x_i + 1) ^ {\frac{1}{3}}$,接下来用程序进行迭代计算,如下图所示:

1
2
3
4
5
6
7
8
9
10
11
12
#include<bits/stdc++.h>
using namespace std;
int main()
{
double x = 1.5, x0;
while (fabs(x - x0) >= 1e-6)
{
x0 = x;
x = pow(x0 + 1, 1.0 / 3);
}
printf("result: x =%lf\n", x);
}

计算出的根为:x=1.324718

计算题

利用牛顿法求$x^3-2x-55=0$在区间$[3,4]$的根,要求列出迭代计算3次的计算结果。

解:首先将方程改写为$x=(2x^3+55)/(3x^2-2)$,编写迭代算法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<bits/stdc++.h>
using namespace std;

double getF(double x){
return (2*pow(x,3)+55)*(3*x*x-2);
}

int main(){
double t=getF(3);
for(int i=0;i<3;i++){
cout<<i<<" "<<t<<endl;
t=getF(t);
}
}

输出结果为:

1
2
3
0 2725
1 9.01537e+17
2 3.5733e+90

计算题

用埃特金加速法求$x^5+5x^4-2=0$在$-5$附近的根,要求迭代1次,结果保留5位有效数字(精确解位$-4.9968$)。

解:首先将函数化为:$x = (2-5x^4)^{\frac{1}{5}}$,编写迭代1次算法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<bits/stdc++.h>
using namespace std;

double g(double x){
if(2-5*pow(x,4)<0)
return pow(abs(2-5*pow(x,4)),1/5);
return 1;
}

int main(){
double y=g(-5);
double z=g(y);
double x=pow(z-(z-y),2)/(z-2*y-5);
cout<<x<<endl;
return 0;
}

解得x=-4.9968