2019年11月11日 星期一

C++牛頓法求方程式解

這個程式利用牛頓法求方程式的解。double function(double)是函數,這個程式將會解出一個function(x)=0的解。

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>

double function(double x);
double diff(double (*f)(double), double x)
{
        return (f(x+1.0E-6)-f(x)) / 1.0E-6;
}

double nt(double (*f)(double), unsigned int times = 1000)
{
        srand(time(NULL));
        double start_x = (double)rand();
        for (unsigned int i = 0; i < times; ++i) {
                double df = diff(f, start_x);
                //printf("%f\n", df);
                if (df - 0.0 < 1.0E-8) {
                        start_x = (double)rand();
                        continue;
                }
                start_x = -f(start_x) / df + start_x;
        }
        return start_x;
}

int main()
{
        double x;
        std::cout << "x = " << (x = nt(function)) << '\n';
        std::cout << "y = " << function(x) << '\n';
        return 0;
}

在GitHub上面,還有我撰寫的,透過Perl和Shell Script將函數轉換為C++程式碼,比較方便使用,但目前還沒有撰寫使用教學。詳情請看「JEI」。


👉【幫我們一個忙!】👈

👋如果您喜歡這篇文章,請在下方按5個Like!
 ❤您的支持是我們最大的動力!

您只要登入帳號(Facebook、Google),在下方按5個Like,我們就會收到來自LikeCoin基金會的贊助。
您只需要支持我們,完全不會花到錢!