Maxima-ヒントとコツ、または作業方法を少しずつ収集します

人間の記憶は私には謎です。 子供の頃から弱い記憶の所有者であるため、私は常に私の周りの世界のニュアンスのいくつかを忘れています。 ただし、このデータは手元にある必要があります。 また、メモ帳だけでは不十分な場合は、テキストファイルが役立ちます。 これらのファイルの1つには、毎日および毎日のMaximaコマンドの小さなコレクションが含まれています。



私たち全員がこのコンピューター代数のシステムを知っていると思います。 彼女はWolfram Mathematicaのライバルではありませんが、数学ソフトウェアに必要な機能はまさに持っています。 よりシンプルでアクセスしやすくするために、スティックからスーパーコンピューターに至るまで、あらゆるものに頼ることができ、エンジニアリングの実践のタスクが常に紙からプログラムコードに完全に移されるわけではありません。 私が正直にかろうじて見つけた1つの例は、私たちの変換生産の忘れられた工芸品です-以前にソ連のウラルで生産された全金属家庭用真空民生魔法瓶。 その生産を確立するために、私が研究している研究所は、事実上、作業機械のすべての必要なパラメーターを計算機で手動で計算しました。 したがって、Mathematicaライセンスは実用性の指標または資格ではありません。 私はすべてについて数えることができます。



言葉から行為へ。 以下に、このSKAの初心者ユーザーが知っておくことが望ましいMaximaのドキュメントのそれらの瞬間を分類します。





一般的な機能



**または^-べき乗。

%は最後の出力セルです。

_は最後の入力セルです。

%th(n)-最後からn番目の出力セルを返します。

$-結果の出力を妨害します。

kill(all)-セッションをクリアします;

説明(名前)または? 名前-特定の単語のヘルプ。

例(名前)-使用例;

demo()-システムに付属のデモファイルからプログラムを実行します。

'expression-式の評価を防ぎます。

''式-アナログev(強制式評価);

num(%)-分数分子;

denom(%)-分数の分母;

coeff(n、x、3)-与えられた程度まで変数の係数を返します;

depend([m、y]、[x、z])-m(x、z)およびy(x、z)の依存関係を設定します。

2番目(y = 14)-14を抽出します。

subst-ある式の別の式への置換;

changevar(%、x-3-y、y、x); -式内の変数の置換。

%、y = x-3-逆置換;

float(%)-実際の形式に変換します。

名詞(%)-派生語を含む、一般的にすべての不完全な形式を明らかにします。

eval-反対に、さらに別の計算プロセスを実行します。 式にはいくつかの文字が含まれることもありますが、文字には独自の意味があります。 そして、そのような「ネストされた値」の連鎖は、arbitrarily意的に深く続くことができます。 ev関数への1回の呼び出し(evalオプションなし)は、このチェーンに沿って深さ1レベルで下降します。noevalは計算ステージ自体をブロックします。 つまり 式を再計算せずに、ev関数に他のオプションを式に適用するために使用できます。

lhs(eq)-rhs(eq)-ある式の左右の部分。

削除([x + y + z = 1、x + y = 2、x + z = 3]、[z])-変数または複数の変数を連立方程式から除外します。つまり、システムの次元を減らします。

gcd(420.1176)-GCD;

mod(x、y)-符号xでxをyで割った余り。

signum(x)-x> 0の場合は+ 1、x <0の場合は-1を返します。

最大/最小;

log(x)-自然対数( "ln(x)");

floor(4.445)-切り捨て;

天井(4.445)-切り上げ。

listofvars(%)は、元の式をそれに含まれる変数のリストに変換します。

numer:true(またはnumeric:true)-有理数ではなく、浮動小数点のみを使用した計算。

bindtest-値が割り当てられるまで、式でのシンボルの使用を禁止します。

batch()は、拡張子.macまたは.mc(プログラムの元の名前-Macsymaから)のMaximaファイルをロードし、それに含まれる式を実行します。

