MathematicaのTableでステップを指数関数的に変化させる方法

このQ&Aのポイント
  • MathematicaのTableでステップを指数関数的に変化させる方法について教えてください。
  • ステップdiを定数ではなく指数関数的に増加させる方法を知りたいです。
  • 出力がNullでない場合でも結果をExportできる方法について教えてください。
回答を見る
  • ベストアンサー

MathematicaのTableでステップを指数関数的に変化させたい

MathematicaのTableで Table[expr,{i,imin,imax,di}] とするとステップdiでリストを作成してくれますが, このステップdiを定数ではなく指数関数的に増加させたいのですが,可能でしょうか.例えばほかで増加分のリストを作成しておき,このリストを使ってTableに代入する等は可能でしょうか? あるいは出力がNullでなければ(Exportできる形式であれば)Tableでなくても結構です.WhileやDo等でやってみてうまく計算はしてくれたのですが,出力がNullのためExportできませんでしたので...WhileやDo等で出力をNullにしない方法でも結構です.ご教授願います.

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

  • ベストアンサー
  • nakaizu
  • ベストアンサー率48% (203/415)
回答No.1

そのようなことはTable を使うまでも無いように思います。 既にリスト{a,b,c,…}があればfを関数として f/@{a,b,c,…} で {f[a],f[b],f[c],…} というリストができます。 あるいは代入で expr/.i->{a,b,c,…} でもリストが作れます。 ここまで書いて気が付いたのですが、リストは代入する値ではなく、増加分なのですね。そうすると足し算をしていかないといけないので、それほど単純ではありませんね。 a を増加分のリストとして b[1]:=a[[1]];b[n_]:=b[n-1]+a[[n]] と関数bを定義すれば、代入する数を求める関数になりますから、それを利用すればよいでしょう。 while やDoでは確かに結果は出力されませんが、その中で目的のリストは作っているのですから、そのリストを表示するだけでよいはずです。 たとえば i=1;l={};While[i<10,AppendTo[l,i^2];i++] と入力しても出力はありませんが、lというリストができているので l と入力すれば {1,4,9,16,25,36,49,64,81} と出力されます。もっとも、While の後ろに「;l」 を加えておけば直に表示されます。

mpnyasuda
質問者

お礼

ご回答ありがとうございます. >>> while やDoでは確かに結果は出力されませんが、その中で#目的のリストは作っているのですから、そのリストを表示するだけでよいはずです。 たとえば i=1;l={};While[i<10,AppendTo[l,i^2];i++] と入力しても出力はありませんが、lというリストができているので l と入力すれば ... >>> という部分が非常に参考になりました.WhileやDoを使ってやってみたいと思います.

