1. 程式人生 > 其它 >達到一定精度問題——求方程根+平方根·(c++)

達到一定精度問題——求方程根+平方根·(c++)

技術標籤:C++c++

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+2x2+5x1=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;
}

執行結果:
在這裡插入圖片描述