batchload()、バッチファイルを「サイレントに」ロードします。割り当てられたすべての関数と変数が使用可能になりますが、結果は表示されず、%文字と_文字の値、%th()関数によって返される結果を含むすべての保存された入出力が残ります呼び出し前と同じです。

file_search_maxima-ユーザーファイルのディレクトリとSKA自体のファイルを含む変数。

〜/ .maxima-標準システムカタログ。

file_search_lispおよびfile_search_demo-対応するファイルを見つけるための関数。

load()-2つのファイルアップロード関数のラッパー。

loadfile()-Lispソースファイルをダウンロードします(保存するためにペアにされます())。

stringout()-式とMaxima関数をファイルにアンロードします。

declare()-ファクトベースにファクトを追加します。

facts(name)またはfacts()-データベースの現在の状態を調べます。

remove()-データベースからプロパティを削除します。

仮定()-論理形式の最も一般的な等式および不等式の任意の数量を取ります。つまり、「a = b」、「a#b」ではなく、「等しい(a、b)」、「等しくない(a 、b)。」 論理演算子のうち、andの使用も許可されます(本質的に、assume(x> 0およびx <1)はassume(x> 0、x <1)と同じです)、またはそうではありません-ファクトベースは「または「; 構文に関するものではありませんが、構文に関するものではありません。つまり、not(a> bおよびa <c)などの式も許可されていません。 guess()によって追加されたファクトはfacts()関数でも見ることができます:



デリバティブ、制限、行...



diff(式)-式の全微分を求めます。これは、式の変数のすべての偏微分の合計です。

diff(式、変数)-1次の偏導関数を見つけます。

diff(式、変数、N)-N次の偏導関数を見つけます。

diff(式、x_1、N_1、x_2、N_2、...)-偏微分の合計を見つけます。

derivlist(x、y、...、v)-引数として指定された変数に関する微分および完全な微分(変数に依存しないため);

統合(%、x)-統合;

romberg(cos(sin(x + 1))、x、0、1)-ロンバーグ法による数値積分;

limit((x ^ 2-1)/(x ^ 2 + 1)、x、inf)-制限の計算;

limit((x ^ 2-1)/(x ^ 2 + 1)、x、minf);

制限(tan(x)、x、%pi / 2、プラス)-右側の制限;

制限(tan(x)、x、%pi / 2、マイナス)-左側;

tlimit(...)-tlimswitchフラグを立てて制限を見つけようとします(以下を参照)。

sum(i、i、1、100)-シリーズの合計。

product-シリーズの積(和に似た構文);

sum(1 / x ^ 2、x、1、inf)、simpsum = true; -合計を実行するには、オプション「simpsum = true」を指定する必要があります。

sumcontract(sum1 + sum2)-合計削減;

テイラー(sin(x)、x、0、8)-行;

niceindices(powerseries(sin(x)、x、0))-単純化したシリーズ;



単純化



simp:false-「オンザフライ」で強制的な単純化を無効にします。

ratdenomdivide-デフォルトでは、システム変数はtrueに設定されています。 この場合、分子が合計である各分数は、同じ分母を持つ分数の合計に分解されます。 このオプションをfalseに設定すると、同じ分母を持つすべての分数は、分子が最初の分数の分子の合計として1つの分数に結合されます。

expand()-括弧の展開、単純化。

distrib()-()を展開するが、深さは1レベルのみ。

結合()は、同じ分母を持つ分数を一緒に収集する関数です。

trigsimp(%)-基本的な三角関数による三角関数の単純化。

trigrat(%)-同様に、より強い;

trigreduce(%)-三角関数式を正準有限三角関数列(フーリエ合計)に変換します[三角関数式を項の合計として変換します。各項には1つのサインまたはコサインが含まれます]。

trigexpand(%)-角度の和の三角関数の規則に従って、三角関数の引数を「明らかに」します。

partfrac(%)-単純な分数への分解。

ratsimp(%)-合理的な表現の量をすばやく単純化します。

