• 締切済み

MATLABでカーブフィットしたデータを、関数「xlswrite」「save」を用いて、xls形式・txt形式で保存する方法を教えてください

下記は、周波数応答関数を入力し、 カーブフィットを行うプログラムです。 カーブフィットのデータをエクセル形式、テキスト形式で 保存をする場合、関数[save]または[xlswrite]を使用し, どのように書けばいいのでしょうか。 どうか何卒ご教授お願い致します。 ---------------------- clear variables global;comgui('close all') fm='wagawara_ryou10_'; n1=101; n2=142; n=0; for i=n1:n2 fnm=strcat(fm,int2str(i),'_h.txt') [IIw,Mag,Phi,Q,Q]=textread(fnm,'%f %f %f %f %f','headerlines',3); n=n+1; IIxf(:,n)=complex(Mag.*cos(Phi*pi/180),Mag.*sin(Phi*pi/180)); end %---初期固有振動数データと減衰比データの読み込み.2005.9.13--- fn='wagawara_ryou10_mif_pk_dm.txt' [peak,zeta]=textread(fn,'%f %f','headerlines',2); pkze=[peak,zeta]; %---処理開始--- iiplot %伝達関数のプロット XF(5).po=pkze %初期固有振動数と減衰比を代入。 idcom('e 15 371'); %idcom('e i w') i:帯域幅,w:中心周波数 idcom('est'); idcom('eup .05 .002 -10'); %idcom('eup dstep fstep num i') out=id_rm(XF(5),[1 1 1 1]); XF(3)=res2xf(out,IIw); iicom('IIxhOn'); [som2,ga2,pbs2,cps2]=res2nor(IIres,IIpo,IDopt); ※注意 'wagawara_ryou10_'←入力データ strcat←組み込み関数 textread←組み込み関数 complex←組み込み関数 'wagawara_ryou10_mif_pk_dm.txt'←入力データ textread←組み込み関数 idcom←組み込み関数 id_rm←組み込み関数 res2xf←組み込み関数 iicom←組み込み関数 res2nor←組み込み関数 ---------------------- どうぞよろしくお願いします。

みんなの回答

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.1

「MATLAB "save関数"」,「MATLAB save xlswrite」で検索すると色々出てきます. http://www.google.co.jp/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-34,GGGL:ja&q=MATLAB+%22save%E9%96%A2%E6%95%B0%22 http://www.google.co.jp/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-34,GGGL:ja&q=MATLAB+save+xlswrite MATLAB プログラミング:ファイルの保存とロード http://dl.cybernet.co.jp/matlab/support/manual/r14/toolbox/matlab/matlab_prog/?/matlab/support/manual/r14/toolbox/matlab/matlab_prog/ch_impo7.shtml xlswrite のソースのようです.引数の説明および使用例あり. とりあえずこの例が参考になるのでは? http://www.tec.ufl.edu/~soniyatn/CSD/nmat2/xlswrite_.m MATLAB利用の手引き 第5章 MATLABを利用する ・代表的な標準エクスポート関数 (関数名の一覧のみ) http://www.gsic.titech.ac.jp/~ccwww/tebiki/matlab/matlab5.html MATLAB データをファイルに保存する Tips (ASCII ではなくバイナリ形式ですが一応ご参考まで.) http://www.ikko.k.hosei.ac.jp/~matlab/filewrite.pdf

yasuyasu19
質問者

お礼

