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