这是一个什么用也没有的模板
生活随笔
收集整理的這篇文章主要介紹了
这是一个什么用也没有的模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
貌似牛頓迭代快如閃電,吊打二分。
?
雖然二次函數可以直接求根公式,,,但是我只是想練練牛頓迭代。
(要是以后考數學的時候我能直接用這個程序求零點就爽了Hhhh)
#include<bits/stdc++.h> #define ll long long #define newton 100 using namespace std; double a,b,c; double x,y;inline bool zero(double k){return k>-0.00000001&&k<0.00000001; }inline void solve(int t){double k,d;//t==1時是求左零點,否則是右零點 if(t==1) x=-b/(2*a)-1;else x=-b/(2*a)+1;//迭代次數 int tmp=newton;while(tmp--){//算出當前點的切線方程,a*x^2+b*x+c的在(x0,y0)處的斜率就是2*a*x0+b k=x*a*2+b,d=y-k*x;//求切線與x軸交點 x=-d/k;y=x*x*a+x*b+c;} }int main(){scanf("%lf%lf%lf",&a,&b,&c);if(b*b-4*a*c<-0.00000001){puts("-1");return 0;}solve(1);if(zero(x)) x=0;if(zero(y)) y=0;printf("%.6lf %.6lf\n",x,y);if(!zero(b*b-4*a*c)){solve(2);if(zero(x)) x=0;if(zero(y)) y=0;printf("%.6lf %.6lf\n",x,y);}return 0; }?
然后這個是求A的k次方根的
#include<bits/stdc++.h> #define ll long long using namespace std; double a,b,c,d; double x,y,A; int k;inline void solve(){x=1.00,y=1-A;int tmp=1000;while(tmp--){printf("%lf %lf\n",x,y);//求一下導 b=(double)k*pow(x,k-1);//確定點和斜率就可以確定切線方程了 d=y-b*x;//然后就可以找到和x軸的交點了 x=-d/b;//再找到y=x^k上橫坐標是x的點 y=pow(x,k)-A;} }int main(){//求A的k次方根 scanf("%d%lf",&k,&A);solve();printf("%.6lf\n",x);return 0; }?
轉載于:https://www.cnblogs.com/JYYHH/p/8334312.html
總結
以上是生活随笔為你收集整理的这是一个什么用也没有的模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jmeter 多机负载压测与服务器性能监
- 下一篇: 让你提升命令行效率的 Bash 快捷键