fullratsimp(expression)-ratsimp関数を式といくつかの非合理的な変換に連続して適用し、変換中に式の変更が停止するまでループでこれらのアクションを繰り返します(遅いが、より信頼性の高い結果が得られます)。

ratexpand(%)-分数を共通分母に導きます。

radcan(%)-対数を使用して指数関数を「削減」し、正準ラジカル[指数関数、対数関数およびべき乗(合理的度数)関数の単純化)に渡します。

factor-括弧内の式を最小化します。

factorum()-多項式をいくつかの因子の積として表すことができない場合、それをそのような積の和に変換することができます。

0. atensimp、foursimp、fullratsimp、logarc、rootscontract、scsimp、simplify_sum、vectorsimpなどの関数もあります。

1.分数の分子と分母の両方でratexpand()の後に、すべての括弧が展開されます。rat()の場合、たとえば2つの変数が存在する用語はグループ化され、そのうちの1つは括弧から外れます。

2. expandはネストのすべてのレベルでブラケットを展開し、ratexpandは最初のレベルの有理式のみを展開しますが、有理ではない部分式は処理されません。

3. ratexpandは分数項を共通分母に導きますが、expandはしません。

4.展開はratdenomdivideシステムオプションの影響を受けません。

5. expandは、keepfloatシステムオプションの値に関係なく、最終10進表記を有理数に変換しません。

6. maxposexおよびmaxnegex-整数への拡張の展開を制御する変数-この展開関数によって展開される正および負の最大指数(デフォルト1000)、expand()関数で直接再割り当てできます。

7. expopおよびexpon-展開グループの関数を呼び出すことなく、自動的に開く最大の正および負の最大角度を指定する変数(デフォルトでは0、つまり、角度は自動的に開かない)。

8.フラグ-半角-半角式の開示を制御します。

2つのフラグ-trigexpandplusおよびtrigexpandtimes-は、それぞれ角度の合計と複数の角度の公式の適用を担当します(デフォルトで設定)。

9.フラグtrigsignおよびtriginverses-最初のフラグは、従来の2つの値(デフォルトはtrue)を取り、三角関数の制限を超える文字の削除を規制します。 triginversesフラグは3桁で、デフォルト値はすべてです。 彼は、sin(asin(x))またはatan(tan(x))の形式の組み合わせを処理する責任があります。 allの値により、これらの組み合わせを両方向で明らかにすることができます(同時にいくつかのルートが失われることを思い出します)。 値trueは、フォームsin(asin(x))の展開のみを許可します。つまり、周期的な値が失われたバリアントをブロックします。 偽の場合は、両方向の変換を禁止します。

10. tlimswitchのフラグ。 デフォルトでは、それもオフになっています。有効にすると、制限機能は、他の方法で制限を見つけることが不可能な場合、特定のポイントの近くでテイラー級数のサブ制限機能を展開して見つけようとします。

11. diff関数自体に直接関連する唯一のフラグは、derivabbrevフラグです。これは、Maxima出力セルの派生物の表示に影響します。 デフォルトではfalseであり、導関数は文字dの分数として示されます。 trueに設定されている場合、微分は、微分変数がインデックスとして記録された短縮形で表示されます。

12. solveradcan-フラグはデフォルトでfalseです。このフラグをtrueに設定すると、radcanを使用するよう強制的に解決します。これにより、このキーがないと正確な解決策が見つからない問題の解決に役立ちます。



行列



A:マトリックス([1,2]、[3,4]);

行列式。 関数の行列式(行列)。

転置行列。 関数の転置(行列)。

逆行列計算。 関数の反転(行列)。

行列の特性多項式の構築。 チャーポリ関数(行列、var)。

マトリックスの追加(+記号)。 Memberwiseは、2つの行列のすべての要素を合計します。

減算(「-」記号)。 加算とまったく同じですが、行列要素は減算されます。

マトリックス分割(「/」記号)。 除算は加算とわずかに異なります。1つのマトリックスの各要素は、別のマトリックスの対応する要素で除算されます。

