關(guān)于多項(xiàng)式基函數(shù)python的信息

python牛頓法求多項(xiàng)式的根

#includeiostream.h

員工經(jīng)過(guò)長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過(guò)團(tuán)隊(duì)的力量開(kāi)發(fā)出優(yōu)質(zhì)的產(chǎn)品。成都創(chuàng)新互聯(lián)公司堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、電商網(wǎng)站開(kāi)發(fā),微信小程序定制開(kāi)發(fā),軟件定制網(wǎng)站開(kāi)發(fā)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

#includemath.h

#includeconio.h

const int N=200;

//帶入原函數(shù)后所得的值

double f(float x)

{

return (x*x*x-1.8*x*x+0.15*x+0.65);

}

//帶入一階導(dǎo)函數(shù)后所得的值

double f1(double x)

{

return (3*x*x-3.6*x+0.15);

}

//牛頓迭代函數(shù)

double F(double x)

{

double x1;

x1=x-1.0*f(x)/f1(x);

return (x1);

}

void main()

{

double x0,D_value,x1,y[4];

int k=0,count=0;

for(;;)

{

if(count==3)break;

cout"輸入初始值:";

cinx0;

do

{

k++;

x1=F(x0);

D_value=fabs(x1-x0);

x0=x1;

}

while((D_value0.000005)(k=N));

for(int j=0,flag=0;jcount;j++)

{

if(fabs(y[j]-x1)0.000005)

{ flag=1;

cout"該數(shù)值附近的根已經(jīng)求出,請(qǐng)重新?lián)Q近似值"endl;

break;

}

}

if(flag==1)

continue;

else

{

cout"方程的一個(gè)根:"x1","" 迭代次數(shù)為:"kendl;

y[count]=x1;

count++;

}

//else

//cout"計(jì)算失敗!"endl;

}

}

//你的程序其實(shí)沒(méi)問(wèn)題,牛頓迭代法本身循環(huán)一次只能找到一個(gè)答案,只要再建一個(gè)循環(huán)控制使

//用迭代法的次數(shù)和判斷根的個(gè)數(shù)就行。我又加了一個(gè)判斷是否有重復(fù)的根的循環(huán)。

//希望能對(duì)你有所幫助。

python 拉格朗日插值 不能超過(guò)多少個(gè)值

拉格朗日插值Python代碼實(shí)現(xiàn)

1. 數(shù)學(xué)原理

對(duì)某個(gè)多項(xiàng)式函數(shù)有已知的k+1個(gè)點(diǎn),假設(shè)任意兩個(gè)不同的都互不相同,那么應(yīng)用拉格朗日插值公式所得到的拉格朗日插值多項(xiàng)式為:

其中每個(gè)lj(x)為拉格朗日基本多項(xiàng)式(或稱插值基函數(shù)),其表達(dá)式為:

2. 輕量級(jí)實(shí)現(xiàn)

利用

直接編寫程序,可以直接插值,并且得到對(duì)應(yīng)的函數(shù)值。但是不能得到系數(shù),也不能對(duì)其進(jìn)行各項(xiàng)運(yùn)算。

123456789101112

def?h(x,y,a):????ans=0.0????for?i?in?range(len(y)):????????t=y[i]????????for?j?in?range(len(y)):????????????if?i !=j:????????????????t*=(a-x[j])/(x[i]-x[j])????????ans?+=t????return?ansx=[1,0]y=[0,2]print(h(x,y,2))

上述代碼中,h(x,y,a)就是插值函數(shù),直接調(diào)用就行。參數(shù)說(shuō)明如下:

x,y分別是對(duì)應(yīng)點(diǎn)的x值和y值。具體詳解下解釋。

a為想要取得的函數(shù)的值。

事實(shí)上,最簡(jiǎn)單的拉格朗日插值就是兩點(diǎn)式得到的一條直線。

例如:

p點(diǎn)(1,0)q點(diǎn)(0,2)

這兩個(gè)點(diǎn)決定了一條直線,所以當(dāng)x=2的時(shí)候,y應(yīng)該是-2

該代碼就是利用這兩個(gè)點(diǎn)插值,然后a作為x=2調(diào)用函數(shù)驗(yàn)證的。

3. 引用庫(kù)

3.1 庫(kù)的安裝

主要依賴與 scipy。官方網(wǎng)站見(jiàn):

安裝的方法很簡(jiǎn)單,就是使用pip install scipy 如果失敗,則將whl文件下載到本地再利用命令進(jìn)行安裝。

可能如果沒(méi)有安裝numpy

3.2 庫(kù)的使用

from scipy.interplotate import lagrange

直接調(diào)用lagrange(x,y)這個(gè)函數(shù)即可,返回 一個(gè)對(duì)象。

參數(shù)x,y分別是對(duì)應(yīng)各個(gè)點(diǎn)的x值和y值。

例如:(1,2) (3,5) (5,9)這三個(gè)點(diǎn),作為函數(shù)輸入應(yīng)該這么寫:

x=[1,3,5]

y =[2, 5, 9]

a=lagrange(x,y)

直接輸出該對(duì)象,就能看到插值的函數(shù)。

利用該對(duì)象,能得到很多特性。具體參見(jiàn):

a.order得到階

a[]得到系數(shù)

