二次樣條插值

2021-10-02 00:10:45 字數 2280 閱讀 8746

# encoding:utf-8

import numpy as np

import matplotlib.pyplot as plt

# 關鍵點

x = [2.0, 4.5, 7.0, 9.0, 11.0]

y = [1.5, 2.5, 1.5, 0.5, 5.0]

def main():

# 檢查長度

if len(x) != len(y):

print('error! len(x) != len(y)')

return

# 第乙個點到第二個點之間使用直線連線,計算斜率和截距

slope = (y[1] - y[0]) / (x[1] - x[0])

intercept = y[0] - slope * x[0]

bivariate_primary_plot(0, slope, intercept, x[0], x[1])

# 第二個點到最後乙個點之間使用二次函式擬合

for i in range(1, len(x) - 1):

# 2 * x1 * a + b = y1'

# x1 * x1 * a + x1 * b + c = y1

# x2 * x2 * a + x2 * b + c = y2

a11 = 2 * x[i]

a12 = 1

a13 = 0

b1 = slope

a21 = x[i] * x[i]

a22 = x[i]

a23 = 1

b2 = y[i]

a31 = x[i + 1] * x[i + 1]

a32 = x[i + 1]

a33 = 1

b3 = y[i + 1]

[a, b, c] = cramer_law(a11, a12, a13, b1, a21, a22, a23, b2, a31, a32, a33, b3)

slope = 2 * a * x[i + 1] + b

bivariate_primary_plot(a, b, c, x[i], x[i + 1])

# 畫出關鍵點

plt.scatter(x, y, marker = 'o', color = 'black', s = 60)

plt.grid()

plt.show()

# 畫二次函式曲線

def bivariate_primary_plot(a, b, c, x_min, x_max):

x = np.arange(x_min, x_max, 0.01)

y = a * x * x + b * x + c

plt.plot(x, y, linewidth = '2.5', color = 'red')

# 克拉莫法則解三元一次方程組

三次樣條插值

條件 1 輸入 x y f x 0 leq i leq n 2 要求擬合的曲線 s x 滿足 對於任意的 1 leq i leq n 1 在 x 處一階二階導數連續,s x 也連續,且 s x f x s x f x 求解過程 設 s m 對於區間 x x s x 是 x x 上的線性函式,所以設 ...

三次樣條插值 c

include include include include using namespace std double zuigan double a,double b,double c,double f,int n 追趕法求線性方程組 for int i 0 ifor int i n 2 i 0 i...

三次樣條插值介紹

樣條插值是一種工業設計中常用的 得到平滑曲線的一種插值方法,三次樣條是其中用的較為廣泛的一種。樣條插值最初是用於函式擬合 對於平面上的離散點,進行函式擬合時,一種簡單粗暴的方法就是不光滑的直線來將離散的點相連,即我們通常所說的線性擬合。線性擬合會存在乙個問題,擬合出來的函式不夠 光滑 為了讓線條更加...