我正在使用lm(y~poly(x,2))适合数据的二阶多项式。但是我只是找不到指定已知拦截值的方法。如何使用来拟合具有已知截距值(例如“ k”)的多项式模型lm?
我正在尝试编写一个算法a(0),..., a(n-1),在给定值的情况下n, x_1, ..., x_n, a(n),它将找到:
a(n)*p^n + a(n-1)*p^(n-1) + ... + a(1)*p + a(0) = a(n)(p-x_1)(p-x_2)...(p-x_n)
Run Code Online (Sandbox Code Playgroud)
对于所有真正的p.
在乘以(n)(p-x_1)(p-x_2)后,我想到使用Viete的公式来找到系数.
但事实证明,编写代码并不像我预期的那么明显.
我想只使用代码中的基础知识 - 即循环,if-s加法和乘法 - 没有现成/复杂函数.
首先,我想强调一下,我只需要一个伪代码,而不关心为根和系数定义数组.这就是为什么我会写一个(n),xn.哦,如果我从i = 1开始索引而不是i = 0以便与数学符号同步,我希望它不会打扰你.为了从i = 0开始,我必须重新编写根并引入更多括号.
这就是我到目前为止所提出的:
a(n-1)=0;
for(i=1; i <= n; i++){
a(n-1) = a(n-1) + x_i;
}
a(n-1) = -a(n)*a(n-1);
a(n-2)=0;
for(i=1; i <= n; i++){
for(j=i; j <= n; j++){
a(n-2) = a(n-2)+ x_i * x_j;
}
}
a(n-2) = -a(n)*a(n-2);
a(n-3)=0;
for(i=1; i <= n; …Run Code Online (Sandbox Code Playgroud) 如何使用系数数组建立表达式并将其转换为Func<int, double>?有比表达树更好的方法吗?
我有一个不可变的序列类型,使用一个Func<int, double> formula用于为序列A生成术语An的构造.我开始构建一个辅助类,用一些简单的参数构造常见的数学公式:
public static Sequence CreateLinearSequence (double m, double b)
{ return new Sequence (n => m * n + b); }
Run Code Online (Sandbox Code Playgroud)
我为常量序列,对数和简单多项式(线性,二次,三次和四次)构建了标准方法,但我想扩展它以使用params关键字支持任意数量的项.
这是我的方法:
public static Sequence CreatePolynomialSequence (params double[] coeff)
{
Expression<Func<int, double>> e = x => 0;
double pow = 0;
for (int i = coeff.Length - 1; i >= 0; i--)
{
double c = coeff[i];
var p = Expression.Parameter (typeof (int), "x");
e = Expression.Lambda<Func<int, …Run Code Online (Sandbox Code Playgroud) 我想计算给定$ N $元素集的每个子集的乘积之和.例如,给定集合{1,2,3},答案是1 + 2 + 3 + 1*2 + 1*3 + 2*3 + 1*2*3.我还想给出模数$ $ M $.
我所知道的是我可以计算$(x - a_1)(x - a_2)...(x - a_n) - 1 $,但这会涉及FFT,因此可能存在一些舍入误差,但主要问题是这个想法是需要$ O(N\log ^ 2 N)$时间并且模数$ M $是有问题的.有没有更快的方法来解决这个问题?这不是我的功课,我从老师那里得到了这个任务来练习编程比赛,但我真的遇到了这个问题.
约束:
$ a_i\le 10 ^ 9 $
$ N\le 10 ^ 6 $
$ M\le 10 ^ 9 $
为什么我有完全相同的模型,但运行不同网格大小的预测(0.001对比0.01)获得不同的预测?
set.seed(0)
n_data=2000
x=runif(n_data)-0.5
y=0.1*sin(x*30)/x+runif(n_data)
plot(x,y)
poly_df=5
x_exp=as.data.frame(cbind(y,poly(x, poly_df)))
fit=lm(y~.,data=x_exp)
x_plt1=seq(-1,1,0.001)
x_plt_exp1=as.data.frame(poly(x_plt1,poly_df))
lines(x_plt1,predict(fit,x_plt_exp1),lwd=3,col=2)
x_plt2=seq(-1,1,0.01)
x_plt_exp2=as.data.frame(poly(x_plt2,poly_df))
lines(x_plt2,predict(fit,x_plt_exp2),lwd=3,col=3)
Run Code Online (Sandbox Code Playgroud)
我通过以下方式将二阶多项式拟合到多个x/y点:
poly = np.polyfit(x, y, 2)
Run Code Online (Sandbox Code Playgroud)
如何在python中反转此函数,以获得对应于特定y值的两个x值?
我正在 ubuntu 16.04.2 LTS 和 NumPy 1.12.1 中使用 python 3.5.2。当我使用 poly1d 函数获取 coeffs 时,计算出现错误:
>>> from numpy import poly1d
>>> from math import fabs
>>> pol = poly1d([2357888,459987,78123455],True)
>>>[int(x) for x in pol.coeffs]
[1, -80941330, 221226728585581, -84732529566356586496]
Run Code Online (Sandbox Code Playgroud)
正如您在此列表中看到的,最后一个元素不正确。当我使用 Wolfram Alpha 构建多项式时,我得到:
x^3 - 80941330 x^2 + 221226728585581 x - 84732529566356580480
Run Code Online (Sandbox Code Playgroud)
最后一个系数与使用 poly1d 时不同(第一个系数以 ...496 结尾,另一个以 ...480 结尾)。我必须假设正确的系数是最后一次计算(由 WolframAlpha 制作)。
这是一个错误还是有什么我没有考虑到的?我用低绝对值的根进行了探索;在这种情况下,计算是正确的。但当我使用“大根”时,差异就很明显了。
有人问我这个有趣的问题,我认为值得在这里发布,因为Stack Overflow上没有任何相关的线程.
假设我在长度n向量中有多项式系数pc,其中n - 1变量的多项式x可以用其原始形式表示:
pc[1] + pc[2] * x + pc[3] * x ^ 2 + ... + pc[n] * x ^ (n - 1)
Run Code Online (Sandbox Code Playgroud)
R核函数polyroot可以在复数域中找到该多项式的所有根.但是我们常常对极值感兴趣,对于单变量函数,局部最小值和最大值交替出现,将函数分解成单调的片段.
我的问题是:
将它写成函数会很好,这样我们就可以轻松地探索/可视化多项式.
例如,考虑5度的多项式:
pc <- c(1, -2.2, -13.4, -5.1, 1.9, 0.52)
Run Code Online (Sandbox Code Playgroud) 我对 gganimate 比较陌生,我正在尝试在 R studio 上创建一个简单的多项式时间序列图。
x <- 1:100
f <- function (x){
return(-(x)^2)
}
df <- data.frame(x, y= -(x)^2)
ggplot(df, aes(x, y)) +
geom_line() +
stat_function(fun=f) +
transition_states(x, transition_length = 1, state_length = 2 )
Run Code Online (Sandbox Code Playgroud)
我的错误显示:
" Error in transform_path(all_frames, next_state, ease, params$transition_length[i], :
transformr is required to tween paths and lines "
Run Code Online (Sandbox Code Playgroud)
我想知道 transition_state() 中是否缺少某些东西?它作为静态图看起来不错,但我想让它成为一个时间序列图。
感谢任何建议/帮助!谢谢 !
我对 sympy 不太有经验,所以很抱歉,如果这是一个简单的问题。
如何使用 sympy 来展开二项式表达式?例如,假设我想让 sympy 计算多项式 $(x^2 + x + 1)^n$ 中 $x^2$ 的系数(我期望答案为 $n + \binom{n} {2}$)。
我尝试了以下代码:
x = symbols('x')
n = symbols('n', integer=True, nonnegative = True)
expand((x**2+x+1)**n)
Run Code Online (Sandbox Code Playgroud)
但结果只是 $(x^2+x+1)^n$ 而我想要二项式展开,即
。
提前致谢。