MATLABC言語との違い

 

関数、命令

C言語

MATLAB

swap関数

swap(a,b);

tmp=a;a=b;b=tmp

配列

 

0から始まる。角括弧、変数宣言が必要

x[j]

配列は1から始まる。変数への引数を直すのは面倒なので1を足してやるとよい。角括弧ではなく丸括弧、変数宣言はしなくてもよい。

x(j+1)

2次元配列

a[i][j]

a(i+1,j+1)

for

for(j=0;j <= NUM;j++) {

for j=0:NUM

end

for(j=0;j < NUM;j++) {

}

 

この場合NUMは含まないので1引く

for j=0:NUM-1

end

for(j=NUM;j >=0;j--) {

}

減少するループの場合には、このようにする。

for j=NUM:-1:0

end

for (jp=0;jp < n;jp = jp + n_half) {

}

 

ステップ数が異なる場合には、for文のベクトルの中にステップ数n_halfを書く。また、最後は、nでは無く、(n-half)である点に注意。

for jp=0:n_half:(n-nhalf)

end

演算を含んだfor

 

 

 

for(k = 1;k < n;k = k <<1) {

 文

}

ステップ数の個所に演算含んだFor文は、MATLABではできない。そこで一度while文に変換してインプリメントする。

k=1;

while(k < n)

 

  k = k * 2;

end

関数

 

double ft1(double u,double t) {

  return (t + u);

}

MATLABでは、インライン文が使える。ただし、C言語との違いは、使う関数は、先に定義する必要がある。

ft1=inline('t+u');

シフト命令

jp = jp >> 1;

MATLABではシフト命令は無いのでそれに相当するように2で割る。割った結果を切り捨てて整数にするためfloor関数を使う。

jp = floor(jp/2);

AND/OR演算

jx=(jx << 1) | (jp & 1);

2進数のAND/ORは、bitand,bitorを使う。

jx = bitor(jx *2,bitand(jp,1));

print

 

 

printf(“\n相異なる実根です。”);

printfの代わりにfprintf関数を使う。文は、シングルクォーテーションを使う。

fprintf(‘\n相異なる実根です。’);

goto

AA:

goto AA;

MATLABには、goto文に相当する命令が存在しない。アルゴリズムを変更して対応する必要がある。(基本的には、絶対なくすことは可能!それができないプログラムは、作ってはだめ!)

 


 

実計算量を計測するには、

MATLABで、実時間量を計測するには、flops関数を用いる。flops関数とは、浮動小数点演算の数カウントする関数のことで、加算と減算は、実数であれば1フロップ、複素数であれは2フロップでカウントされる。乗算と除算は、結果が実数であれば1フロップ、結果が複素数であれば6フロップでカウントされる。初等関数では、実数ならば1フロップ、複素数ならばそれ以上でカウントされる。

for i=1:1000;sum=sum+i/10.0;end

の計算が何回の浮動小数点演算をするのかカウントするスクリプトを示す。

flops(0); % フロップをクリア

sum=0;

for i=1:1000;sum=sum+i/10.0;end

sum

flops

として、スクリプトファイルflotest.mに保存したとすると

flops(0); % フロップをクリア

sum =

       50050

ans =

        2000

と表示される。この場合、実数の足し算が1000回、割り算が1000回あったので計2000回の計算があったことを示している。

 

 

[]
Last modified[]