• ベストアンサー

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

  • C言語→MATLABへの変換で、困っています。

    学生研究でMATLABを使用しています。 光学測定系で画像を取り込み、それを解析する実験を行っています。 MATLABはプログラム内の値の変更や処理の追加できることから 大変助かっています。 そこで、もともとはC言語でやっていた3種類の処理を 一つのMファイルで行いたいと思い。 只今、C→MATLAB変換するプログラムの書き直しを行っています。 そのうち2種のプログラムは行列の計算がメインだったため何とか Mファイルに書き直すことができたのですが、 最後のひとつが難しい関数らしきものが多く、 MATLABに書き直すことができるプログラムなのかもわからない状態です。 そこで、 ・C→MATLAB変換可能なプログラムか? ・書き直すにあたってどこを部分を直せばよいのか? をアドバイスいただけないでしょうか? ↓MATLAB化したいC言語ファイル http://karispace.web.fc2.com/cmat2.c 一枚のbmp画像から4枚のdatデータを出力するプログラムです。 C言語とMATLABの三ヶ月前に勉強して、使用しており、基礎がわかる程度です。 よろしくお願いします。

  • MATLABの行列を変換したいのですが

    行列の計算がMATLABで実行されて出てきた値Kfb Kfb=[-0.3162 -7.6248 -4.4566 -1.2231] を次のようにデータを抽出したいのですが、上手くいきません。 どのように行えば可能になるのか教えていただけると幸いです。 Kfb1=[-0.3162 -7.6248] Kfb2=[-4.4566 -1.2231] また、C言語のように割り込みを入れることは可能なのでしょうか? よろしくお願いします。

  • MATLABのMATファイル をC言語で取り込む

    MATLAB の MATファイル をC言語でも取り込めるようにするにはどのようにすればよいのか教えてください。 (bin とか dat への変換方法がわかりません。) よろしくお願いします。

  • det(zI-A)=0をMATLAB以外で解く方法

    MATLABを使わずに|zI-A|=0を求めるプログラムを組みたいのですが可能でしょうか?できればC言語系でお願いします。ちなみにAは7×7の行列でIはその単位行列、zは未定定数です。定数だけのものなら書けるのですが。可能であるならサンプルないし考え方も教えてくださると助かります。

  • 行列計算の速度

    行列計算の速度 今、スパース行列計算のプログラミングをしているのですが、Cで作成していて、計算速度について考慮しています。同じような計算をmatlabでさせてみたら、matlabでの行列計算は圧倒的に速かったので、matlabを使う事を考えてます。行列計算を得意とするmatlabなのですが、matlabはCを使っているので、Cでのプログラミングをあきらめるべきなのか考えています。 Cもmatlabも良い点、悪い点はあると思いますが、何か参考になるアドバイスがあればいいなと思って、投稿させてもらいました。お願いします。

  • C言語で行列の演算するには?

    C言語で行列を取り扱うにはどうしたらいいのですか? 二次元配列というのは行列の演算のことなのですか? 初心者なのでよく分からないのでなるべく丁寧に教えてもらえるとうれしいのですが。よろしくお願いします。

  • matlabの変数をVisual Studioで

    matlabで計算を行い, その変数の値をVisual Studioで製作したプロジェクトで受け取るようなことをしたいのですが、そのような機能ややり方があったら教えてください. 使用しているソフトウェア matlab2015b visual studio 2012 opencv3.0.0 使用する言語 C++ OS Windows10

  • Matlabで作成したmファイルをC言語に自動変換することは可能ですか?

    大学の研究室で使っているmatlabの機能にC言語のソースを自動生成 する機能があると先生に伺ったのですが、 常識的に考えてそんな便利なことができるとは思えません。 実際に下記に示すtoolboxで自分が作ったmファイルからC言語のソースを、ある程度自動生成することは可能でしょうか? Matlab 2008 b windows-x64版 Matlab 7.7 Simulink 7.2 Image processing toolbox Signal processing toolbox Real time workshop SimulinkとReal time workshopを一度も使ったことが無いので 少し調べて良く判らない点がありました。 Realtimeworkshopでは、Simulinkで生成したブロック線図のみC言語で出 力できるものであり、mファイルからの変換はできないのでしょうか?

  • matlabのquadl関数について

    matlabのquad,quadl関数についての質問です pを1*nのデータとして func1 = @(eta) (eta.^10).*((1-eta).^(10))./(prod(p.*eta+(1-p).*(1-eta))); K=quadl(func1,0,1); を計算したいのですが、 エラー ==> times 行列の次元は同じである必要があります となってしまいます。 多分prodがいけないと思うのですが、pの要素が多いため(p(i)*eta+(1-p(i))*(1-eta))のように全部書き下すことができません。 どう直せばよいのでしょうか

  • C言語です。

    C言語です。 2次元配列を用いて、2つの2行3列の行列 A=[ 1 2 3 4 5 6 ] B=[ 6 3 4 5 1 2 ] の和を表示するプログラムを教えてください。 コンパイル結果 7 5 7 9 6 8

専門家に質問してみよう