我试图告诉maxima有关hermite多项式的递归关系:
我的第一个表达是这样的:
phi[0]:exp(-1/2*x^2);
phi[1]:sqrt(2)*x*phi[0];
wxplot2d([phi[0],phi[1]], [x,-5,5]);
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,但我现在要通过以下方式定义所有其他内容:
phi[n]:sqrt(2/n)*x*phi[n-1] - sqrt((n-1)/n)*phi[n-2];
Run Code Online (Sandbox Code Playgroud)
这只是炸弹(堆栈溢出).我真的想这么说
wxplot2d(phi [10],[x,-5,5])会给我一个明智的图片吗?
我需要表示多个变量的多项式,即
x^3 + xy^4 + xz^2w + uq^2we^3
Run Code Online (Sandbox Code Playgroud)
我查看了 scipy 包,它似乎只处理最多 3 个变量的多项式。我想用这些多项式执行的主要操作是
1)多项式的乘法
2) 针对多项式单个变量的积分(定积分)
3) 将多项式(固定变量和次数)曲线拟合到数据点
任何线索都会有帮助。如果在我实施之前有人已经做好了工作,那就太好了。
另外,作为旁注,我从未接触过张量,但我怀疑这些操作很自然地表达为某种张量?有没有好的张量库可供我使用并尝试找出如何将这些操作表示为张量?再说一遍,我根本没有接触过张量,但我绝对可以轻松学习它。
我正在使用该类numpy.polynomial.polynomial.Polynomial(Numpy 库),以便将fit()某些数据与多项式函数相匹配。获得的多项式是正确的,我可以绘制它并替换点以获得 \xe2\x80\x98y\xe2\x80\x99 值,并且我得到正确的响应。问题是该类.coef的属性Polynomial返回一组系数,这些系数以某种方式标准化或更改,但我不知道如何进行标准化或更改。我是什么意思?代码如下:
x_vid = array([0.0, 50.0, 75.0, 100.0])\ny_vid = array([0.0, 30.0, 55.0, 100.0])\npol = Polynomial.fit(x_vid, y_vid, 5) # The polynomial is OK!!\nprint pol.coef\nRun Code Online (Sandbox Code Playgroud)\n\n该.coef属性返回下一个数组:
30 38.16 17.93 9.98 2.06 1.85\nRun Code Online (Sandbox Code Playgroud)\n\n这些系数按递增顺序排列,因此这些系数表示以下多项式函数:
\n\n\n\n\n30 + 38.16x + 17.93x^2 + 9.98x^3 + 2.06x^4 + 1.85x^5
\n
然而,问题来了,如果我替换我的值范围 [0-100] 中的任何值,它将不会返回正确的值,尽管如果我这样做,例如:
\n\npol(0)\xe2\x86\x92 我会得到一个 0,这是可以的,但立即发现在我编写的多项式中,它不会在 x=0 时返回 0。
我认为多项式函数可能会被标准化或移位。我可能在这里面临一个数学问题,而不是编程问题,但任何帮助都非常受欢迎,因为我需要写下多项式,但我不确定它的正确形式。谢谢。
\n\n\n我正在使用线性混合效应模型(使用lme()R中nlme包中的函数运行),它具有一个固定效果和一个随机截距项(以考虑不同的组).该模型是如此指定的三次多项式模型(遵循以下建议):
M1 = lme(dv ~ poly(iv,3), data=dat, random= ~1|group, method="REML")
Run Code Online (Sandbox Code Playgroud)
仅限一些示例数据:
> dput(dat)
structure(list(group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1",
"2"), class = "factor"), iv = c(24L, …Run Code Online (Sandbox Code Playgroud) 我有一些不适合线性回归的数据:
实际上应该“完全”拟合二次函数:
P = R*I**2
Run Code Online (Sandbox Code Playgroud)
我在做这个:
model = sklearn.linear_model.LinearRegression()
X = alambres[alambre]['mediciones'][x].reshape(-1, 1)
Y = alambres[alambre]['mediciones'][y].reshape(-1, 1)
model.fit(X,Y)
Run Code Online (Sandbox Code Playgroud)
是否有机会通过执行以下操作来解决它:
model.fit([X,X**2],Y)
Run Code Online (Sandbox Code Playgroud) python pandas scikit-learn polynomials non-linear-regression
定义多项式
# a specific polynomial x**0 + x**1 + x**2 + x**3
p = [1, -2.8176255165067872, -0.97639120853458261, -0.86023870029448335]
Run Code Online (Sandbox Code Playgroud)
这是一个很好的例子来证明这种差异,
import numpy as np
r1 = np.roots(p); r2 = np.polynomial.polynomial.polyroots(p)
f = lambda x: np.sum([x**i*j for i,j in enumerate(p)])
print "{:>10} {:>10}".format("roots","polyroots")
for i,j in zip(r1, r2): # test should return 0
print "{:10.5f} {:10.5f}".format(np.abs(f(i)),np.abs(f(j)))
Run Code Online (Sandbox Code Playgroud)
输出显然不为零
roots polyroots
46.41221 0.00000
1.97595 0.00000
1.97595 0.00000
Run Code Online (Sandbox Code Playgroud)
在比较中,Mathematica正确地获得了根源:
fn[x_] := 1.` - 2.817625516506788` x - 0.97639120853458261` x^2 - …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种比在这样的问题中找到最佳系数(又称权重)的快于强力的算法:
将样本定义为一系列N个数字.在这种情况下,比如说N = 10.样本数M非常大,比如M = 1000000.这基本上是M行XN列的矩阵.所以这些样本的集合如下所示:
S_0_0 S_0_1 S_0_2 ... S_0_N
S_1_0 S_1_1 S_1_2 ... S_1_N
...
S_M_0 S_M_1 S_M_2 ... S_M_N
Run Code Online (Sandbox Code Playgroud)
此外,还有一系列相应的N个权重.权重系列P的数量也很大,比如P = 2000000.这是P行XN列的另一个矩阵.它看起来类似于样本集:
W_0_0 W_0_1 S_0_2 ... W_0_N
W_1_0 W_1_1 S_1_2 ... W_1_N
...
W_P_0 W_P_1 S_P_2 ... W_P_N
Run Code Online (Sandbox Code Playgroud)
我试图找到一系列权重(即权重集中的右行),它最大化了以下总和(即行x):
W_x_0 * S_0_0 + W_x_1 * S_0_1 + ... + W_x_N * S_0_N +
W_x_0 * S_1_0 + W_x_1 * S_1_1 + ... + W_x_N * S_1_N + …Run Code Online (Sandbox Code Playgroud) 我写了一个简单的Fortran代码,其执行的多项式插值n+1点R^2。它使用两个LAPACK程序(我的代码中的所有内容都是双精度)求解线性方程组(我正在创建 Vandermonde 矩阵):
首先,它分解矩阵:http : //sites.science.oregonstate.edu/~landaur/ nacphy/lapack/routines/dgetrf.html
后来系统解决了:http : //sites.science.oregonstate.edu/~landaur/nacphy/lapack/routines/dgetrs.html
该程序适用于从多项式生成的几个测试数据案例:0,1,2,3,4。然而,当我从多项式中提供 11 个点时,P(x) = x^10它推断出完全错误的系数。
输入 ( x..., y...):
1.0
1.001
1.002
1.003
1.004
1.005
1.006
1.007
1.008
1.009
1.01
1.0
1.01004512021
1.02018096336
1.03040825707
1.04072773401
1.05114013204
1.06164619412
1.07224666847
1.08294230847
1.0937338728
1.10462212541
Run Code Online (Sandbox Code Playgroud)
输出 ( a_n,...,a_0):
-4.6992230177E+004
2.2042918738E+005
-3.2949938635E+005
5.0740528522E+004
2.4764893257E+005
-3.1846974845E+004
-1.7195378863E+005
-1.4751075818E+005
4.1766709741E+005
-2.6476448046E+005
5.6082872757E+004
Run Code Online (Sandbox Code Playgroud)
我遇到数值稳定性问题了吗?还是我做错了什么?
编辑:我附上了插值过程的代码(注意,我们实际上没有n点n+1)。
module InterpolatorModule
contains
subroutine interpolate(n, x, y, …Run Code Online (Sandbox Code Playgroud) 我想在 c 中打印出一个多项式表达式,但我不知道将 x 打印为一个数字的幂printf
我已经将四阶多项式曲线拟合到我的数据中,如下所示:
y<-c(-13,16,35,40,28,36,43,33,40,33,22,-5,-27,-31,-29,-25,-26,-31,-26,-24,-25,-29,-23,4)
x<-1:24
#4th order polynomial fit
fit<-lm(y~poly(x,4,raw=TRUE))
plot(x,y,ylim=c(min(y)-10,max(y)+10))
lines(x,predict(fit,data.frame(x=x)),col="red")
abline(h=0,lty=2)
Run Code Online (Sandbox Code Playgroud)
我的最终目标是计算这条曲线与零线相交的 3 个点。
所以首先,我需要延长曲线拟合的末端,使其第三次超过零线。完成此操作后,我想计算该方程通过零线的 3 个点。
r curve-fitting polynomial-math polynomials polynomial-approximations
polynomials ×10
python ×4
math ×2
numpy ×2
r ×2
algorithm ×1
c ×1
fortran ×1
fortran90 ×1
hermite ×1
lapack ×1
maxima ×1
mixed-models ×1
nlme ×1
pandas ×1
predict ×1
python-2.7 ×1
recurrence ×1
scikit-learn ×1
scipy ×1
subscript ×1
superscript ×1
unicode ×1