a()得到對(duì)應(yīng)函數(shù)值

此外可以對(duì)其進(jìn)行加減乘除運(yùn)算

3.3 代碼實(shí)現(xiàn)

1234567? ?from?scipy.interpolate?import?lagrangex=[1,2,3,4,7]y=[5,7,10,3,9]a=lagrange(x,y)print(a)print(a(1),a(2),a(3))print(a[0],a[2],a[3])? ?

結(jié)果是:

class 'numpy.lib.polynomial.poly1d' 4

4 ? ? ? ? ? ?3 ? ? ? ? ? ? ?2

0.5472 x - 7.306 x + 30.65 x - 47.03 x + 28.13

5.0 7.0 10.0

28.1333333333 30.6527777778 -7.30555555556

解釋:

class 'numpy.lib.polynomial.poly1d' 4

這一行是輸出a的類型,以及最高次冪。

4 ? ? ? ? ? ?3 ? ? ? ? ? ? ?2

0.5472 x - 7.306 x + 30.65 x - 47.03 x + 28.13

第二行和第三行就是插值的結(jié)果,顯示出的函數(shù)。

第二行的數(shù)字是對(duì)應(yīng)下午的x的冪,如果對(duì)應(yīng)不齊,則是排版問(wèn)題。

5.0 7.0 10.0

第四行是代入的x值,得到的結(jié)果。

也就是說(shuō),用小括號(hào)f(x)的這種形式,可以直接得到計(jì)算結(jié)果。

28.1333333333 30.6527777778 -7.30555555556

python 編程,求多項(xiàng)式的根

t,a,r=0,1,0

while a=100:

空if t==0:

空空r,t=r+a,1

空else:

空空r,t=r-a,0

空a+=2

print r

以f(x)=3x^2-e^x為例,以下為C++代碼:

#includeiostream

{

double x;

cout"輸入du初始迭代zhi值:"endl;

cinx;

while(abs(f(x))0.00001) x=x-f(x)/fd(x);

cout"計(jì)算結(jié)果: x="x", f(x)="f(x)endl;

system("pause");

return 0;

運(yùn)行結(jié)果:輸入0.9,輸出daox=0.910008, f(x)=6.36005e-009

擴(kuò)展資料:

根據(jù)PEP的規(guī)定,必須使用4個(gè)空格來(lái)表示每級(jí)縮進(jìn)(不清楚4個(gè)空格的規(guī)定如何,在實(shí)際編寫中可以自定義空格數(shù),但是要滿足每級(jí)縮進(jìn)間空格數(shù)相等)。使用Tab字符和其它數(shù)目的空格雖然都可以編譯通過(guò),但不符合編碼規(guī)范。支持Tab字符和其它數(shù)目的空格僅僅是為兼容很舊的的Python程序和某些有問(wèn)題的編輯程序。

參考資料來(lái)源:百度百科-Python

急求 python 使用class定義多項(xiàng)式P(x)=a0=a1x+a2x^2……anx^n 使用__init__()產(chǎn)生一個(gè)列表記錄a的值

pip?install?future

from?__future__?import?division,?unicode_literals,?print_function

from?future.utils?import?python_2_unicode_compatible

import?re

@python_2_unicode_compatible

class?P(object):

def?__init__(self,a):

self.a=a

def?__add__(self,p):

a,b=self.a,?p.a

if?len(self.a)len(p.a):

a,b=b,a

for?i?in?range(len(b)):

a[i]+=b[i]

return?P(a)

def?der(self):

a=[]

for?i,j?in?enumerate(self.a,1):

a.append(i*j)????????

return?self._getStr('dP(x)/dx?=?',a)

def?ind(self):

a=[]

for?i,j?in?enumerate(self.a,1):

a.append(i/j)????????

return?self._getStr('P(x)dx?=?',['c']+a)????????

def?_getStr(self,prefix='P(x)?=?',a=None):

if?not?a:

a=self.a

s=''????????

for?i,j?in?enumerate(a):

if?j:

if?0==i:

s=j

else:

if?not?s:

s='{}x^{}'.format(j,i)

else:

s='{}?+?{}x^{}'.format(s,j,i)

if?not?s:

s='0'????????

s=re.sub(r'x\^1?','x?',s)

s=re.sub(r'^1x|?1x','?x',s)

return?'{}{}'.format(prefix,s)

def?__str__(self):

return?self._getStr()

def?main():

p1=P([1,2,3])

p2=P([0,1,0,1,6,77,8])????

print('p1:',p1)

print('p2:',p2)

print('p1+p2:',p1+p2)

print('derivative?of?p1:',p1.der())

print('indefinite?of?p2:',p2.ind())

if?__name__=='__main__':

main()

用python編程求多項(xiàng)式sn=1-3+5-7+9-11+……的前100項(xiàng)和

he?=?0

for?n?in?range(0,100):

if?(n?%?2?==?0):

he?+=?2?*?n?+1

else:

he?-=?2?*?n?+?1

print(he)

代碼這樣就差不多了

文章名稱:關(guān)于多項(xiàng)式基函數(shù)python的信息
本文路徑:http://muchs.cn/article6/hgicog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、移動(dòng)網(wǎng)站建設(shè)、微信小程序企業(yè)建站、面包屑導(dǎo)航服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)