學習了數值分析這門課,老師留了乙個作業是設計數值方法求π的x次方(x範圍為1到10)
具體步驟如下(老師要求的,就是想讓你多用用幾種數值方法,讓你多解幾步)
求π利用上一步的π求lnπ
利用上一步的lnπ求π的x次方
求解π的方法有很多,現在只討論用計算機怎麼求π。一般有下面這三種求法
1.泰勒展開
2.bbp公式
3.高斯勒讓德演算法(最好的一種)
這三種方法具體可以參考
這個博文很詳細我就不再廢話了,下面給出泰勒展開求π的c++**,展開40項即可得到很精確的結果
int h1,i,t;
double dsqrt3=2*sqrt(3);//dsqrt為2倍的根號3,是乙個常量
pi=dsqrt3;
h1=1; //h1為正1或負1
for(i=1;i<40;i++)//採用泰勒展開方法求π
cout << "π的值:";
cout << fixed << setprecision(15)<< pi << endl;
可以用數值積分的方式求
注意:上式中的π用的是第一步求出的π
數值積分有很多方法,比如梯形公式,辛普森公式等等
我採用的是復合辛普森公式(可能不是最好的),原理如下
c++**如下
double h=(pi-1)/500;//pi即為上一步求的π
lnpi=1+1/pi;//設定初值
for(i=1;i<500;i++)//採用復合辛普森公式求數值積分
lnpi=lnpi+4/(pi-h/2);
lnpi=lnpi/6*h;
cout << "lnπ的值:";
cout << fixed << setprecision(15)<< lnpi << endl;
要求用到前兩步的結果,我採用求解常微分方程的方法
求解常微分方程也有很多方法,如各種尤拉法,龍格庫塔,等等
我採用的是四階龍格庫塔公式,如下
c++**如下,給了個龍格庫塔的函式,該函式輸入
x:幾次方
n:區間分為幾份,份數越多越精確
輸出:pix,即結果,表示π的x次方
double rungkutta(double x,double n)//四階龍格-庫塔公式
return pix;
}double derivative(double y)//y(x)的導數,用於微分方程求解
數值的整次方
2 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題 如下 5 include6 using namespace std 7 8 bool g invaildinput false 9 10 ...
數字的數值次方
include using namespace std bool g invalid false bool equal zero double base double exe pow double base,int exponent if exponent 0 return exe pow base...
x 的 x 次方等於10,求 x
當 x 的 x 次方為10時,求 x 的值,精確到小數字後9位 過程如下 2 的 2 次方 小於 10 3 的 3 次方 大於 10 因此 x 在 2 到 3 之間。找出整數部分後,需要計算出小數部分,然後把兩部分加到乙個串裡即可 可以以串的形式輸出,也可以轉成浮點數輸出,下面的程式是以串的形式輸出...