关于多项式基函数python的信息

python牛顿法求多项式的根

#includeiostream.h

员工经过长期磨合与沉淀,具备了协作精神,得以通过团队的力量开发出优质的产品。成都创新互联公司坚持“专注、创新、易用”的产品理念,因为“专注所以专业、创新互联网站所以易用所以简单”。公司专注于为企业提供成都做网站、成都网站建设、微信公众号开发、电商网站开发,微信小程序定制开发,软件定制网站开发等一站式互联网企业服务。

#includemath.h

#includeconio.h

const int N=200;

//带入原函数后所得的值

double f(float x)

{

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

}

//带入一阶导函数后所得的值

double f1(double x)

{

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

}

//牛顿迭代函数

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"该数值附近的根已经求出,请重新换近似值"endl;

break;

}

}

if(flag==1)

continue;

else

{

cout"方程的一个根:"x1","" 迭代次数为:"kendl;

y[count]=x1;

count++;

}

//else

//cout"计算失败!"endl;

}

}

//你的程序其实没问题,牛顿迭代法本身循环一次只能找到一个答案,只要再建一个循环控制使

//用迭代法的次数和判断根的个数就行。我又加了一个判断是否有重复的根的循环。

//希望能对你有所帮助。

python 拉格朗日插值 不能超过多少个值

拉格朗日插值Python代码实现

1. 数学原理

对某个多项式函数有已知的k+1个点,假设任意两个不同的都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:

其中每个lj(x)为拉格朗日基本多项式(或称插值基函数),其表达式为:

2. 轻量级实现

利用

直接编写程序,可以直接插值,并且得到对应的函数值。但是不能得到系数,也不能对其进行各项运算。

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)就是插值函数,直接调用就行。参数说明如下:

x,y分别是对应点的x值和y值。具体详解下解释。

a为想要取得的函数的值。

事实上,最简单的拉格朗日插值就是两点式得到的一条直线。

例如:

p点(1,0)q点(0,2)

这两个点决定了一条直线,所以当x=2的时候,y应该是-2

该代码就是利用这两个点插值,然后a作为x=2调用函数验证的。

3. 引用库

3.1 库的安装

主要依赖与 scipy。官方网站见:

安装的方法很简单,就是使用pip install scipy 如果失败,则将whl文件下载到本地再利用命令进行安装。

可能如果没有安装numpy

3.2 库的使用

from scipy.interplotate import lagrange

直接调用lagrange(x,y)这个函数即可,返回 一个对象。

参数x,y分别是对应各个点的x值和y值。

例如:(1,2) (3,5) (5,9)这三个点,作为函数输入应该这么写:

x=[1,3,5]

y =[2, 5, 9]

a=lagrange(x,y)

直接输出该对象,就能看到插值的函数。

利用该对象,能得到很多特性。具体参见:

a.order得到阶

a[]得到系数

a()得到对应函数值

此外可以对其进行加减乘除运算

3.3 代码实现

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])   

结果是:

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

第二行和第三行就是插值的结果,显示出的函数。

第二行的数字是对应下午的x的幂,如果对应不齐,则是排版问题。

5.0 7.0 10.0

第四行是代入的x值,得到的结果。

也就是说,用小括号f(x)的这种形式,可以直接得到计算结果。

28.1333333333 30.6527777778 -7.30555555556

python 编程,求多项式的根

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"计算结果: x="x", f(x)="f(x)endl;

system("pause");

return 0;

运行结果:输入0.9,输出daox=0.910008, f(x)=6.36005e-009

扩展资料:

根据PEP的规定,必须使用4个空格来表示每级缩进(不清楚4个空格的规定如何,在实际编写中可以自定义空格数,但是要满足每级缩进间空格数相等)。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为兼容很旧的的Python程序和某些有问题的编辑程序。

参考资料来源:百度百科-Python

急求 python 使用class定义多项式P(x)=a0=a1x+a2x^2……anx^n 使用__init__()产生一个列表记录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编程求多项式sn=1-3+5-7+9-11+……的前100项和

he = 0

for n in range(0,100):

if (n % 2 == 0):

he += 2 * n +1

else:

he -= 2 * n + 1

print(he)

代码这样就差不多了


名称栏目:关于多项式基函数python的信息
网址分享:http://ybzwz.com/article/hgicog.html