僅供參考
配置環境
# -*- 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...