大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业

Posted 谈瀛洲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业相关的知识,希望对你有一定的参考价值。

文章目录

《计算机科学计算》第二版

162页第12题(1)

Newton法求 x 3 − x 2 − x − 1 = 0 x^3 - x^2 - x - 1 = 0 x3x2x1=0 的根,取 x 0 = 2 x_0 = 2 x0=2,要求 x k − x k − 1 < 1 0 − 5 x_k - x_k - 1 < 10^-5 xkxk1<105

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=xkf(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+10x20=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.3x1.4f(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 108,可见最后结果为:1.36880810782137,Heonardo的结果得以验证。

216页第12题

(数值实验题)人造地球卫星的轨道可视为平面上的椭圆,地心位于椭圆的一个焦点处。已知一颗人造地球卫星近地点距地球表面439km,远地点距地球表面2384km,地球半径为6371km。求该卫星的轨道长度。
:长半轴 a = ( 2384 + 439 + 6371 ∗ 2 ) / 2 = 7782.5 k m a = (2384 + 439 + 6371 * 2) / 2 = 7782.5km a=(2384+439+63712)/2=7782.5km,半个焦距 c = a − 439 − 6371 = 972.5 k m c = a - 439 - 6371 = 972.5km c=a4396371=972.5km,则短半轴 b = a 2 − c 2 = 7721.5 k m b = \\sqrta^2 - c^2 = 7721.5km b=a2c2 =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.5costy=7721.5sint
其中 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=αβx2(t)+y2(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

以上是关于大连理工大学软件学院2022年秋季学期《矩阵与数值分析》上机作业的主要内容,如果未能解决你的问题,请参考以下文章

2017年秋季个人阅读计划

2017年秋季学期软件工程第一次作业(陆祈祯)

2017年秋季学期软件工程第一次作业(曹洪茹)

2022年秋季学期人工神经网络第一次作业

2022年秋季学期人工神经网络第五次作业

2022年秋季学期人工神经网络第三次作业