• ベストアンサー

MATLABとC++

こんにちわ。資料を参考にしつつMATLABからC言語へ変換する作業をしているのですが、どちらに関しても初心者レベルで遅々としてはかどりません…。 分からないことの一つとして、MATLABは行列計算がしやすいがC言語はそうではないということからなのですが、MATLABで A = zeros(10,20,30) というのは次元10×20×30をもつゼロ行列 ということは分かったのですが、これは 数学で習う行列、2×2 や3×3など二次元な数字の並びを、三次元にまで拡張した表し方ということでしょうか?? また、上の式をC言語で書き表すとすると どのように書き表せるのでしょうか?どなたか分かるかた 教えていただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • rigidbody
  • ベストアンサー率60% (20/33)
回答No.2

>C言語にもzerosという関数があるわけですか? 標準装備ではありません。 >同じことになるわけですか? いいえ、なりません。 >できてしまうということでしょうか? いいえ、できません。基本的には、例示されたforコードを書かないと駄目です。が、より良い方法もあります。例えば、memset( a, 0, sizeof(a) ); と書く事です。 何故そうなのか?それはネットで時間をかけて調べてみて下さい。頑張って!

donntakosu
質問者

お礼

どうもありがとうございます!少し調べてみます!

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

 ほうほうzerosというのは関数なのか。すると、質問文のそれでは、「A」が三次元配列になる訳だな。  すでに#2さんがあらかた答えてくれているが、 > int zeros[10][20][30]、a; > と定義した上で > a=zeros[10][20][30] とすれば > それだけで 同じことになるわけですか? 残念ながら、C言語では、 int zeros[10][20][30]; は、三次元配列の「zeros」という変数になる。なので、 int zeros[10][20][30], a; という宣言は、「三次元配列のzerosと、配列でないaを宣言する」という意味になる。  つまり、値が未確定(ゼロでもないという事)の三次元配列が1個と、値が未確定のaという単体の変数が出来上がるわけだ。これらの値を0にするには、君が言うようにfor文で全部0をセットしてあげないといけない。  質問の理解が足りなかったようで、申し訳ない。

donntakosu
質問者

お礼

お礼おそくなってしまいすみません!! いえいえ、私も質問がうまく伝えられていたか自信はありませんし、質問 している身なのでそのようなことは気にしないでください!それより今回 色々調べてみてC言語のことを色々学べてきましたw でもまだ一つクリアすればまた一つ壁ができるようなレベルで、毎度毎度調べるので苦労します (苦笑) とりあえず今回はありがとうございました!また、そのうちお世話になるかもしれませんが(;´▽`A``

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

> 数学で習う行列、2×2 や3×3など二次元な数字の並びを、 > 三次元にまで拡張した表し方ということでしょうか??  いえ~すざっつらいと。3次元配列という奴やね。一般的に配列の次元数を表す時に、通ぶった言い方をすると、1次元は「リニア」、2次元は「マトリックス」、3次元は「キューブ」という呼び方をする。  キューブは昔なつかしルービックキューブを思い浮かべていただければ良い。縦と横と上に箱が整然と並んでいるあれだ。  ところで、C言語でそいつを擬似的に表現するには、例えばintなら、 int zeros[10][20][30];  などとして、読み書きは、 int a = zeros[5][3][3];  とする。これは値を取り出すサンプル。実際には他にも色々な書き方があるのだが、とりあえずはこれを覚えて欲しい。  C言語は知れば知るほどコーディング量が減る(そして他人には読みづらくなる)言語だ。逆によく分からずに色んな書き方をすると、混乱が混乱を呼び、そしてそれはバグとして開発者利用者双方に返ってくる。まずは基本を大切に。

donntakosu
質問者

お礼

基本から丁寧に教えていただいて  本当にありがとうございます! ところでC言語にも  zerosという関数があるわけですか?? 計算プログラムの中で MATLABでは  a=zeros(10,20,30); と計算している部分を C言語では 始めにint zeros[10][20][30]、a; と定義した上で a=zeros[10][20][30] とすれば それだけで 同じことになるわけですか? 他のサイトの何かで  for文で for(i=1;i<=10;i++){ for(j=1;j<=20;j++){ pex[i][j]=0.0; } } のような書き方を今みつけたのですが、こんなに書かなくても a=zeros[10][20][30] だけでもできてしまうということでしょうか?

関連するQ&A

専門家に質問してみよう