マトリックスの項ごとの乗算(「*」記号)。 この演算子は加算と同じように機能します。最初のマトリックスの要素に、2番目のマトリックスの対応する要素が乗算されます。 これは、線形代数のコースで通常暗示される行列乗算ではありません!

行列の乗算(「。」記号、ピリオド)。

addcol(V1、[9,10])-行列に列を追加します;

addrow(V1、[9,10])-行を行列に追加します;

V1:サブマトリックス(V1、6、7)-マトリックスV1から6列目と7列目を削除します。

submatrix(削除する行の開始番号、削除する行の終了番号;名前

行列;)-行数を減らす;

M [j、i]-配列Mの特定の要素へのアクセス。

zeromatrix(m、n)-次元m * nのゼロ行列の作成;

ident(n)-単位正方行列の作成。

diagmatrix(n、x)-次元n * nの対角正方行列の作成。

transpose(M)-行列Mの転置;

matrix_size(M)-マトリックスの列と行の数の決定。

ランク(M)-マトリックスのランクの決定。

mattrace(M)-正方行列のトレース(対角要素の合計)の定義(*アプリケーションの前に、行列を操作するためのパッケージをロードする:load( "nchrpl"));

行列式(M)-正方行列の行列式(行列式)の計算。

invert(M)-Mの逆行列の計算



常微分方程式



1)

ode2(方程式、関数、変数)。 関数は通常yで、変数はxです。

一般的な形式で微分方程式を解くことに加えて、初期条件で方程式を解くことができます(境界値問題)。 これを行うには、functionode2を使用して一般的な用語で方程式を解き、次に初期条件を見つけるための関数の1つを使用する必要があります。

ic1(解、点x、点xでのyの値)-初期条件で1次の微分方程式を解くため。

ic2(解、ポイントx、ポイントxでの値y、ポイントxでの値y ')-初期条件で2次微分方程式を解くため。

bc2(解、ポイントx1、ポイントx1の値y、ポイントx2、ポイントx2の値y)-2つの形式の初期条件で2次の微分方程式を解きます。

2)

desolve(微分方程式、変数);

微分方程式系が解かれている場合、またはいくつかの変数がある場合、方程式および/または変数はリスト形式で表示されます。

desolve([方程式のリスト]、[変数1、変数2、...]);

前のバージョンと同様に、微分方程式の導関数を示すために、diff関数が使用されます。この関数は 'diff(f(x)、x);

atvalue(関数、変数=ポイント、ポイントの値)-初期値。



グラフ



plot2d(sin(x)、[x、0.6]);

plot2d(sin(x)、[x、0,1]、[y、0,1]);

plot2d([パラメトリック、実部(W(%i * t))]、imagpart(W(%i * t))]、[t、0,100]、[nticks、1000])$

パラメトリックグラフは次のように構築されます。

[パラメータ、x(t)、y(t)]。 したがって、上記の式から、パラメトリック関数が置き換えられました。 さらに、[t、0,100]は、ホドグラフを描画するポイントの範囲です。 ここでは、それぞれが異なることがわかります。曲線が0または無限大になることは明らかです。ここでの主なことは、無理をしないことです。 曲線がどこで、どこで動いているかを判断するために、t値の範囲をいじることをお勧めします。 この例は、ポイント[-1、0]から始まり、[0、0]に向かう傾向があります。 [nticks、1000]-このパラメーターは、グラフを補間するためのポイントの数を設定します。 それらが多ければ多いほど、チャートの外観はより滑らかになり、作成に時間がかかります。

極座標のグラフ-draw2d関数は、次の引数で適用されます。

user_preamble = "set grid polar"、//極座標での構築。

nticks = n、// nはポイントの数です。

xrange = [dx1、dx2]、//変動範囲x;

yrange = [dy1、dy2]、//変動範囲y;

color = red、//色;

line_width = k、//チャートが構築される線の幅。

title = "チャートの一般名"、

polar(function、variable、lower_variable_variable、upper_variable_variable)//チャートプロット関数;

