達到一定精度問題——求方程根+平方根·(c++)
阿新 • • 發佈:2021-02-05
1.弦截法是一種求方程根的基本方法,在計算機程式設計中常用。他的思路是這樣的:任取兩個數x1、x2,求得對應的函式值f(x1)、f(x2)。如果兩函式值同號,則重新取數,直到這兩個函式值異號為止。連線(x1,f(x1))與(x2,f(x2))這兩點形成的直線與x軸相交於一點x,求得對應的f(x),判斷其與f(x1)、f(x2)中的哪個值同號。如f(x)與f(x1)同號,則f(x)為新的f(x1)。將新的f(x1)與f(x2)連線,如此迴圈直到f(x)小於某個確定的精度為止。
編一程式,計算
x
3
+
2
∗
x
2
+
5
∗
x
−
1
=
0
x^3 + 2*x^2+5*x-1=0
x3+2∗x2+5∗x−1=0在區間【-1,1】之間的根。
#include <iostream> using namespace std; int main() { double x, x1 = -1, x2 = 1, f1, f2, f, epsilon; cout << "請輸入精度:"; cin >> epsilon; do { f1 = x1 * x1 * x1 + 2 * x1 * x1 + 5 * x1 - 1;//計算f(x1) f2 = x2 * x2 * x2 + 2 * x2 * x2 + 5 * x2 - 1;//計算f(x2) x = (x1 * f2 - x2 * f1) / (f2 - f1); f = x * x * x + 2 * x * x + 5 * x - 1; if (f * f1 > 0) x1 = x; else x2 = x; } while (fabs(f) > epsilon);//誤差在允許範圍內 cout << "方程的根是:" << x << endl; return 0; }
執行結果:
2.用如下程式計算x的平方根:首先猜測x的平方根root,然後檢查rootroot與x的差,如果差很大,則修正root的值為(root+x/root)、2,再檢查rootroot與x的差,重複這個過程直到滿足使用者所指定的精度。
#include <iostream> #include<cmath> using namespace std; int main() { double x, root, epsilon; cout << "請輸入x:"; cin >> x; cout << "請輸入精度:"; cin >> epsilon; root = x / 2;//先猜一個 while (fabs(x - root * root) > epsilon) root = (root + x / root) / 2; cout << "x的平方根是:"<<root; return 0; }
執行結果: