shiyou的数值分析作业

突然想起来可以做做数值分析的作业,于是把室友的数值分析作业拿过来练手,写一篇博客分享一下。其实我这个菜鸟把程序写复杂了,有很多可以简化的地方,由于本菜鸟其它作业还没写完,就不去简化了,大家可以自行改正啦。


数值分析上机题

首先说一下自己的疑惑,对于第一题python怎么实现对ln(x)直接调用求导呢?是直接用泰勒展开后对多项式求导吗?第二题是用Newton迭代法,要求出迭代初始值在什么范围可以得到收敛解,这里如果用迭代程序去实现的话也会比较麻烦,那有没有更好的方法去求解呢?希望有大神可以帮忙留言解惑,多谢。

一、题1——对数的近似求解

1.题目描述

**题目:**这里偷下懒,直接贴出原题的截图吧。
在这里插入图片描述

2.python实现

不多BB,程序在这:

import numpy as np
from sympy import * #用于求导积分等科学计算
import math as m

x = Symbol('x')#x 变量
t = Symbol('t')
y1 = 1/(1+x) #公式
y2 = -1/(1+x) #公式
y3 = 2/(1-x**2) #公式

def func(m):
    res = m
    for j in range(1,m):
        res *= j
    return res

def ln_Tyalor(y):
    Tl_expr = y * (t-x)
    for i in range(1, 10):
        fac = func(i+1)
        f_n = diff(y, x, i)
        Tl_expr += (f_n / fac)*(t-x)**(i+1)
    return Tl_expr.subs({
   x:0})

#print(ln_Tyalor(y1))
sexpr1 = ln_Tyalor(y1)
sexpr2 = ln_Tyalor(y2)
sexpr3 = ln_Tyalor(y3)
A = sexpr1.subs({
   t:1}).evalf()
B = sexpr2.subs({
   t:-1/2}).evalf()
C = sexpr3.subs({
   t:1/3}).evalf()
print('ln2的值:', m.log(2, m.e))
print('方程ln(1+x)的10阶泰勒展开计算结果为:', A,'\n','估计误差为:', abs(m.log(2, m.e)-A))
print('方程ln(1/(1+x))的10阶泰勒展开计算结果为:', B,'\n','估计误差为:', abs(m.log(2, m.e)-B))
print('方程ln((1+x)/(1-x))的10阶泰勒展开计算结果为:', C,'\n','估计误差为:', abs(m.log(2, m.e)-C))

3.输出结果

ln2的值: 0.6931471805599453
方程ln(1+x)10阶泰勒展开计算结果为: 0.645634920634921 
 估计误差为: 0.0475122599250246
方程ln(1/(1+x))10阶泰勒展开计算结果为: 0.693064856150793 
 估计误差为: 8.23244091517905e-5
方程ln((1+x
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值