2012-02-03 18 views
2

広範囲のパラメータ空間に対して非線形方程式系を解かなければならない。私は最初の開始点に敏感なFindRootを使用していますので、数式をループやテーブルに入れるのではなく、手作業で試行錯誤してプロットする必要があります。Mathematicaが行列を追加する

私がしたいのは、固定数の列で行列を作成することですが、行数は可変であるため、新しい結果を追加するときや、それらを解決する際には続けることができます。

私は2つの変数について解くと、その後、変数の変数も関数g(XX、YY)を格納しています
{{{xx, yy}} = {x, y} /. FindRoot[{f1(x,y) == 0,f2(x,y)==0}, {x,a},{y,b}], 
g(xx,yy)} >>> "Attempt1.txt" 

は今、私のようなものを使用しました。

これは私にとってはうまくいくようですが、結果はマトリックスではなくなりましたが、データはテキストタイプのものとして保存されています。

私はFindRootを手で解決するたびに行を追加し続ける行列やデータベースにとどめることができますか?ここでも、私はFindRootを手で行う必要があります。なぜなら、FindRootは始点に敏感で、最初にプロットしなければ良い始点を知らないからです。

どうもありがとう

+1

にちょうど繰り返し呼び出しているので、これはもう行列ではない理由を私は理解していない、ループの中でそれを置くことができます。この{Put {{{1,2}、{3,4}}、 "tmp.mx"]を考えてみましょう。再度インポートした後は全く同じ式である["tmp.mx"] 'を取得してください。 – halirutan

+0

すべてを1つのエントリとして保存しています。私はdata = Import ["temp.mx"]とし、次元[data]を実行したとします。答えは1です。情報の抽出方法はわかりません。データ[[1]]を実行すると、データ全体が出力されます。私は個々の情報を抽出することはできません。私がdata [[1,1]]を実行するとエラーになります。 – user1169757

+0

私はForループの中で{x1、x2、x3、x4、x5、x6、x7、x8、x8、x10} >>> "temp.mx"を22回繰り返しました。今度はdata = Import ["temp.mx"、 "Table"]を実行してDimensions [data]を実行すると110になります。実際には10列と22行の行列が必要でした。行/レコードごとに10個のデータが5個のデータとして格納され、合計サイズは5x22 = 110になります。たとえば、data [[1]] = {"{24258.225756005108"、 "0.0001254874133927587"、\ "0.10668678000535163"などです。データ[[i、j]]がi番目のレコードのj番目の値を表すクリーンな10x22行列でデータを取得できますか?ありがとう。 – user1169757

答えて

0

私はあなたが何をしようとして理解していないよいない限り、これは次に

results = {}; 
results = Append[Flatten[{{xx, yy} = {x, y} /. FindRoot[{f1(x,y) == 0,f2(x,y)==0}, {x,a},{y,b}],g(xx,yy)}],results]; 

あなたは行列結果に行を追加するために抱き合わせているたびに動作するはずです手で、あなただけの最初のaとbの値に対する感度の問題を回避するために、ところで

results = Append[Flatten[{{xx, yy} = {x, y} /. FindRoot[{f1(x,y) == 0,f2(x,y)==0}, {x,a},{y,b}],g(xx,yy)}],results]; 

を入力し、あなたは目を変化させ、ループ内のパラメータ空間を探ることができeパラメータをゆっくりと、前回のループ反復からのxとyの解を新しいaとbの値ごとに使用してゆっくりと計算します。

0

Getの代わりにReadを使用して、実行したいことを達成できます。 Getは、1回の実行で完全なファイルを読み込みますが、Expression,Byte,Numberなどを1つ抽出するように調整することができます。ですから、ファイルを開き、式の後に式を読み込んでリストの中に詰め込む必要があります。

PutAppend[{{1, 2}, {3, 4}}, "tmp.mx"] 
PutAppend[{{5, 6}, {7, 8}}, "tmp.mx"] 
PutAppend[{{9, 23}, {11, 12}}, "tmp.mx"] 
PutAppend[{{13, 14}, {15, 16}}, "tmp.mx"] 

stream = OpenRead["tmp.mx"]; 
mat = ArrayPad[ 
    NestWhileList[Read[stream, Expression] &, 
    stream = OpenRead["tmp.mx"], # =!= EndOfFile &], -1]; 
Close[stream]; 

これで、すべての行を含むリストがmatになりました。最初の要素にはOpenReadの出力が含まれ、最後の要素にはEndOfFileが含まれているため、両端に1つの要素を切り捨てるArrayPadが必要です。あなたはNestWhileListのような機能的な構造に精通していない場合、あなたが好きなように、あなたはそれが本当にRead

stream = OpenRead["tmp.mx"]; 
mat = {}; 
AppendTo[mat, Read[stream, Expression]]; 
AppendTo[mat, Read[stream, Expression]]; 
AppendTo[mat, Read[stream, Expression]]; 
AppendTo[mat, Read[stream, Expression]]; 
Close[stream]; 
関連する問題