算法学习笔记(17):多项式反三角函数 您所在的位置:网站首页 直接反函数与间接反函数 算法学习笔记(17):多项式反三角函数

算法学习笔记(17):多项式反三角函数

#算法学习笔记(17):多项式反三角函数| 来源: 网络整理| 查看: 265

给定多项式 f\left(x\right),求模 x^{n} 意义下的 \arcsin{f\left(x\right)}, \arccos{f\left(x\right)} 与 \arctan{f\left(x\right)}。

当然此处我们依旧不好直接理解,一个多项式套上反三角函数是什么意思但我们前文介绍过了多项式\ln、\exp之后,相信读者大致能体会到,依旧是去寻找其在模x^n意义下等价的式子解法

同求解多项式\ln,先对\arcsin x求导,然后积分:

\begin{aligned} \frac{\mathrm{d}\arcsin{x}}{\mathrm{d} x} &= \frac{1}{\sqrt{1 - x^{2}}} \\ {\mathrm{d} } \arcsin{x} &= \frac{1}{\sqrt{1 - x^{2}}}{\mathrm{d} x} \\ \arcsin{x} &= \int \frac{1}{\sqrt{1 - x^{2}}} \mathrm{d} x \\\end{aligned}

同理,对于\arccos x有:

\begin{aligned} \frac{\mathrm{d}\arccos{x}}{\mathrm{d} x} &= - \frac{1}{\sqrt{1 - x^{2}}} \\ {\mathrm{d}\arccos{x}} &= - \frac{1}{\sqrt{1 - x^{2}}}\mathrm{d} x \\ \arccos{x} &= - \int \frac{1}{\sqrt{1 - x^{2}}} \mathrm{d} x \\\end{aligned}

同理,对于\arctan x有

\begin{aligned} \frac{\mathrm{d}\arctan{x} }{\mathrm{d} x} &= \frac{1}{1 + x^{2}} \\{\mathrm{d} } \arctan{x} &= \frac{1}{1 + x^{2}}{\mathrm{d} x} \\ \arctan{x} &= \int \frac{1}{1 + x^{2}} \mathrm{d} x\end{aligned}

然后我们将x换元成f(x)可以得到:

注意此处的微分符号依旧为\mathrm d x而不是\mathrm d f(x),因为我们还是对x求导然后使用链式法则

\begin{aligned} \frac{\mathrm{d}}{\mathrm{d} x} \arcsin{f\left(x\right)} &= \frac{f'\left(x\right)}{\sqrt{1 - f^{2}\left(x\right)}} \\ \arcsin{f\left(x\right)} &= \int \frac{f'\left(x\right)}{\sqrt{1 - f^{2}\left(x\right)}} \mathrm{d} x \\ \frac{\mathrm{d}}{\mathrm{d} x} \arccos{f\left(x\right)} &= - \frac{f'\left(x\right)}{\sqrt{1 - f^{2}\left(x\right)}} \\ \arccos{f\left(x\right)} &= - \int \frac{f'\left(x\right)}{\sqrt{1 - f^{2}\left(x\right)}} \mathrm{d} x \\ \frac{\mathrm{d}}{\mathrm{d} x} \arctan{f\left(x\right)} &= \frac{f'\left(x\right)}{1 + f^{2}\left(x\right)} \\ \arctan{f\left(x\right)} &= \int \frac{f'\left(x\right)}{1 + f^{2}\left(x\right)} \mathrm{d} x\end{aligned}

方程右边涉及了多项式求导、多项式乘法、多项式加法、多项式求逆、多项式积分。这些东西都是我们学过的,这些操作除了求逆、开方、乘法是O(n\log n)以外其余均是O(n)的

所以我们可以在O(n\log n)内求出任意一个多项式反三角函数

代码实现洛谷P5265 多项式反三角函数

多项式反三角函数模板题,带入上述公式即可,完整代码见文末(太感人了,总算不被卡常了)

然后我们就成功又水了一道黑题(bushi)(划掉)

Poly arcsin(const Poly &f) { int n = f.size(); return ((f.deriv() * (Poly({1}) - (f * f).modxk(n)).sqrt(n).inv(n)).modxk(n)).integr().modxk(n); } Poly arccos(const Poly &f) { int n = f.size(); return Poly({0}) - ((f.deriv() * (Poly({1}) - (f * f).modxk(n)).sqrt(n).inv(n)).modxk(n)).integr().modxk(n); } Poly arctan(const Poly &f) { int n = f.size(); return ((f.deriv() * (Poly({1}) + (f * f).modxk(n)).inv(n)).modxk(n)).integr().modxk(n); } 完整代码#include using namespace std; #define rep(i, a, b) for (int i = (a); i = (b); i--) #define el '\n' typedef long long LL; constexpr int N = 1e5 + 10, md = 1e9 + 7; int T, n, m; constexpr int P = 998244353; using i64 = long long; // assume -P >(std::istream &is, Z &a) { i64 v; is >> v; a = Z(v); return is; } friend std::ostream &operator


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有