大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业
Posted 谈瀛洲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业相关的知识,希望对你有一定的参考价值。
文章目录
《计算机科学计算》第二版
162页第12题(1)
用Newton法求 x 3 − x 2 − x − 1 = 0 x^3 - x^2 - x - 1 = 0 x3−x2−x−1=0 的根,取 x 0 = 2 x_0 = 2 x0=2,要求 x k − x k − 1 < 1 0 − 5 x_k - x_k - 1 < 10^-5 xk−xk−1<10−5。
解:Newton迭代法的公式为 x k + 1 = x k − f ( x k ) f ′ ( x k ) , ( k = 0 , 1 , 2 , . . . ) x_k+1 = x_k - \\fracf(x_k)f'(x_k), (k = 0, 1, 2, ...) xk+1=xk−f′(xk)f(xk),(k=0,1,2,...),
代码如下:
from sympy import *
def g1(x):
return x ** 3 - x ** 2 - x - 1
def f(i):
x = symbols("x") # 符号x,自变量
return i - g1(i) / diff(g1(x), x).subs('x', i);
def solve(x):
y = float(f(x))
i = 1
while (not abs(y - x) < 10 ** -5):
print("第" + str(i) + "次迭代:当前解:" + str(y) + '\\t' + "上一步解:" + str(x) + "\\t" + "误差:" + str(abs(y - x)))
x = y
y = f(x)
i = i + 1
print("第" + str(i) + "次迭代:当前解:" + str(y) + '\\t' + "上一步解:" + str(x) + "\\t" + "误差:" + str(abs(y - x)))
if __name__ == '__main__':
solve(2)
运行结果如图所示:
综上:方程的解为1.83928675521416
162页第16题
Heonardo于1225年研究了方程:
f
(
x
)
=
x
3
+
2
x
2
+
10
x
−
20
=
0
,
f(x) = x^3 + 2x^2 + 10x - 20 = 0,
f(x)=x3+2x2+10x−20=0,
并得出一个根
α
=
1.36880817
\\alpha = 1.36880817
α=1.36880817,但当时无人知道他用了什么方法,这个结果在当时是个非常著名的结果,请你构造一种简单迭代来验证此结果。
解:经计算:
f
(
1.3
)
=
−
1.423
,
f
(
1.4
)
=
0.664
,
f
(
1.3
)
⋅
f
(
1.4
)
<
0
,
当
1.3
≤
x
≤
1.4
时
,
f
′
(
x
)
>
0
,
即
f
(
x
)
在
[
1.3
,
1.4
]
上
有
且
仅
有
一
个
解
,
则
使
用
N
e
w
t
o
n
法
进
行
求
证
:
f(1.3) = -1.423, f(1.4) = 0.664, f(1.3)·f(1.4) < 0, 当1.3 \\leq x \\leq 1.4时, f'(x) > 0,即f(x)在[1.3, 1.4]上有且仅有一个解,则使用Newton法进行求证:
f(1.3)=−1.423,f(1.4)=0.664,f(1.3)⋅f(1.4)<0,当1.3≤x≤1.4时,f′(x)>0,即f(x)在[1.3,1.4]上有且仅有一个解,则使用Newton法进行求证:
代码如下:
from sympy import *
def g1(x):
return x ** 3 + 2 * x ** 2 + 10 * x - 20
def f(i):
x = symbols("x") # 符号x,自变量
return i - g1(i) / diff(g1(x), x).subs('x', i);
def solve(x):
y = float(f(x))
i = 1
while (not abs(y - x) < 10 ** -8):
print("第" + str(i) + "次迭代:当前解:" + str(y) + '\\t' + "上一步解:" + str(x) + "\\t" + "误差:" + str(abs(y - x)))
x = y
y = f(x)
i = i + 1
print("第" + str(i) + "次迭代:当前解:" + str(y) + '\\t' + "上一步解:" + str(x) + "\\t" + "误差:" + str(abs(y - x)))
if __name__ == '__main__':
solve(1.3)
运行结果如图所示:
此处设置的相邻两次结果之差不大于 1 0 − 8 10^-8 10−8,可见最后结果为:1.36880810782137,Heonardo的结果得以验证。
216页第12题
(数值实验题)人造地球卫星的轨道可视为平面上的椭圆,地心位于椭圆的一个焦点处。已知一颗人造地球卫星近地点距地球表面439km,远地点距地球表面2384km,地球半径为6371km。求该卫星的轨道长度。 以上是关于大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业的主要内容,如果未能解决你的问题,请参考以下文章
解:长半轴
a
=
(
2384
+
439
+
6371
∗
2
)
/
2
=
7782.5
k
m
a = (2384 + 439 + 6371 * 2) / 2 = 7782.5km
a=(2384+439+6371∗2)/2=7782.5km,半个焦距
c
=
a
−
439
−
6371
=
972.5
k
m
c = a - 439 - 6371 = 972.5km
c=a−439−6371=972.5km,则短半轴
b
=
a
2
−
c
2
=
7721.5
k
m
b = \\sqrta^2 - c^2 = 7721.5km
b=a2−c2=7721.5km。设参数方程
x
=
7782.5
∗
cos
t
y
=
7721.5
∗
sin
t
\\left\\ \\beginarrayl x = 7782.5 * \\cos t\\\\ y = 7721.5 * \\sin t \\endarray \\right.
x=7782.5∗costy=7721.5∗sint
其中
t
∈
[
0
,
2
π
]
t \\in [0, 2\\pi]
t∈[0,2π]。根据弧长公式:
S
=
∫
α
β
x
′
2
(
t
)
+
y
′
2
(
t
)
d
t
S = \\int_\\alpha^\\beta\\sqrtx^'2(t) + y^'2(t)dt
S=∫αβx′2(t)+y′2(t)dt可知,周长积分公式如下:
L
=
4
∗
∫
0
π
2
(
7782.5
∗
sin
x
)
2
+
(
7721.5
∗
cos
x
)
2
d
x
L = 4 * \\int_0^\\frac\\pi2 \\sqrt(7782.5*\\sinx)^2 + (7721.5