网站建设资讯

NEWS

网站建设资讯

python牛顿法求函数 牛顿法 python

想用python来求解牛顿插值问题,编了一段程序,其中有些错误看不出来,恳请大佬指出错误,代码如下

import matplotlib.pyplot as plt

公司主营业务:做网站、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出凌河免费做网站回馈大家。

from pylab import mpl

import math

"""

牛顿插值法

插值的函数表为

xi      -28.9, -12.2, 4.4, 21.1,  37.8

f(xi)   2.2,    3.9,     6.6, 10.3, 15.4

"""

x=[-28.9,-12.2,4.4,21.1,37.8]

y=[2.2,3.9,6.6,10.3,15.4]

"""计算4次差商的值"""

def Four_time_difference_quotient(x, y):

i = 0            # i记录计算差商的次数

quotient = [0, 0, 0, 0, 0,]

while i  4:

j = 4

while j  i:

if i == 0:

quotient[j]=((y[j]-y[j-1])/(x[j]-x[j-1]))

else:

quotient[j] = (quotient[j]-quotient[j-1])/(x[j]-x[j-1-i])

j -= 1

i += 1

return quotient;

def function(data):

return x[0]+parameters[1]*(data-0.4)+parameters[2]*(data-0.4)*(data-0.55)+\

parameters[3]*(data-0.4)*(data-0.55)*(data-0.65)\

+parameters[4]*(data-0.4)*(data-0.55)*(data-0.80)

"""计算插值多项式的值和相应的误差"""

def calculate_data(x,parameters):

returnData=[];

for data in x:

returnData.append(function(data))

return returnData

"""画函数的图像

newData为曲线拟合后的曲线

"""

def draw(newData):

plt.scatter(x,y,label="离散数据",color="red")

plt.plot(x,newData,label="牛顿插值拟合曲线",color="black")

plt.scatter(0.596,function(0.596),label="预测函数点",color="blue")

plt.title("牛顿插值法")

mpl.rcParams['font.sans-serif'] = ['SimHei']

mpl.rcParams['axes.unicode_minus'] = False

plt.legend(loc="upper left")

plt.show()

parameters=Four_time_difference_quotient(x, y)

yuanzu=calculate_data(x,parameters)

draw(yuanzu)

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;

}

}

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

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

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

求解这道题目

令f(x)=2sin(x+π/3)-x,牛顿法求解f(x)=0,过程为:

f'(x)=2cos(x+π/3)-1,任取初值x₀,令x₁=x₀-f(x₀)/f'(x₀)

然后迭代执行:x₀=x₁,x₁=x₀-f(x₀)/f'(x₀),直到|x₁-x₀|=10⁻⁸,x₁即为所求

C语言代码如下:

#includestdio.h

#includemath.h

#define PI 3.141592653589793

int main() {

double x0 = PI; // 初值任取

double x1 = x0-(2*sin(x0+PI/3)-x0)/(2*cos(x0+PI/3)-1);

while (fabs(x1 - x0) 1e-8) {

  x0 = x1;

  x1 = x0-(2*sin(x0+PI/3)-x0)/(2*cos(x0+PI/3)-1);

}

printf("%.15f\n", x1);

return 0;

}

运行结果如图:

python代码如下:

import math

x0 = math.pi # 初值任取

x1 = x0-(2*math.sin(x0+math.pi/3)-x0)/(2*math.cos(x0+math.pi/3)-1)

while abs(x1-x0) 1e-8:

x0 = x1

x1 = x0-(2*math.sin(x0+math.pi/3)-x0)/(2*math.cos(x0+math.pi/3)-1)

print(x1)

运行结果为:

与C语言结果一致~

牛顿迭代法python程序求平方根和立方根

import math

def sqrt(x):

y = x

while abs(y * y - x) 1e-6:

y = (y + x / y) / 2

return y

print(sqrt(5))

print(math.sqrt(5))


本文名称:python牛顿法求函数 牛顿法 python
网页链接:http://njwzjz.com/article/highog.html