【51 Nodアルゴリズムマラソン18 C】数値計算
Description
F(x)=Σwk=1(Ak+sin(k)∗sin(x+k)+Bk+cos(k)∗cos(x+k))にF(x)=0の前nの小さい正根の和を求める.n<=3 e 6,A<=1 e 3,B<=1 e 3のうちwは定値であり,1 e 4は小数点以下3桁まで保持する
Solution
この方程式の根を求める問題には,きっと循環周期があるに違いない.この正弦波と余弦の関数は明らかにπ=3.141592653589793238である......の各見出しページがあります.そして私は関数が0~πで単調であると仮定し、次いでゼロ点(精度を大きくする)を2点に分けて1番目のゼロ点l=3.1133909143552221を2点に分けた......、そしてどんどんπを加えればいいのです.三角関数の数学の基礎が足りないので、なぜ単調なのかは証明されません.
Code
F(x)=Σwk=1(Ak+sin(k)∗sin(x+k)+Bk+cos(k)∗cos(x+k))にF(x)=0の前nの小さい正根の和を求める.n<=3 e 6,A<=1 e 3,B<=1 e 3のうちwは定値であり,1 e 4は小数点以下3桁まで保持する
Solution
この方程式の根を求める問題には,きっと循環周期があるに違いない.この正弦波と余弦の関数は明らかにπ=3.141592653589793238である......の各見出しページがあります.そして私は関数が0~πで単調であると仮定し、次いでゼロ点(精度を大きくする)を2点に分けて1番目のゼロ点l=3.1133909143552221を2点に分けた......、そしてどんどんπを加えればいいのです.三角関数の数学の基礎が足りないので、なぜ単調なのかは証明されません.
Code
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
int A,B,n,i;
double k,l,t,r,mid,ans,gen;
double doing(double x){
int i;double y=0;
fo(i,1,10000){
y+=A*sin(x+i)/(i+sin(i))+B*cos(x+i)/(i+cos(i));
}
return y;
}
int main(){
scanf("%d%d%d",&A,&B,&n);
/* l=0,r=3.14159265358979323846264;
while(r-l>0.0000000001){
mid=(l+r)/2;
if(doing(mid)<0)l=mid;else r=mid;
}*/
l=3.1133390914355221;
fo(i,1,n){
ans+=l;
l+=3.14159265358979323846264;
}
printf("%.3f
",ans);
}