编写循环表示数组中的n个多项式

0 投票
1 回答
1858 浏览
提问于 2025-04-17 18:36
import csv
import numpy
from sympy import *
import numpy as np
from numpy import *
import json

reader=csv.reader(open("/Users/61/Desktop/pythonlearning/generator1.csv","rU"),delimiter=',')
a=list(reader)
result=numpy.array(a)
print a 

b = []
for n in range(3):
    b.append(a[n+1][0:3])
print b
e = np.array(b)
f = e.astype(np.float)
print f

x = Symbol("x")
y = Symbol("y")

coeffs = f
F1 = numpy.poly1d(f[0])
F12 = np.polyder(F1)
print F12
F2 = numpy.poly1d(f[1])
F22 = np.polyder(F2)
print F22
F3 = numpy.poly1d(f[2])
F32 = np.polyder(F3) 
print F32

这是我的代码,f是一个数字数组,像这样:[[ 9.68000000e-04 6.95000000e+00 7.49550000e+02] [ 7.38000000e-04 7.05100000e+00 1.28500000e+03] [ 1.04000000e-03 6.53100000e+00 1.53100000e+03]]。基本上,我想把f的值用来形成多项式,然后对这些多项式进行求导。结果像这样:0.001936 x + 6.95 0.001476 x + 7.051 0.00208 x + 6.531。我的问题是,如果我有n个多项式,而不是3个,我该如何写一个循环来处理这些多项式的求导,并且可以方便地使用不同名称的多项式,比如,F1代表第一个多项式,F2代表第二个,以此类推。我试过类似的代码,但没有成功。

i = 1
if i < 3:
    F(i)=numpy.poly1d(f[i-1])
else:
    i = i+1

1 个回答

1

你需要用一个循环来处理数量不定的多项式,并且要用一种数据结构来存储它们。可以试试用字典,然后用一个for循环来遍历。

numberPolynomials = 3
F = {}
for n in range(1, numberPolynomials+1):
    F[n] = np.poly1d(f[n-1])
    F[(n, 2)] = np.polyder(F[n])
    print F[(n, 2)]

这样你就可以用 F[1]F[2] 这样的方式来引用多项式,而不是用 F1F2 等等。你之前叫的 F12F22F32 现在可以用 F[(1,2)]F[(2,2)]F[(3,2)] 来表示。不过,如果你不打算使用原来的那些名称,最好直接覆盖它们,可能只用一个列表就可以了。

这假设你把numpy的3个导入改成:

import numpy as np

撰写回答