數值分析 迭代法求解 Python實現

2021-09-14 00:16:05 字數 1458 閱讀 1668

僅供參考

配置環境

# -*- coding: utf-8 -*-

"""迭代法

@author: hhuaf

"""import numpy as np

import matplotlib.pyplot as plt

# input

'''x0:初始值

theta:閾值

'''x0=float(input('輸入初始點:(例如5,10,15,20。。。)\n'))

theta=1e-5

#可以顯示中文

plt.rcparams["font.sans-serif"] = ["simhei"]

plt.rcparams['axes.unicode_minus'] = false

# 設定風格

plt.style.use('ggplot')

# 定義函式,構造數值

init_fun = lambda x: x**2-3*x

tran_fun = lambda x: np.sqrt(3*x)

# 函式影象

fig_1 = plt.figure(figsize = (8, 6))

plt.xlabel('x')

plt.ylabel('y')

plt.title('$f(x)=x^2-3x$ 影象')

# 函式影象

x=if x0>0:

x = np.arange(-1,x0,0.05)

plt.hlines(0,-1,x0,'black','--')

else:

x = np.arange(x0,10,0.05)

plt.hlines(0,x0,10,'black','--')

y = init_fun(x)

# 迭代法

def iterative(func = tran_fun, x0 = x0,theta = theta):

number=0

xi = x0

while true and number <= 100:

xi = func(x0)

plt.vlines(x0,0,init_fun(x0),'blue','--')

plt.scatter(x0,init_fun(x0),c='black')

if abs(xi-x0) < theta:

return xi,number

x0 = xi

number += 1

# 迭代法計算求解x0

xi,number = iterative(tran_fun, x0, theta)

print('迭代結果:'+str(xi))

print('迭代次數:'+str(number))

## 函式求解

plt.plot(x,y)

plt.show()

牛頓迭代法求解

牛頓迭代法又稱為牛頓 拉弗森方法,是牛頓在17世紀提出的一種在實數和複數域上近似求解方程的方法。牛頓迭代法的操作簡單來說就是通過不斷取切線,然後通過切線再不斷逼近相應的解,廢話不多說,我們來看例子。例如如下曲線 y x 2 1 我們在其上面任取一點,不妨取點 a 2,3 以該點做切線,切線方程為 y...

數值分析Jacobi迭代法c c 實現

matlab還沒學精通,正好好久沒寫 了,藉此溫習溫習。include jacobi.h include include include using namespace std using std vector vector double matrix a vector double vector ...

數值作業 牛頓迭代法

記錄學習過程 寫於2020.11.14 include 呼叫標準函式庫,使輸入輸出函式可用 include 呼叫數學函式庫 define n 100 define eps 1e 6 定義全域性變數eps 根的容許誤差 delta 函式絕對值的容許誤差 define eta 1e 8 double a...