C++ 二分法求解方程的解

來源:互聯網
上載者:User

標籤:圖片   func   函數   保留   printf   第四次   nbsp   解方程   lse   

二分法是一種求解方程近似根的方法。對於一個函數 f(x)f(x),使用二分法求 f(x)f(x) 近似解的時候,我們先設定一個迭代區間(在這個題目上,我們之後給出了的兩個初值決定的區間 [-20,20][?20,20]),區間兩端自變數 xx 的值對應的 f(x)f(x) 值是異號的,之後我們會計算出兩端 xx 的中點位置 x‘x′ 所對應的 f(x‘)f(x′) ,然後更新我們的迭代區間,確保對應的迭代區間的兩端 xx 的值對應的 f(x)f(x) 值還會是異號的。

重複這個過程直到我們某一次中點值 x‘x′ 對應的 f(x‘) < \epsilonf(x′)<? (題目中可以直接用EPSILON)就可以將這個 x‘x′ 作為近似解返回給 main 函數了。

例如:

上面所示的一個迭代過程的第一次的迭代區間是 [a_1, b_1][a1?,b1?],取中點 b_2b2?,然後第二次的迭代區間是 [a_1, b_2][a1?,b2?],再取中點 a_2a2?,然後第三次的迭代區間是 [a_2, b_2][a2?,b2?],然後取 a_3a3?,然後第四次的迭代區間是 [a_3, b_2][a3?,b2?],再取紅色中點 cc,我們得到發現 f(c)f(c) 的值已經小於 \epsilon?,輸出 cc 作為近似解。

在這裡,我們將用它實現對形如 px + q = 0px+q=0 的一元一次方程的求解。

在這裡,你完成的程式將被輸入兩個正整數 pp 和 qq(你可以認為測評機給出的 0 < |p| \leq 10000<∣p∣≤1000且 0 < |q| \leq 10000<∣q∣≤1000),程式需要用二分法求出 px + q = 0px+q=0 的近似解。

輸入格式

測評機會反覆運行你的程式。每次程式運行時,輸入為一行,包括一組被空格分隔開的符合描述的正整數 pp 和 qq。你可以認為輸入資料構成的方程 px + q = 0px+q=0 都是有解且解在 [-20, 20][?20,20] 的區間內。

輸出格式

輸出為一行,包括一個數字。為方程 px + q = 0px+q=0 的近似解。請使用四捨五入的方式保留小數點後 44 位小數。

#include <cstdio>#include <cmath>#include<iostream>#define EPSILON 1e-7using namespace std;double bisection(int p, int q, double(*func)(int, int, double));double f(int p, int q, double x);int main() {int p;int q;//scanf_s("%d %d", &p, &q);//printf_s("%.4lf\n", bisection(p, q, f));cin >> p >> q;cout << bisection(p, q, f) << endl;return 0;}double bisection(int p, int q, double(*func)(int, int, double)) {double m = -20.0;double n = 20.0;double  h = (m + n) / 2.0;double u = 0.0;while( abs((*func)(p, q, h))>EPSILON){double z = (*func)(p, q, m);double y = (*func)(p, q, n);    u = (*func)(p, q, h);cout << u << endl;if (z > 0 && u > 0 || z < 0 && u < 0){m = (m + n) / 2;n = n;}else{n = double(m + n) / 2;m = m;}h = (double)(m + n) / 2;   }return h;}double f(int p, int q, double x) {return p * x + q;}

  

C++ 二分法求解方程的解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.