関連するQ&A

  • Mathematicaの問題について

    Mathematicaという数式処理システムについて、授業ではほとんど教わっておらず、説明なども飛ばし飛ばしで、一体何をやっているのだか、言っているのだか全く分からないまま課題が出されて、何をどうしてよいのか分からず、手が出ない状況で困っています。課題の内容を載せますので、どなたか解答を教えていただきたいです。出来れば何をどうしているのかも教えて頂けたら嬉しいのですが、解答だけでも十分ありがたいので、長くなってしまいますが、どうかよろしくお願いします。 1.分散を計算する以下の関数には、誤りがある。誤りを 指摘し、正しく動くよう修正しなさい。 myVariance[ arg1 ] : = ( xbar = Mean[arg1] ; temp1 = Table[ {i, 1, Length[arg1]}, (arg1[[i]] – xbar)^2]; N[ Apply[Plus, temp1] / Length[arg1] ] ) 2.正規分布の確率密度関数を描く関数grNormal を以下に 定義する。 (1)と(2)を埋めて関数を完成させなさい。 関数の入力引数は、平均mu, 標準偏差sigma, グラフを描く範囲(-xrange~xrange)の3つとする。 grNormal[mu_, sigma_, xrange_] := (1) __[{ndist, pdfunc, ymin=-0.01, ymax=0.43},  (2) _________; pdfunc = PDF[ndist, x]; Plot[pdfunc,{x, -xrange, xrange}, Frame->True,PlotRange->{{-xrange, xrange}, {ymin, ymax}}] ] 3.複合式を用いて平均を求める関数を以下に定義する。 (1) と(2)を埋めて関数を完成させなさい myMean[(1) __] := (data1 = Apply[Plus, arg1]; data2 = Length[arg1]; average = (2) __) 4.data1 は,10 人の学生の統計学試験の点数とその度数をリストで示したも のである.このデータからMathematica を用いて統計学試験の分散を求める関 数を2 通りの方法により以下に作成した.(1)と(2)の下線を埋めて完成させなさ い. また,それぞれがどのような方法か説明しなさい 【手法1】 data1 = List[40, 40, 40, 50, 50, 50, 50] myVari[arg1_] := (xbar = Mean[arg1]; temp1 = Table[(arg1[[i]]-xbar)^2,{i,1,Length[arg1]}]; (1) _____) Vari = myVari[data1] 【手法2】 data1 = List[40, 40, 40, 50, 50, 50, 50] myVari[arg1_] := (xbar = Mean[arg1]; temp1 = Table[(arg1[[i]])^2,{i,1,Length[arg1]}]; (2) _____) Vari = myVari[data1] 5.data1 は,10 人の学生の統計学試験の点数とその度数をリストで示した ものである.このデータからMathematica を用いて統計学試験の分散を 求める関数を以下に作成した.誤りを指摘し,正しく動作するよう修正 しなさい. data1 = List[40, 40, 40, 50, 50, 50, 50, 60, 70, 80] myVari[arg1] := (xbar = Mean[arg1]; temp1 = Table[(arg1[[i]]-xbar),{i,1,Length[arg1]}]; N[Apply[Plus, temp1] – xbar^2]) Vari = myVari[data1] 6.data1 は10 名の学生の右握力と球投げの結果を2 次元のリストで示したものである. このデータからMathematica を用いて共分散を求める関数を以下に作成した.下線 (1) と(2) を埋めて完成させなさい.なお,  myC の第1引数には右握力(grip),   第2 引数には砲丸投げ(shot) の値を与えるものとする. data = List[{26,16},{26,11},{26,14},{27,16},{28,18}, {29,16},{32,18},{29,21},{24,14},{26,19}] <<Statistics’MultiDescriptiveStatistics’ TableForm[data1] grip = Table[data3[[i,1]],{i,1,10}] shot = Table[data3[[i,2]],{i,1,10}] myC[arg1_,arg2_] := (xbar = Mean[arg1]; ybar = Mean[arg2]; temp1= (1)______________________________________________; (2)____________________________________________________) myCorrelation = myC[grip,shot]

  • 作成したbシェルを実行すると無限ループになってしまいます

    テストの為のデータをファイルに出力したいんですが無限ループになります。 #!/bin/sh i=1001 x=1 y=1 while [ $x -le 100 ]; do printf "$i,1019,001,3989,01" while [ $y -le 100 ]; do printf "01,00987,0,0,11,高橋," y='expr $y + 1' done i='expr $i + 1' x='expr $x + 1' y=1 done > test.csv カンマで区切った最初のデータを100個、 次のデータを100個ファイルに入れたいんですが、 実行すると無限ループになります。

  • 複数テーブルの集計

    お世話になっています。 複数テーブルの集計がわからないので質問させてください。 テーブル3のItem1~4にはテーブル2のItemIDを登録します。 エリア毎の参加人数をcsvデータを出力させたいです。 テーブル3においてテーブル2のItemIDが4つあるので、一人に対して4行必要なのかと思いましたが、テーブルの変更ができません。 テーブルの結合まではできましたがその後ができません。 テーブルの変更ができませんので、結合するためにテーブル2の構造とデータが同じテーブルを他に3つ作成しています。 どうぞよろしくお願いします。 テーブル1 AreaID   AreaName --------------------- 1 北海道 2 東北 3 関東 4 北陸 テーブル2 ItemID ItemName --------------------- 1 自由形50 2 自由形100 3 背泳ぎ50 4 平泳ぎ50 テーブル3 ID AreaID   Name  Item1   Item2  Item3 Item4 --------------------------------------------------------- 1   2    鈴木    2    1    4     3 2   3    佐藤    1    null   3    null 3   1    田中    1    2    null   null 4   2    伊藤    3    null   2    4  5   3    川村    null   2    3    null 「集計結果」       参加人数 自由形50 自由形100 背泳ぎ50 平泳ぎ50 --------------------------------------------------------------- 北海道    1     1     1     0     0  東北     2     1     2     2     2   関東     2     1     1     2     0   北陸     0     0     0     0     0

    • ベストアンサー
    • MySQL
  • Format関数

    ACCESSテーブルから、ExcelにエクスポートするVBAを作成し、 出力ファイル名に「ABC+日付(yymmdd)」をFormat関数を用いて 指定したのですが、 作成されたファイル名が「ABC070919」となるところ、 「ABC70919」と表示されてしまいます。 これを解決する方法などがありましたらご教授ください。 宜しくお願いいたします。

  • 1Accessファイルに定義してある複数のリンクテーブルから、実データ

    1Accessファイルに定義してある複数のリンクテーブルから、実データをひとまとめに(タグで分割して)1ファイルのAccessテーブルに取り込む方法を教えてください。エクスポートでエクセルに出力する方法は分かっているのですが、1テーブル毎の操作となり、作成されるファイルも1テーブル毎になってしまいます。そもそもAccessを良く分かりません。初心者レベルで教えて下さる方、よろしくお願いします。

  • Linuxのtxtファイルへの出力

    こんにちは。 Linuxのファイル出力について質問があります。 #/bin/sh n=$1 while [ $n -le $2 ]; do echo "year $n" cal $n n=`expr $n + $3` done というcalスクリプトを作りました。 実行するとカレンダーがコンソールのほうに出力されるのですが この出力先を「cal-年.txtファイル」という テキストファイルに変更するにはどうすればいいのでしょうか?

  • Office Links/Excelに出力のVBA

    access2000でフォームで抽出したリストを、Office Links/Excel に出力して活用しているのですが、 出来れば、この操作をコマンドボタンを設けて、VBAで実行したいです。 テーブルからのエクスポートだったら、excelへのエクスポートが出来そうなのですが、フォームだと出来なさそうで・・・ やり方のご教授をお願い致します。

  • ACCESS(アクセス)2003→2010について

    最近ACCESS(アクセス)2010に変えたのですが、 ACCESS2003で作成したクエリについて、まれに正常にデータのエクスポートができません。 テーブルデータは、Excel2003で作成したデータをリンクテーブルとし、 同様の形式を複数組み合わせて出力させています。 もちろん、ACCESS2003では正常に出力されます。 ▽解決方法をどなたかおしえていただけませんでしょうか?

  • 2つのテーブルのデータをそれぞれリストに表示して選択したい

    VB6で以下のようなプログラムを作っています。 Aテーブルのデータを一覧表示するリスト1とBテーブルのデータを表示する リスト2があって、リスト1で選んだデータとリスト2で選んだデータの 組み合わせによって、エクセルにデータを出力します。 ・MS-ACCESSのmdbのテーブルからデータを表示(DAOを使っているようです。) ・リストは表示のみ、入力はなし ・複数行選択あり ・初期表示時に、あらかじめあるデータを選択状態にして表示 ヘルプをあちこち見た結果、LISTVIEWが近いかなと思って、やってみている のですが、リスト1で選択しても、リスト2を選択すると、リスト1の反転 が消えてしまうんです。両方選択状態にしておきたいんですけど、LISTVIEW じゃできないんでしょうか?ただ、業務で作成されているコントロールなども 使っているので、その影響がないとも言えません。なので「できるはずだ!」 という回答でも構いません。 あと、リストに入力できてしまいます。選択はできるけど、入力は不可という 状態にできるのでしょうか? ヘルプをあちこち見てみたんですけど、ヘルプ自体がよくわからなくて。。。 アドバイスよろしくお願いします。

  • 双方向リストの関数

    双方向リストにデータファイルから読み込んだ氏名と成績のデータを追加し,リストの末尾から順にデータを表示するプログラムを作成したのですが、insertLast() 関数を用いて末尾ノードの後ろに新しいノードを連結するという部分をどのようにして良いのかわからず困っています。 どのように記述して良いのかわからなかった部分を/*** ***/のコメントで示してあります。 どなたかアドバイスやヒント、その他の指摘などご教授してくださる方いましたらよろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define NAME_LENGTH 20 /* 名前を格納する文字列の長さ */ /* 双方向リストのノードとなる構造体の定義 */ typedef struct sList{  struct sList *prev; /* 前のノードのアドレス */  char name[NAME_LENGTH]; /* 名前 */  char grade; /* 成績 */  struct sList *next; /* 次のノードのアドレス */ } sNode; /* この構造体を sNode型 と定義する */ /* 双方向リストの先頭と末尾を格納するための構造体 */ typedef struct {  sNode *firstNode; /* リストの先頭ノードのアドレス */  sNode *lastNode; /* リストの末尾ノードのアドレス */ } manageList; /*  双方向リストの末尾にノードを追加する関数 insertLast()  引数   manageList *list リストの先頭・末尾ノードを管理する構造体のアドレス   sNode *node 末尾に追加したいノードのアドレス  返値   なし */ void insertLast(manageList *list, sNode *node ) {  /*** リストの末尾にノードを追加する ***/  return; } /*  双方向リストの新しいノードを作成する関数 makeNewNode()  引数   char *aName 名前(文字列)の先頭アドレス   char aGrade 成績  返値   sNode * 新しく作成したノードの先頭アドレス */ sNode *makeNewNode(char *aName, char aGrade ) {  sNode *pNewData;  /* sNode 型のメモリ領域を確保 */  pNewData = (sNode *) malloc( sizeof(sNode) );  /* 名前と成績のデータを設定する */  strcpy( pNewData->name, aName );  pNewData->grade = aGrade;  pNewData->prev = NULL;  pNewData->next = NULL;  return( pNewData ); } /*  main()  引数   なし  返値   int 正常終了の時 0     異常終了の時 -1 (ファイルの読み込み失敗など) */ int main( void ) {  manageList list; /* リストの先頭・末尾ノードのアドレスを持つ構造体 */  sNode *pNew; /* 新しく作成したノードのアドレスを持つ変数 */  sNode *pNow; /* 現在見ているノードのアドレスを持つ変数 */  FILE *fp; /* データファイルのファイルポインタ */  char name[ NAME_LENGTH ]; /* ファイルから読み込んだ名前を一時的に保持する変数 */  char grade; /* ファイルから読み込んだ成績を一時的に保持する変数 */  /* 初期状態では先頭・末尾ノードともNULL */  list.firstNode = NULL;  list.lastNode = NULL;  /* データファイル exer6.txt を読み込み用に開く.    ファイルが開けなかった場合,エラーメッセージを表示し異常終了する.*/  fp = fopen("exer6.txt","r");  if(NULL == firstNode){   printf( "ファイルが開けませんでした. \n" );   return( -1 );  }  /* データをファイルの最後(EOF)まで読み込み,双方向リストにデータを追加する */  while( EOF != fscanf( fp, "%s %c", name, &grade ) ) {   /* 新しいノードを作成 */   pNew = makeNewNode( name, grade );   /*** insertLast() 関数を用いて末尾ノードの後ろに新しいノードを連結する ***/   pNow->next = pNew ;   pNew->prev = pNow ;   pNow = pNew ;  /* ファイルを閉じる */  fclose( fp );  /* 現在見ているノードを末尾ノードにセットする */  pNow = lastNode  /* 末尾のノードから前のノードへたどりながらデータを出力する */  while( NULL != pNow ) {   /* 出力 */   printf( "%s %c\n", pNow->name, pNow->grade );   /* 現在見ているノードを一つ前のノードにする */   pNow = pNow->prev;  }  return( 0 ); }