ありがとうございます。 是非参考にさせて頂きます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MATLABでカーブフィットしたデータをテキスト形式で保存する方法を教えてください

    下記は、周波数応答関数を入力し、 カーブフィットを行うプログラムです。 このプログラムを実行し、カーブフィットをできるのは いいのですが、どうすればそのデータをテキスト形式で保存し, エクセルなどで実行できるのかがわかりません。 どうか何卒ご教授お願い致します。 ---------------------- clear variables global;comgui('close all') fm='wagawara_ryou10_'; n1=101; n2=142; n=0; for i=n1:n2 fnm=strcat(fm,int2str(i),'_h.txt') [IIw,Mag,Phi,Q,Q]=textread(fnm,'%f %f %f %f %f','headerlines',3); n=n+1; IIxf(:,n)=complex(Mag.*cos(Phi*pi/180),Mag.*sin(Phi*pi/180)); end %---初期固有振動数データと減衰比データの読み込み.2005.9.13--- fn='wagawara_ryou10_mif_pk_dm.txt' [peak,zeta]=textread(fn,'%f %f','headerlines',2); pkze=[peak,zeta]; %---処理開始--- iiplot %伝達関数のプロット XF(5).po=pkze %初期固有振動数と減衰比を代入。 idcom('e 15 371'); %idcom('e i w') i:帯域幅,w:中心周波数 idcom('est'); idcom('eup .05 .002 -10'); %idcom('eup dstep fstep num i') out=id_rm(XF(5),[1 1 1 1]); XF(3)=res2xf(out,IIw); iicom('IIxhOn'); [som2,ga2,pbs2,cps2]=res2nor(IIres,IIpo,IDopt); ※注意 'wagawara_ryou10_'←入力データ strcat←組み込み関数 textread←組み込み関数 complex←組み込み関数 'wagawara_ryou10_mif_pk_dm.txt'←入力データ textread←組み込み関数 idcom←組み込み関数 id_rm←組み込み関数 res2xf←組み込み関数 iicom←組み込み関数 res2nor←組み込み関数 ---------------------- どうぞよろしくお願いします。

  • カーブフィットを行うプログラムについて

    カーブフィットを行うプログラムについて質問があります。 下記は、周波数応答関数を入力し、 カーブフィットを行うプログラムですが、 プログラムの下4行の意味が全く分かりません。 (下4行とは、■マークが先頭に書いてあるものです) どうか何卒ご教授お願い致します。 わかりにくい質問の仕方をしてしまい、申し訳ないです。 ---------------------- clear variables global;comgui('close all') fm='wagawara_ryou10_'; n1=101; n2=142; n=0; for i=n1:n2 fnm=strcat(fm,int2str(i),'_h.txt') [IIw,Mag,Phi,Q,Q]=textread(fnm,'%f %f %f %f %f','headerlines',3); n=n+1; IIxf(:,n)=complex(Mag.*cos(Phi*pi/180),Mag.*sin(Phi*pi/180)); end %---初期固有振動数データと減衰比データの読み込み.2005.9.13--- fn='wagawara_ryou10_mif_pk_dm.txt' [peak,zeta]=textread(fn,'%f %f','headerlines',2); pkze=[peak,zeta]; %---処理開始--- iiplot %伝達関数のプロット XF(5).po=pkze %初期固有振動数と減衰比を代入。 idcom('e 15 371'); %idcom('e i w') i:帯域幅,w:中心周波数 idcom('est'); idcom('eup .05 .002 -10'); %idcom('eup dstep fstep num i') ■out=id_rm(XF(5),[1 1 1 1]); ■XF(3)=res2xf(out,IIw); ■iicom('IIxhOn'); ■[som2,ga2,pbs2,cps2]=res2nor(IIres,IIpo,IDopt); ---------------------- よろしくお願い致します。 失礼します。

  • 周波数応答関数の計算

    打撃実験を行って解析するのですが下記のプログラムが分かりません。 [IIw,Mag,Phi,Q,Q]=textread(fnm,'%f %f %f %f %f','headerlines',3); IIxf(:,n)=complex(Mag.*cos(Phi*pi/180),Mag.*sin(Phi*pi/180)); 読み込んだファイルの内容が Np Nc / Freq Hm Ha Coh XPwr 6401 5 0 11.8941 0 0.938239 1.78076E-006 1 27.7519 130.402 0.915975 2.26936E-008 2 3.95322 -38.8943 0.973454 1.64854E-008 . . 一列目が周波数と思います。2列と3列が何か分かりません。 また、IIxfは周波数応答関数だと思うのですがどの公式を用いているのでしょうか?

  • txtファイルを読み込んで表示関数を用いて表示する方法

    5名の会社員の健康管理表を作成するプログラムで、データとして「名前(英大文字最大10字)」「年齢」「身長」「体重」「最低血圧」「最高血圧」があらかじめ与えられています。 これをテキストファイルdata.txtに納めておき、プログラムには15人分のデータが入る構造体の配列を用意し、fscanf()関数で読み込んでから、「標準体重」と「高血圧診断結果」を計算した上で、一覧データを画面に表示したいんですが、コンパイルができたもののエラーが出て動きません。どこがまずいんでしょうか? data.txtの中身 AKIYAMA 35 179.1 72.5 97 145 ENDOU 40 162.5 65.3 85 130 HONNMA 42 171.8 68.9 89 166 SATO 45 167.2 64.1 91 142 YAMADA 50 168.4 59.5 85 151 プログラム #include <stdio.h> /*標準入出力関数の使用宣言*/ #include <string.h> struct kenkou{ /*健康管理表データの構造体テンプレート作成*/     char *name; /*名前用ポインタ変数*/     int age; /*年齢用データ変数*/     double sintyou; /*身長用データ変数*/ double weight; /*体重用データ変数*/     double hweight; /*標準体重用データ変数*/     double lblood; /*最低血圧用データ変数*/ double hblood; /*最高血圧用データ変数*/     char bloodj[30]; /*血圧診断用データ変数*/ }; void display(struct kenkou *pa) {  printf(" 名前 年齢 身長 体重 標準体重 最低血圧 最高血圧 血圧診断\n");    while(pa->name != NULL) { printf("%20s %3d %3.1f %3.1f %3.1f %3d %3d %10s\n", pa->name,pa->age,pa->sintyou,pa->weight, pa->hweight,pa>lblood,pa->hblood,pa->bloodj); pa++; } } int main(void) /*main関数*/ { FILE *fp; int i; struct kenkou data[15]; fp = fopen( "data.txt", "r" ); if( fp == NULL ) { puts( "data.txtが開けません" ); return 1; } for(i=0; i<15 && !feof(fp); i++){ fscanf(fp,"%20s %3d %3.1f %3.1f %3d %3d",data[i].name, &data[i].age,&data[i].sintyou,&data[i].weight, &data[i].lblood,&data[i].hblood); data[i].hweight=(data[i].sintyou-100)*0.9; if(data[i].lblood<=90&&data[i].hblood<=140){ strcpy(data[i].bloodj,"正常血圧");} else if(data[i].lblood>=95&&data[i].hblood>=160){ strcpy(data[i].bloodj,"高血圧");} else{ strcpy(data[i].bloodj,"境界域高血圧");} i++; } fclose(fp); display(data); return 0; }

  • fortran90

    fortran90 現在 fortran90 で計算プログラムを作っております。 プログラムはかけたのですが、実行画面にエラーが出ます。 解決方法が分かりません。どなたか分かる方いらっしゃいますか。 プログラム implicit real*8 (a-h,o-z) parameter(n=900) open (1,file='004.txt',status='old') do 10 i=1,n read (1,*,end=11)xx,yy,zz,ww theta=acos(zz) phi1=acos(xx/sqrt(1-zz*zz)) phi2=asin(yy/sqrt(1-zz*zz)) write(*,*)theta,phi1,phi2 10 continue 11 end プログラム内容 あるフォルダーに保存してあるテキストファイルから4×4行列のデータを読み込み、そのデータからθの値とφ1、φ2のアタを求めるプログラムです。 実行分のエラー画面には、 acos: DOMAIN error です。

  • 教えてください

    a(複素平面)を正則関数fの孤立特異点とする。この時aがn位の零点ならばaはf '/fの一位の極で、Res{(f '/f),a}=n をしめせ

  • エクセルのデータを大量のテキストファイルに書き込みたい。

    エクセルの縦のセルのデータ(下のCells( 4 * j + i, 4))を繰り返しで、400個のテキストファイルに書き込みたいのですが、 下の""内のjは繰り返しせずに、j.txtとなって入力されてしまいます。なにかいい方法がありませんでしょうか。 ご協力お願いします。(ちなみにvbaは初心者です。) Private Sub CommandButton2_Click() Dim n As Long n = FreeFile Dim j As Integer For j = 0 To 399 For i = 1 To 4 a = Cells( 4 * j + i, 4) f2 = ActiveWorkbook.Path & "\j.txt" Open f2 For Append As #n Print #n, a Close #n Next i Next j End Sub 例. 1 2 3 4 5 6 7 8 9 10 12 13 1,2,3,4→1.txt 5,6,7,8→2.txt 9,10,11,12→3.txt

  • 数学の問題がわかりません><

    数学の問題がわかりません!よければ教えてください>< I = [0,∞)とおく。 f , f_n ; I → R はI上で有界な関数とし、関数列{f_n}[n=1,∞]は関数 f に I 上で一様収束するとする。 (1) 各n∈Nに対してlim[x→∞]f_n(x) = a_n ∈Rが成り立つならば、数列{a_n}[n=1,∞]はCauchy列であることを示せ。 (2) (1)と同じ条件の下でlim[n→∞]a_n = A とおくとき、lim[x→∞]f(x) = Aであることを示せ。 回答よろしくお願いします!

  • phpでのソートについて

    phpのソートについて教えてください。 以下のようなカンマ区切りのログファイルlog.txtがあるとしまして、 100,200,a,b,c, 300,100,d,e,f, 500,60,g,h,i, 50,300,j,k,l, 1000,60,m,n,o, このデータから 1番目のデータ(数値)が2番目のデータ(数値)より大きいデーターのみを対象にして ※つまりは以下のみ対象 300,100,d,e,f, 500,60,g,h,i, 1000,60,m,n,o, ここから1番目のデータ(数値)から2番目のデータ(数値)を引いた数が大きい順に ソートしてファイルに保存させたいのですが、 200,d,e,f,(300-100なので200) 440,g,h,i,(500-60なので440) 940,m,n,o,(1000-60なので940) ↓ ※最終的にこの順番で新しいログファイルnewlog.txtへ保存させたい 940,m,n,o, 440,g,h,i, 200,d,e,f, これらの処理を効率よく1度で行う方法はございますでしょうか。 わかりにくい説明で申し訳ありません。 お忙しい中恐縮ですがご教授いただけましたら幸いです。 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Perl5で同時刻のデータを統合したい

    perl初心者です。 下記のような同時刻の2つのデータを1つのデータに統合させたいのですが うまく出来ず困っています。 どうかお知恵を貸していただけないでしょうか。 データは時刻(時:分:秒), 値1, 値2になっています。 test1.txtの同時刻の後ろにtest2.txtの値1と値2を入れ、 欠測値には-999を入れるプログラムを作っています。 厄介なのは、 開始時刻がtest1.txtよりtest2.txtが早い場合や 終了時刻がtest2.txtよりtest1.txtが遅い場合がある事です。 test1.txt 10:13:14, 3.1, 0.1 10:13:15, 6.1, 0.3 10:13:16, 8.7, 0.2 10:13:17, 12.8, 0.3 10:13:18, 13.4, 0.5 10:13:19, 15.2, 0.4 test2.txt 10:13:16, 32.5, 0.01 10:13:17, 33.1, 0.03 10:13:18, 36.2, 0.02 10:13:19, 34.3, 0.01 10:13:20, 33.8, 0.04 10:13:21, 32.6, 0.09 10:13:22, 32.1, 0.08 希望結果 test.txt 10:13:14, 3.1, 0.1, -999.0, -999.00 10:13:15, 6.1, 0.3, -999.0, -999.00 10:13:16, 8.7, 0.2, 32.5, 0.01 10:13:17, 12.8, 0.3, 33.1, 0.03 10:13:18, 13.4, 0.5, 36.2, 0.02 10:13:19, 15.2, 0.4, 34.3, 0.01 10:13:20, -999.0, -999.0, 33.8, 0.04 10:13:21, -999.0, -999.0, 32.6, 0.09 10:13:22, -999.0, -999.0, 32.1, 0.08 以下が自分が作成したプログラムです。 open IN_1, "test1.txt"; open IN_2, "test2.txt"; open OUT, ">test.txt"; while ($input1 = <IN_1>) { # test1.txtの処理 chomp $input1; # 改行削除 @input1 = split(/,/, $input1); # カンマ区切り $n = $n + 1; $time1[$n] = @input1[0]; @time1 = split(/:/, $time1[$n]); # 時刻をコロン区切り @hours1[$n] = @time_l[0]; @min1[$n] = @time_l[1]; @sec1[$n] = @time_l[2]; @a[$n] = @input1[1]; # 値1 @b[$n] = @input1[2]; # 値2 } while ($input2 = <IN_2>) { # test2.txtの処理 chomp $input2; @input2 = split(/,/, $input2); $m = $m + 1; $time2[$m] = @input2[0]; @time2 = split(/:/, $time2[$m]); @hours2[$m] = @time2[0]; @min2[$m] = @time2[1]; @sec2[$m] = @time2[2]; @c[$m] = @input2[1]; # 値1 @d[$m] = @input2[2]; # 値2 } # 開始と終了時刻の計算 # test1.txtの時刻 $hours1_S = @hours1[1]; # 開始時 $hours1_E = @hours1[$n]; # 終了時 $min1_S = @min1[1]; # 開始分 $min1_E = @min1[$n]; # 終了分 $sec1_S = @sec1[1]; # 開始秒 $sec1_E = @sec1[$n]; # 終了秒 $time1_S = $hours1_S*3600 + $min1_S*60 + $sec1_S; # 開始時刻を秒に計算 $time1_E = $hours1_E*3600 + $min1_E*60 + $sec1_E; # 終了時刻を秒に計算 # test2.txtの時刻 $hours2_S = @hours2[1]; $hours2_E = @hours2[$m]; $min2_S = @min2[1]; $min2_E = @min2[$m]; $sec2_S = @sec2[1]; $sec2_E = @sec2[$m]; $time2_S = $hours2_S*3600 + $min2_S*60 + $sec2_S; $time2_E = $hours2_E*3600 + $min2_E*60 + $sec2_E; if($time1_S <= $time2_S){ # 開始時刻の比較 $starttime = $time1_S; }else{ $starttime = $time2_S; } if($time1_E <= $time2_E){ # 終了時刻の比較 $endtime = $time2_E; }else{ $endtime = $time1_E; } $j = $endtime - $starttime; # 全体のデータ個数 # test.txtへ出力 for($i=1; $i<=$j; $i++){ if(@hours1[$i] != @hours2[$i] && @min1[$i] != @min2[$i] && @sec1[$i] != @sec2[$i]){ printf OUT "%2d:%2d:%2d %5.1f% 5.1f %5.1f %7.2f\n", @hours1[$i], @min1[$i], @sec1[$i], @a[$i], @b[$i], -999, -999; }elsif(@hours1[$i] == @hours2[$i] && @min1[$i] == @min2[$i] && @sec1[$i] == @sec2[$i]){ printf OUT "%2d:%2d:%2d %5.1f% 5.1f %5.1f %7.2f\n", @hours1[$i], @min1[$i], @sec1[$i], @a[$i], @b[$i], @c[$i], @d[$i]; }else{ printf OUT "%2d:%2d:%2d %5.1f% 5.1f %5.1f %7.2f\n", @hours2[$i], @min2[$i], @sec2[$i], -999@, -999, @c[$i], @d[$i]; } } close IN_1; close IN_1; close OUT; とても汚いプログラムになってしまいました… このプログラム以外でも構いませんのでどうかよろしくお願い致します。

    • ベストアンサー
    • Perl