• ベストアンサー

等間隔にベクトルを作成。(MALAB->C)

初めまして。 今、MATLABのプログラムをCに書き直すという作業をしています。 MATLABもCも初心者レベルなので簡単な質問かも知れませんが お答え頂けると有難いです。 MATLABで  F=linspace(1/fs,1000,2^12) という一文があるのですが、これは  「配列Fに1/fsから1000の間でリニアに等間隔な4096点のベクトルを作成する」 という意味でいいのでしょうか。 それはつまりF[0]=1/fs、F[4095]=1000であるということですか? Cに直す以前に「ベクトルを作成する」という概念が いまいちわからなくてつまづいてます。

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

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.2

MATLABでは、1次元配列をベクトル(数列)、多次元配列をマトリクス(行列)と呼びます。ここでのベクトルは、データの型とかではないので、そのまま配列を使用して大丈夫ですよ。というか、これは配列のことです。ちなみに、MATLABでは基本的にDouble型とChar型を使用します。 > このような宣言は要素数が4096個の一つの配列array > と理解していたのですが間違っているのでしょうか。 その認識であっています。 #1の方は、『(要素数)4096個の配列ができます』と仰っているのだとと思います。 最後に、MATLABをCにリプレースする際には、以下の部分に気を付けると良いと思います。 (1)行列演算のfor文化  (主に行列同士を *、/ で計算している箇所。.*、./ は意味が違うので注意が必要です) (2)if文の省略  ((0<a).*a 等と記述されている箇所) (3)最終的な配列サイズ、構造体メンバの確認  (MATLABは配列サイズ、構造体メンバの動的な拡張、追加が可能です) (4)MATLABの組込み(or ToolBoxの)数学関数の置換

monodot
質問者

お礼

>MATLABでは、1次元配列をベクトル(数列)、多次元配列をマトリクス(行列)と呼びます。 1次元配列をベクトルと呼ぶことを初めて知りました。勉強不足ですね。 >MATLABをCにリプレースする際 細かい注意点等有難うございます。 組み込み関数をCに直す作業が一番厄介になりそうですが お二方の助言に注意して頑張ります!

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>「配列Fに1/fsから1000の間でリニアに等間隔な4096点のベクトルを作成する」 >という意味でいいのでしょうか。 そのようだね >Cに直す以前に「ベクトルを作成する」という概念が >いまいちわからなくてつまづいてます。 double array[4096]; で 4096個の配列ができます。C 言語にはそもそも「ベクトル」という型はないので、配列で代用するしかないでしょう。

monodot
質問者

お礼

やはりCでは配列で代用するんですね。有難うございます。 重ねて質問というか確認なのですが、 >double array[4096]; >で 4096個の配列ができます。 このような宣言は要素数が4096個の一つの配列array と理解していたのですが間違っているのでしょうか。

関連するQ&A

  • MATLABとC++

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

  • C++でvectorにテキストファイルを読み込む

    C++でテキストファイルを読み込んで平均、標準偏差などを表示するプログラムを作っているのですが、 vectorにテキストファイルを読み込ませる方法が分からないので教えていただけないでしょうか? int型の配列に読み込ませる方法もありますが、テキストファイルのデータ数が未知数のためvectorを使いたいです。

  • C++で分からないプログラムがあるんですが

    ベクトルの加減を行うプログラムを作成せよ。 ベクトルの内積を求めるプログラムを作成せよ。 ↑作るプログラムは1つにする(1つにまとめる) 2つのベクトルを適当に初期化して行う事 これ、だれか教えてくれませんか?配列とforを使うんですが、配列も、1次元と2次元しかやってないですし。 こんな感じのレベルだと思うんですが… #include <iostream> using namespace std; int main() { float w[] = {1.2,2.3,3.4,4.5,5.6}; float x[] = {4.8,2.6,1.3,9.1,8.7}; float u = 0.0; int i; for(i=0;i<5;i=i++) { u += w[i] * x[i]; } cout << "u=" << u << "です\n"; return 0; } 本当に誰か助けてください。

  • MATLABで同じ音を鳴らす?

    MATLAB初心者なのですが、下のようなプログラムを書きました。これではラの音が1回鳴りますが、この音を0.9秒の間隔を置いて3回鳴らしたいのですが、どのようにプログラムを書けばいいのでしょうか? よろしくお願いします。 Fs = 48000; Fq_A = 440; time = Fs / 10; n = 1 : time; tone(n) = 1 * sin(2 * pi * Fq_A * (n-1) / Fs); soundsc(tone, Fs)

  • C言語ベクトルの内積計算について

    以下に示すベクトルx,yの内積を算出するプログラムを作成してください。ベクトルは配列として扱い、変数はすべてint型を用いて下さい。また、内積の算出には、void型関数を使用し、算出結果はコマンドライン上に出力すること。 x=(1,2,3),y=(5,6,7)

  • C言語を用いた3×3の平方行列と列ベクトルの積

    C言語を最近始めたのですが3×3の平方行列と列ベクトルの掛け算の方法が分からず困っています。 問題は{{1,4,2},{6,7,2},{3,9,4}}×{{3},{8},{5}}を配列とfor文のみでとけという問題です。 2重ループを使うのはなんとなくわかるのですが使い方がわからずなにがなんだかさっぱりですよければ教えてください。

  • MATLABでの純音提示の時間制御

    MATLABで一定間隔をおいて純音を提示することを目指しています。 その際の時間制御に関して質問があります。 現在250msごとに純音提示と無音状態を反復するプログラムを作成しています。 ticとtocを用いて純音ー無音の1サイクルに要する時間を計測しますと,0.57-0.68secの間でばたついています。可能な限り1サイクルが0.50sec付近に落ち着くようにしたいのですがどのようにすればよいでしょうか? PCのスペックなどはいじることが困難なので,出来る限りプログラミングで対応したいと考えています。 よろしくおねがいいたします。 ・MATLABのバージョン:MATLABR2007b ・導入済みのツールボックス:psychotoolbox ・作成済みプログラム f=440;%ラ音 Fs=44100 ;%サンプリング周波数 T=0.25;  %信号の長さ t=0:1/Fs:T; %公差が1/Fsで0から1までの等差数列 y=sin(2*pi*f*t); t2=0:1/Fs:0.25 %公差が1/Fsで0から1までの等差数列 y2=sin(2*pi*0*t2); for t=1:4 ; sound(y2,Fs); sound(y,Fs); end;

  • C言語初心者です。

    C言語初めて壁にぶち当たりました。下の問題がとけません。よろしくお願いします。 標準入力から整数値を4個,int型の配列へ読み込んで,これかの値を大きい順に配列上で並び替え,出力するプログラムを作成してください。ただし,for文の2重ループを必ず使用してください。

  • C++でMIDIファイルを作成

    Windows XP、Visal C++でMIDIを作成するプログラムを作成しようと考えているプログラム初心者です。 1小節で1トラックだけ使ってるMIDIを前もって自分でたくさん作ってあり、そのMIDIファイルを使ってトラック1の1小節目、2小節目…に貼り付けていって、トラック2の1小節目、2小節目…と張り付けていって…という作業をして、新たに複数小節で複数トラックあるMIDIファイルを一つのMIDIファイルとして作成する、みたいなことをしたいんですが、そういうことはできるんでしょうか? どうかご教授お願いします。

  • c++について

    プログラム超初心者です。 int型の配列に空白と1を代入して、for文でループして内容が1のときは"■"を表示するというプログラムを作りたいのですが、大量の数字が出てうまくいきません。例を作っていただけませんか?