関数の最初と最後の引数が必要です。 最初は極座標でグラフの構築を開始し、最後(極)はグラフを構築する関数です。

plot3d(((x-10)/ 5)*((y-10)/ 5)、[x、0.20]、[y、0.20])-三次元(3D)グラフィック;

3次元グラフィックスの編集は、2次元と同じ方法で実行されます。

3次元の表面は、グラデーションカラートランジションに置き換えることができます。 これを行うには、「set view map」オプションを使用します。



プログラミング(ドキュメントの詳細)



for、while、untilなど

例:

私のために

k:1からb:3まで

変数の場合:開始ステップステップから終了ステップ式

変数の場合:条件実行式の間にステップステップを開始します

変数の場合:条件が式を実行しない限り、ステップを開始します

機能設定:

f1(x、y):= x + y;



_- ============================= -_

##########その他##############

。================================。



ロシアの指定はマキシマにあります:

arccos-acos

arcsin-asin

arctg-アタン

ch-cosh

sh-sinh

ctg-ベビーベッド

ln-ログ

tg-tan



ギリシャ語のアルファベットの記号:

ガンマ; シータ Psiなど



データ処理:

1)

ロード(説明)$ / *ロード拡張機能* /

a:[1,2,3,4];

平均(a); / * = 5/2平均* /

var(a); / * = 5/4分散* /

std(a); / * =?5/2標準偏差* /

平均(算術平均);

中央値

分散(分散);

偏差(標準偏差);

2)

a:[1.0,2.0,3.0,4.0];

do ldispのi(sin(i)/ i);



式に含まれるすべての変数に関する導関数の計算:

eq:x * l / k; / *ソース式* /

res:listofvars(eq)のiの0 $ res:res +(diff(eq、i)* concat( "d"、(i)))^ 2 $



精度を高めるために、特別な関数bfloat()(ビッグフロート、ビッグフロート)と、ffprec変数(小数点以下の桁数)があります。 つまり、精度を増減するには、fpprec変数に異なる数値を割り当て、float()の代わりにbfloat()関数を使用する必要があります。 numer変数はfalseである必要があります。



デフォルトでは、MaximaはISSシステムで動作します:メートルキログラム秒:

2 * m;

2 * cm;

setunits([centigram、inch、minutes])-引数は3つの基本的な測定単位です:重量、長さ、時間。

setunits([kg、m、s]);

変換(inch、[sm]); -ユニットの翻訳。



stringout( "/ Users / myusername / file1maxima.mc"、INPUT);

すべての作業を後で再生できる「テープ」として保存するには、入力をすべてファイルに保存します。



batch( "/ユーザー/ myusername / file1maxima.mc");

保存したファイルの読み込み:保存したファイルを直接読み込むこともできますが、行の正確な番号は元の計算から変更されます。



SIMPSUM:TRUE;

合計(k、k、1、n)、シンプサム;

=> \ displaystyle {{n ^ 2 + n} \ over {2}}

製品(1 /(n ^ 2)、n、1,10); 製品はほぼ同じように機能します。



niceindices(powerseries(%e ^ x、x、0));

=> \ displaystyle \ sum_ {i = 0} ^ {\ infty} {{{x ^ {i}} \ over {i!}}}



テイラー(%e ^ x、x、0、5);

=> \ displaystyle 1 + x + {{x ^ 2} \ over {2}} + {{x ^ 3} \ over {6}} + {{x ^ 4} \ over {24}} + {{x ^ 5} {120}}以上+ \ cdots

切り捨て(%); taylorの出力には特別な特性があるため、それを多項式に変換する必要があります。



ロード(「ニュートン」);

=> / sw / share / maxima / 5.9.0rc3 / share / numeric / newton.mac

ニュートン(x ^ 7-5 * x ^ 6 + 4 * x ^ 4-5 * x ^ 2 + x + 2.1);

=> 8.194213634964119B-1



tex(%)-式をTeXの形式に変換します。

