在實現拉格朗日插值時遇到乙個問題,即:
當我們手算時用拉格朗日很容易得到具體表示式,但是當我們用機器實現時,卻很難得到,因為機器不能表達出未知數x(雖然可以用tensorflow的佔位符,但殺雞焉用牛刀),因此我們能很容易的得到具體的近似解,卻無法得到表示式。
但是,python的scipy庫中的lagrange實現了這一功能,如圖:
所以我不禁思考如何實現這一功能,後來我換了乙個思路,將係數當成方程組解,用高斯消元法求解。
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import lagrange
defmain_element_gauss
(a,n):
for i in range(0,n-1):
if(np.max(np.fabs(a[i:,i]))!=np.fabs(a[i,i])): #如果當前係數不是最大值,則列主元
temp_i=int(np.where(np.fabs(a[i:,i])==np.max(np.fabs(a[i:,i])))[0]) #temp_i為最大值所在的行索引
#print(a[temp_i+i,i])
a[[i,temp_i+i],:]=a[[temp_i+i,i],:] #交換
for j in range(i+1,n):
a[j,:]=a[j,:]-a[i,:]*(a[j,i]/a[i,i]) #消元
a[j,i]=0
#print("第%d次消元係數矩陣為:\n"%(i+1),a)
#回代得解
x=np.zeros((n,1))
for i in range(n-1,-1,-1):
temp=0
for j in range(0,n):
temp+=a[i,j]*x[j,0]
x[i,0]=(a[i,n]-temp)/a[i,i]
return x
defmain
(): x=[float(i) for i in (input("請輸入x的對應值:").split())]
y=[float(i) for i in (input("請輸入y的對應值:").split())]
#scipy
#print(lagrange(x,y))
x_t=np.array(x)
y_t=np.array(y).reshape(len(y),1)
x1=np.zeros((len(x),len(x)))
#求出表示式的增廣矩陣
for i in range(len(x)):
for j in range(len(x)):
x1[i,j]=x_t[i]**(j)
c=np.hstack((x1,y_t))
#得到係數解
result=main_element_gauss(c,len(x))
#輸出表示式,結果保留兩位
expression="\n表示式:"+str('%.2f'%float(result[0]))+"+("+str('%.2f'%float(result[1]))+")*x"
for i in range(2,len(x)):
expression=expression+"+("+str('%.2f'%float(result[i]))+")*(x**"+str(i)+")"
print(expression)
#在最小值至最大值區間取1000點
x_temp=np.linspace(np.min(x),np.max(x),1000,endpoint=true)
#繪圖y_temp=
for x in x_temp:
temp_result=0.0
for i in range(0,len(x)):
temp_result=temp_result+result[i]*(x**i)
plt.title("lagrange")
plt.plot(x,y,'s',label="original values")#藍點表示原來的值
plt.plot(x_temp,y_temp,'r',label='lagrange values')#擬合曲線
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=4)#指定legend的位置右下角
vuejs之插值表示式
插值表示式是vuejs中實現資料渲染到頁面的一種手段,可以直接讓資料從模型到檢視,不需要dom操作,在大括號裡面給我們提供了js語境,可以執行簡單的js 插值表示式就是 如下操作,將模型變數中的屬性直接放到插值表示式中可以實現資料渲染到頁面的效果,div body script var vm new...
插值表示式閃爍問題
頁面初始化時,html會出現短暫的 再載入頁面。原因 html頁面載入時先構建dom,再載入vue。在vue初始化完成前,dom將 解析為文字,在vue初始化後 才會把 解析成vue的語法。此時列表渲染會有短暫的一閃的情況。解決方法1 使用template標籤將需要渲染的 html 包起來。temp...
Vue初學 插值表示式
首先我們要引入對應的vue的js檔案,或者直接引用vue官網的js檔案。插值表示式的語法是使用兩個大括號包裹住需要渲染的資料 定義data el 代表的是element,表示建立的vue物件要掛載到哪個元素上,el的取值可以是該元素的id,或者是class,或者是dom元素,也可以是標籤,但是不可以...