计算方法上机报告

一、莱昂纳多(Leonardo)方程求解

        莱昂纳多(Leonardo)在1225年研究了方程x^{3}+2x^{2}+10x-20=0,并且得到它的一个根x*=1.368808107,无人知道他是怎么做到的,因此该方程也称为莱昂纳多方程。

        请问该方程除了以外还有其它的实根吗?并构造一个收敛的迭代格式进行计算,全局收敛到每一个根上,并使所求解的误差满足\left | x_{k}-x* \right |< 10^{-10}

1.算法思想

f\left ( x \right )=x^{3}+2x^{2}+10x-20

f{}'\left ( x \right )=3x^{2}+4x+10

f{}'\left ( x \right )恒大于零,故f\left ( x \right )为递增函数,只有唯一解。

构造牛顿迭代公式:\varphi \left ( x \right )=x-\frac{f\left ( x \right )}{f{}'\left ( x \right )}

2.源程序

from sympy import symbols, diff
'''求解非线性方程类'''
def sub(f,x):
    result = f.subs('x',float(x))
    return result

def newton(x,f,df,e,iter):
    n=1
    while n<= iter:
        x1 = x-sub(f,x)/sub(df,x)
        if abs(x1-x)<e:
            return x1,n
        else:
            print("%f"%x1)
            x=x1
            n+=1
    return None,n


if __name__ == "__main__":
    x = symbols("x")
    f = (x ** 3) + 2 * (x ** 2) + 10 * x - 20
df = diff(f, x)
print(newton(3,f,df,0.0000000001,20))

3.实验结果

输出数据:

1.877551

1.434457

1.370035

1.368809

1.368808

(1.36880810782137,6)

二、计算国土面积

        为了要估算某个国家的国土面积,对其地图做以下方式的测量标注:从西向东方向定为x轴,由南向北方向为y轴,选择一个合适的坐标原点,并从最西边界点到最东边界点在x轴上的投影区间上选取30个点,在每个分点的y方向测出国土的南边界点和北边界点的坐标y_{1}y_{2},并列于下表中。数据单位为cm,根据地图的比例尺,1cm的约为实际长度25km。对于国土边界有两个假设,一种假设该国土边界就是以给定数据点为折线的边界,另一种假设该国土边界是光滑曲线,试分别计算出该国家国土的面积,并估计一下误差范围。

x值

y_{1}

y_{2}

1.4

26.1

26.1

5.0

27.4

43.6

7.6

30.5

56.5

12.3

33.1

58.9

29.3

34.5

83.4

35.9

19.4

88.7

40.1

9.7

101.4

43.7

11.1

104.9

51.9

14.4

103.3

57.1

16.7

111.5

64.8

14.4

112.8

73.0

22.6

110.3

77.1

27.3

112.4

88.0

28.4

112.1

93.1

24.9

116.2

98.3

17.9

119.7

101.4

13.2

116.2

103.9

7.4

115.2

109.1

12.1

115.5

115.8

50.7

115.2

121.4

39.0

110.3

134.8

37.8

71.7

140.5

35.5

69.4

144.6

33.1

70.6

148.7

50.3

75.2

155.9

51.8

74.1

157.0

54.2

54.2

1.算法思想

        如果使用多项式插值,由于龙格现象,误差较大。因此,用相对较少的插值数据点作插值,可以避免大的误差。但是又希望将所得数据点都用上,且所用数据点越多越好,可以采用分段插值方式,即用分段多项式代替单个多项式作插值。分段多项式是由一些在相互连接的区间上的不同多项式连接而成的一条连续曲线。通过分段函数插值逼近原函数,然后进行数值积分。

        假设一:该国土边界就是以给定数据点为折线的边界,此时可以使用梯形求积公式分段计算国土面积。

        假设二:该国土边界是光滑曲线,此时应该采用三次样条插值函数来近似曲线。

2.分段线性插值的原理

        设已知点a=x_{0}< x_{1}<\cdots <x_{n}=b上的函数值f\left ( x_{0} \right ),f\left ( x_{1} \right ),\cdots ,f\left ( x_{n} \right ),若有一折线y\left ( x \right )函数满足:

  1. \left [a,b \right ]上连续
  2. y\left ( x_{i} \right )=f\left ( x_{i} \right ),i=0,1,2,\cdots ,n
  3. 在每个子区间\left [ x_{i},x_{i+1} \right ]上是线性函数

        则称y\left ( x \right )f\left ( x \right )的分段线性插值函数。由插值多项式的唯一性,在每个小区间上可表示为:

y\left ( x \right )=\frac{x-x_{i+1}}{x_{i}-x_{i+1}}f\left ( x_{i} \right )+\frac{x-x_{i}}{x_{i+1}-x_{i}}f\left ( x_{i+1} \right ),x_{i}< x< <x_{i+1}

分段线性插值函数L_{n}\left ( x \right )的余项函数R\left ( x \right )=f\left ( x \right )-L_{n}\left ( x \right )满足\left | R(x) \right |\leq \frac{h^{2}M}{8},其中h=\mathop{max}\limits_{0\leq i\leq n-1}\left | x_{i+1}-x_{i} \right |M=\mathop{max}\limits_{0\leq i\leq n-1}\left | f{}''\left ( x \right )\right |

3.三次样条插值的原理

        从数学角度:在小挠度的假定下,它实际上是由一段一段的三次多项式曲线拼接而成的,在拼接处,函数自身不仅是连续的,而且它的1阶、2阶导数也是连续的,但三阶导数一般不连续。因此,样条曲线具有非常好的光滑性。

        令第一种边界条件: complete,给定边界一阶导数且相等,也称压紧样条。

        第二种边界条件: second,给定边界的二阶导数且相等。natural,自然边界条件,边界处二阶导数为0,它是通过所有数据点的插值函数中,总曲率最小的唯一函数,因此自然三次样条是插值所有数据点的最光滑的函数。

        第三种边界条件: periodic,当被插值函数是以b-a为周期的周期函数时,则要求S(x)也是周期函数,也称周期样条。

        三次样条插值函数就是全部通过样点的二阶连续可微的分段三次多项式函数。

        这里采用natural边界条件,即边界处二阶导数为0。

完整版:【免费】计算方法上级报告-大规模稀疏线性方程组的求解资源-CSDN文库

  • 23
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值