$$ \左(x + 1 \右)^ 2 $$



TeXからPDFへの変換:

1.テキストエディターに次の5行を逐語的に貼り付けます。

\ documentclass {記事}

\ページスタイル{空}

\ begin {document}

\巨大

\ end {document}

2. tex()出力行をコピーし、\ huge行と\ end {document}行の間に貼り付けます。

3.結果をテキスト形式でmyoutput.txtとして保存します

4.ターミナルウィンドウで、myoutput.txtを保存したディレクトリに移動します

5.次を入力します。

pdflatex myoutput.txt

6.リターンキーを押す-タイプセット方程式を含むmyoutput.pdfというPDFファイルがこのディレクトリに作成されます。



ロード(to_poly_solve); -代数方程式のシステムを解くための追加手順。

to_poly_solve([3 * z1 + z2 + 2 = 0、sqrt(z1)= z2]、[z1、z2]);



sol:rk([rk1、rk2、gamma、w]、[gamma、w、fi、tetta]、[0、%pi / 8、%pi / 2、0]、[t、0、Tmax with_stdout( "ガンマ.txt”、kの場合:1スルーポイントは印刷(sol [k] [1]、sol [k] [2]))-ファイルからデータを入力する例。



では、学生生活でMaximaを使用する典型的な例を見てみましょう。 このプロセスは、以前にHabrの記事で美しく興味深いものとして示されていました。 次に、1つの方程式で座標軸のみを回転させます。

F:uxx+2*uxy+cos(x)^2*uyy-ctg(x)*(ux+uy); /* */ A:F,uxx=uxx,uxy=0,uyy=0,ux=0,uy=0$ A:A/uxx$ B:F,uxx=0,uxy=uxy,uyy=0,ux=0,uy=0$ B:B/(2*uxy)$ C:F,uxx=0,uxy=0,uyy=uyy,ux=0,uy=0$ C:C/(uyy)$ D:F,uxx=0,uxy=0,uyy=0,ux=ux,uy=0$ D:D/(ux)$ E:F,uxx=0,uxy=0,uyy=0,ux=0,uy=uy$ E:E/(uy)$ print("A = ",A)$ print("B = ",B)$ print("C = ",C)$ print("D = ",D)$ print("E = ",E)$ delta:B^2-A*C$ print("Delta = ", delta)$ /*   ,   > 0,       */ A*'diff(y,x,1)^2-2*B*'diff(y,x,1)+C=0; 'diff(y,x,1)=(2*B+sqrt((2*B)^2-4*A*C))/(2*A); ode2(%,y,x); solve(%,%c)$ w1:rhs(%[1])$ print("w1 = ",w1)$ 'diff(y,x,1)=(2*B-sqrt((2*B)^2-4*A*C))/(2*A); ode2(%,y,x); solve(%,%c)$ w2:rhs(%[1])$ print("w2 = ",w2)$ ux:un*diff(w2,x)+ue*diff(w1,x); uy:un*diff(w2,y)+ue*diff(w1,y); uxx:un*diff(diff(w2,x),x)+unn*diff(w2,x)^2+2*uen*diff(w1,x)*diff(w2,x)+ue*diff(diff(w1,x),x)+uee*diff(w1,x)^2; uxy:un*diff(diff(w2,x),y)+uen*(diff(w1,x)*diff(w2,y)+diff(w1,y)*diff(w2,x))+unn*diff(w2,x)*diff(w2,y)+ue*diff(diff(w1,x),y)+uee* diff(w1,x)*diff(w1,y); uyy:un*diff(diff(w2,y),y)+unn*diff(w2,y)^2+2*uen*diff(w1,y)*diff(w2,y)+ue*diff(diff(w1,y),y)+uee*diff(w1,y)^2; uy*E+ux*D+uyy*C+2*uxy*B+uxx*A; %,ctg(x)=cos(x)/sin(x); trigrat(%);
      
      





結果:

2 * uen * cos(2 * x)-2 * uen



All Articles