今日(2020/06/20)からアルゴリズムを勉強していこうと思う。選ばれたのはC言語です。理由は単純で今勉強中だから。メモ用として使っていくので詳しい解説はしない(というか知識がないからできない)。よく参考書にあるような数字の計算から始めるわけではないのでそこは理解していただきたい。では早速やっていこう。
環境構築に関しては以下の記事を参考にして構築した。(Windows)
※Macはわかりませんので各自で調べてください。
https://webkaru.net/clang/mingw-gcc-environments/
使用している書籍:C言語によるはじめてのアルゴリズム入門
著者:河西朝雄
#ニュートン法
やることは昨日と同じで解を求めること。やり方は他のサイトを閲覧してほしい。
こちらが図がついていてわかりやすかった。
nyuton.c
#include<stdio.h>
#include<math.h>
#define f(x) ((x)*(x)*(x)-(x)+1)
#define g(x) (3*(x)*(x)-1) //f(x)を微分した式
#define EPS 1e-8
#define LIMIT 50
int main(void){
double x = -2.0,dx;
int k;
for(k=1;k<=LIMIT;k++){
dx = x;
x = x - f(x)/g(x);
// 収束判定
if(fabs(x-dx)<fabs(dx)*EPS){
printf("value:%1f\n",x);
break;
}
}
if(k>LIMIT){
printf("収束しない\n");
}
}
#出力結果
value:-1.324718
#まとめ
いずれ微分に関するプログラムを書いたらコードを書きなおそうと思う。