歴史上人物一覧(死んだ年がわかっている人)をwikiから取得

  • クロール

get.sh

for i in `seq 1 2013`;
do


        echo $i
        wget http://ja.wikipedia.org/wiki/Category:$i%E5%B9%B4%E6%B2%A1
        sleep 20

done

sh get.sh

  • データ整理

out.sh

rm tmp2
for i in `ls | grep Cate | sort -g`;do
 cat $i | grep title= | grep li | grep ul  | grep wiki | grep -v catlinks | awk -F"</a>" '{print $1}' | sed "s/.*\">//g" | sed "s/(.*).*//g" > tmp
 file=`echo $i | sed "s/.*3A//g;s/年没.*//"`
 sed "s/.*/$file/g" tmp > tmp1
 paste -d"," tmp1 tmp >> tmp2
 paste -d"," tmp1 tmp
done

sort -k1,1g tmp2 | grep -v 訃報 > hito.txt

sh out.sh

cygwinのlapackで連立方程式をとく。

cygwinlapack連立方程式をとく。
まず、準備として、setup.exeからlapackっぽいのをいれておく。
とりあえずのプログラム:
http://auewe.hatenablog.com/entry/2013/05/04/075717を参考にさせていただきました。
http://www.jsces.org/Issue/Journal/pdf/nakata-0411.pdf


ポイントは行列は横にみる。 N×M行列のAijは

a[(i-1)+M*(j-1)]

ただし,ladのときは違う。


簡単な例:
a(1,1)=1
a(1,2)=4
a(2,1)=5
a(2,2)=6
b(1)=3
b(2)=4

#include <stdio.h>
#include<stdlib.h>
#define N 2
int main(void)
{
  long i,j,n=N,nrhs=1,ipiv[N],lda=N,ldb=N,info;
   double* A;
   double* b;
   A=(double*)malloc(sizeof(double)*N*N);
   b=(double*)malloc(sizeof(double)*N);

   i=1;j=1;
   A[(i-1)+N*(j-1)]=1;
   i=1;j=2;
   A[(i-1)+N*(j-1)]=4;
   i=2;j=1;
   A[(i-1)+N*(j-1)]=5;
   i=2;j=2;
   A[(i-1)+N*(j-1)]=6;

    i=1;
    b[i-1]=3;
    i=2;
    b[i-1]=4;



  dgesv_(&n,&nrhs,A,&lda,ipiv,b,&ldb,&info);
  for(i=0;i<N;i++)
    printf("%lf\n",b[i]);
  return 0;
}


コンパイル

gcc -O3 solve.c -llapack

ランダムな例:
サンプルプログラム
$ cat lapack_test.c

#include <stdio.h>
#include<stdlib.h>
#define N 2000   // 2000x2000行列
int main(void)
{
  long i,j,n=N,nrhs=1,ipiv[N],lda=N,ldb=N,info;
   double* A;
   double* b;
   A=(double*)malloc(sizeof(double)*N*N);

   b=(double*)malloc(sizeof(double)*N);

 
  for(i=1;i<N*N;i++){
        A[i]=rand();
  }

  for(i=1;i<N;i++){

        b[i]=rand();
  }


  dgesv_(&n,&nrhs,A,&lda,ipiv,b,&ldb,&info);
  for(i=0;i<N;i++)
    printf("%lf\n",b[i]);
  return 0;
}

コンパイル

gcc -O3 lapack_test.c -llapack

実行

./a.exe

結果

0.346819

  • 0.144207

0.165927

  • 1.834181
  • 0.967015
  • 0.040578

1.918667

  • 0.092941
  • 2.201499

...