高度な数学:機能と制限
このページでは、Varlig Calcの高度な数学機能(リスト、ベクトルと行列、複素数、総和と総乗、方程式の求解、微積分)をまとめます。機能ごとに、関数の働き、受け付ける値、答えの正確さ、制限を紹介します。答えが予想と違うときに、詳細を確認するために使ってください。
例を豊富に使った入門は、各ガイドを参照してください:リストと統計、ベクトルと行列、複素数、総和、方程式の解法、微積分。
概要
| 機能 | 例 | 答え |
|---|---|---|
| リスト | [1, 2+3, 4*2] |
[1, 5, 8] |
| リストの項目 | [10, 20, 30][1] |
20 |
| 入れ子のリストの項目 | [[1,2],[3,4]][1][0] |
3 |
| 量の合計 | sum([1 kg, 500 g]) |
1.5 kg |
| 統計 | average([1,2,3]), median([5,1,3]) |
2, 3 |
| 範囲(降順) | range(5, 1, -2) |
[5, 3, 1] |
| リストの足し算 | [1,2] + [3,4] |
[4, 6] |
| 行列の積 | [[1,2],[3,4]] * [[1,0],[0,1]] |
[[1, 2], [3, 4]] |
| 逆行列 | inverse([[1,2],[3,4]]) |
[[-2, 1], [1.5, -0.5]] |
| 行列式 | det([[1,2],[3,4]]) |
-2 |
| 転置 | transpose([[1,2],[3,4]]) |
[[1, 3], [2, 4]] |
| 連立一次方程式 | solve_system([[2,1],[1,2]], [34,29]) |
[13, 8] |
| 複素数の計算 | (2+3i) * (2-3i) |
13 |
| 複素数の平方根 | sqrt(complex(-4,0)) |
2i |
| 範囲にわたる総和 | sum(k^2, k, 1, 10) |
385 |
| 範囲にわたる総乗 | product(k, k, 1, 5) |
120 |
| 方程式を解く | solve(x^2 = 4, x, 0, 3) |
2 |
| 記号微分 | differentiate(sin(x), x) |
cos(x) |
| ある点での微分係数 | derivative(x^3, x, 2) |
12 |
| 定積分 | integrate(x^2, x, 0, 3) |
9 |
リスト、行列、複素数は、通常の値として扱えます。名前を付けたり、自分で定義した関数に渡したりでき、前の行を編集すると再計算されます。
平方和(n) = sum(k^2, k, 1, n)平方和(3) 答え 14先頭(項目) = 項目[0]先頭([10, 20]) 答え 10平方根(y) = solve(x^2 = y, x, 0, 10)平方根(9) 答え 3リストと数学関数の書き方
- 項目と引数はカンマで区切ります。 後ろにスペースがあるカンマは常に区切りになり、後ろにちょうど3桁の数字が続くカンマは桁区切りになるので、
[1,200, 1,800]は2つの項目です。スペースを入れない場合は、[12,-51,4]のようにすべてのカンマが区切りになります。[1,234]のようにカンマがどちらの意味にも取れる場合は、両方の書き方がエラーに表示されます。小数には小数点を使います。 - 行列は行のリストです。
[[1,2],[3,4]]のように書きます。[1,2;3,4]のようなセミコロンの省略記法はありません。 - インデックスは0から始まります。 0以上の整数で指定してください。リストの末尾を超えるインデックスはエラーになり、先頭に戻ったり、範囲内に切り詰められたりすることはありません。
- 引数の数はチェックされます。
sqrt(4,9)は推測で計算せず、エラーになります。
リストと統計
次の関数はリストを受け取ります:length または count、sum、product、average または mean、median、min、max、stddev(標本標準偏差)。
- 空のリストの
sumは0、productは1、countは0です。空のリストに対するそのほかの統計はエラーになります。 - 同じ長さの2つのリストは、項目ごとに足し算と引き算ができます。リストに数値を掛けたり、リストを数値で割ったりでき、
==で2つのリストを比べることもできます。 range(start, end, step)は両端を含みます。ステップは省略できます。dot(a, b)は、2つの実数ベクトルの内積を求めます。
支出 = [420, 385, 510, 460] 答え [420, 385, 510, 460]sum(支出) 答え 1,775average(支出) 答え 443.75median(支出) 答え 440支出[0] 答え 420支出 * 1.1 答え [462, 423.5, 561, 506]range(0, 1, 0.25) 答え [0, 0.25, 0.5, 0.75, 1]リストの変換
| 呼び出し | 答え | 動作 |
|---|---|---|
sort([3,1,2]) |
[1, 2, 3] |
単位のない数値を昇順に並べ替えます。等しい項目は元の順序を保ちます |
reverse([1,2,3]) |
[3, 2, 1] |
どのリストでも逆順にします |
unique([3,1,3,2]) |
[3, 1, 2] |
各値の最初のものだけを残します。項目は単位も含めて完全に一致する必要があります |
slice([10,20,30,40], 1, 3) |
[20, 30] |
開始インデックスから、終了インデックスの手前までの項目を取り出します |
map(x^2, x, [1,2,3]) |
[1, 4, 9] |
各項目について式を計算します |
filter(x > 1, x, [1,2,3]) |
[2, 3] |
条件がtrueになる項目だけを残します |
variance([1,2,3]) |
1 |
正確な標本分散(個数から1を引いた数で割ります) |
sliceには、0 ≤ start ≤ end ≤ リストの長さ を満たす整数が必要です。それ以外の範囲はエラーになります。varianceには、単位のない数値が2つ以上必要です。mapとfilterは、式、各項目に使う名前、リストの順に受け取ります。この名前は呼び出しの中でだけ有効なので、ほかの場所で定義した名前は変わりません。filterの式は、trueまたはfalseを返す必要があります。
ベクトルと行列
ベクトルはフラットなリスト、行列は行のリストです。行列は長方形で、単位のない実数だけを含み、行数と列数が1〜32でなければなりません。
| 関数 | 動作 |
|---|---|
A * B |
行列の積。Aの列数とBの行数が等しい必要があります |
transpose(A) |
行と列を入れ替えます |
shape(A) |
[行数, 列数] |
identity(n) |
n 行 n 列の単位行列 |
trace(A) |
正方行列の対角成分の和 |
det(A) |
正方行列の行列式 |
inverse(A) |
正方行列の逆行列。特異行列はエラーになります |
rank(A) |
任意の長方形行列の階数(正確な消去法による) |
dot(a, b) |
同じ長さの2つのベクトルの内積 |
cross(a, b) |
項目が3つの2つのベクトルの外積 |
solve_system(A, b) |
正方行列 A とフラットなベクトル b について、A*x = b を解きます |
eigenvalues(A) |
実正方行列の固有値。複素数の組も含み、順序は決まっていません |
qr(A) |
[Q, R](Q*R は A とほぼ等しい) |
lu(A) |
[P, L, U](P*A は L*U とほぼ等しい)。正方行列のみ |
svd(A) |
[U, s, Vt](s は特異値のフラットなリストで、A は U*diag(s)*Vt とほぼ等しい) |
正確な結果: det、inverse、rank、solve_system は正確な分数を使います。rank には丸めの許容誤差がありません。solve_system は特異な連立方程式に対してエラーを返し、非線形の連立方程式や、解が無数にある連立方程式は扱いません。
近似の結果: eigenvalues、qr、lu、svd は浮動小数点数を使い、出力が有限であることを確認します。qr と svd は長方形行列を受け付け、コンパクトな(thin)分解を返します。固有値とSVDの計算は、10,000回の反復で停止します。表示される答えでは、最大の成分に比べて丸め誤差にすぎない成分は0と表示されますが、インデックスで取り出すと保存された値が返されます。条件の悪い行列では精度が落ちることがあるので、これらの結果を == で判定しないでください。
# 大人2枚と子ども1枚で34、大人1枚と子ども2枚で29solve_system([[2,1],[1,2]], [34,29]) 答え [13, 8]det([[2,1],[1,2]]) 答え 3rank([[1,2],[2,4]]) 答え 1複素数
i は虚数単位です。ただし、i という名前やカスタム単位を定義した場合は除きます。
- 関数:
complex(real, imaginary)、real、imag、conj、abs、arg(ラジアン)、sqrt(主値)は、すべて複素数を受け付けます。 - 正確さ: 実部と虚部、四則演算、整数乗は正確なままです。一般の累乗根と
argは近似値です。 - 実数の結果:
(2+3i) * (2-3i)のように虚部が打ち消し合うと、答えは通常の実数になります。-4 + 0iやcomplex(-4,0)のように複素数として書いた値は、-4と表示されても、計算や名前を通じて複素数のままです。 - 負の数の平方根と対数:
sqrt(-4)、ln(-1)、log(-100)は実数の範囲で計算され、虚数のエラーを表示します。エラーには、代わりに書くべき複素数の形(sqrt(-4 + 0i)など)が示されます。その形かsqrt(complex(-4,0))と書くと、2iになります。 - 表示: 浮動小数点数の丸め誤差にすぎない部分は0と表示されるので、
exp(i*pi)は-1と表示されます。保存される値には桁が残っています。 - 比較:
<と>は、両方の虚部が0の場合にだけ使えます。 - そのほかの関数:
sin、cos、tanとその逆関数、双曲線関数とその逆関数、exp、ln、logまたはlog10、log2、cbrt、小数乗や複素数乗は、すべて複素数を受け付けます。これらは浮動小数点数と主枝を使います。0の対数と、有限でない結果はエラーになります。
(2+3i) * (2-3i) 答え 13abs(3+4i) 答え 5sqrt(-4 + 0i) 答え 2isqrt(complex(-4,0)) 答え 2isqrt(-4) 答え Error: imaginary number. For a complex answer, write sqrt(-4 + 0i)exp(i*pi) 答え -1総和と総乗
sum(expression, name, from, to) は、from から to まで(両端を含む)の各整数について式を計算し、足し合わせます。summation はその別名で、product は足す代わりに掛け合わせます。
- 名前は呼び出しの中でだけ有効です。すでに定義した名前は変わらず、行がその名前に依存することもありません。
- 総和や総乗の中に、別の総和や総乗を入れられます。
toがfromより小さい場合、範囲は空になり、総和は0、総乗は1になります。- 1回の呼び出しで使える項は、最大10,000個です。
sum(k^2, k, 1, 10) 答え 385product(k, k, 1, 5) 答え 120k = 7 答え 7sum(k, k, 1, 3) 答え 6k 答え 7方程式を解く
solve(expression, name, lower, upper) は、lower から upper の間で式が0になる name の実数値を1つ求めます。solve(left = right, name, lower, upper) は、両辺が等しくなる値を求めます。
- 境界は有限の数値で、
lowerはupperより小さくなければなりません。 - 境界ちょうどにある根は受け付けられます。それ以外の場合、式は一方の境界で正、もう一方の境界で負になる必要があり、その間で連続している必要があります。
- 探索では、ステップごとに区間を半分にします。128ステップ以内に、式が0から
1e-10以内に収まり、区間が十分に狭くなれば成功です。確認した点で式が定義されていない場合や、探索が収束しない場合は、その行にエラーが表示されます。 - 求めるのはすべての根ではなく、1つの根です。連立一次方程式には
solve_systemを使ってください。
solve(1500 + 12*x = 20*x, x, 0, 1000) 答え 187.5solve(x^2 = 2, x, 0, 2) 答え 1.4142135624微積分
記号微分
differentiate(expression, name)(derivative(expression, name) とも書けます)は、導関数をテキストとして返します。
- 単位のない実数の演算に対して、和、積、商、累乗の法則と連鎖律を使います。さらに
sin、cos、tan、sinh、cosh、exp、ln、sqrtも扱えます。 - 式に含まれるほかの名前は、ノートで値が定義されているかどうかに関係なく、定数として扱われます。
differentiate(a*x^2, x)は(a*(2*(x^(2-1))))になります。 - 結果は簡約されず、8,192文字までに制限されます。
absなどのほかの関数はエラーになります。それらには、ある点での微分係数を使ってください。これは完全な数式処理システムではありません。- 導関数には、元の式と同じ定義域の制約があります。
differentiate(sin(x), x) 答え cos(x)differentiate(x^3, x) 答え (3*(x^(3-1)))ある点での微分係数
derivative(expression, name, point)、または引数が3つの differentiate は、1つの点での傾きを数値的に求めます。精度を高めた中心差分を使い、片側の推定値と照らし合わせて確認します。式には自分で定義した関数も使えますが、その点の近くで滑らかで、単位のない実数を使っている必要があります。推定値が収束しない場合や、サンプルが定義されていない場合は、その行にエラーが表示されます。
数値的な形式では数値を求めるため、変数以外のすべての名前に値が必要です。これは、ある点での微分係数、sum、product、solve、integrate に当てはまります。値のない名前があると、Unsupported: Unknown name: の後にその名前が表示されます。
derivative(x^3, x, 2) 答え 12f(x) = x^2derivative(f(x), x, 3) 答え 6differentiate(a*x^2, x) 答え (a*(2*(x^(2-1))))derivative(a*x^2, x, 3) 答え Unsupported: Unknown name: a定積分
integrate(expression, name, lower, upper) は、2つの有限の境界の間で、式の下の面積を求めます。
- 境界を入れ替えると答えの符号が変わり、境界が等しいと0になります。
- 不等間隔の点でサンプリングする、適応型の7点・15点ガウス・クロンロッド則を使います。そのため、
cos(128*pi*x)のような規則的な波にだまされません。integrate(cos(128*pi*x), x, 0, 1)は約-1.3e-15となり、丸め誤差の範囲で0です。 - 誤差の推定値の合計が、答えの大きさの
1e-9倍以下(答えが1より小さい場合は1e-9以下)になることを目指します。少なくとも2段階の細かさで比較し、丸め誤差を考慮したうえで、推定誤差が最も大きい部分から細分化します。 - 細分化2,048回、分割20階層、またはその行のほかの高度な数学と共有する100,000ステップのいずれかに達すると停止します。制限に達した場合や、サンプルが定義されていない場合はエラーになります。
- 誤差の推定値はよい目安ですが、保証ではありません。滑らかで有限の式を使ってください。スパイク、不連続点、速い振動を含む式では、結果が不正確になることがあります。
- 不定積分と無限の境界には対応していません。
integrate(x^2, x, 0, 3) 答え 9integrate(x^2, x, 3, 0) 答え -9数学関数の引数と単位
factorialはfactの別名、truncはintの別名です。signは-1、0、1のいずれかを返します。atan2(y, x)は、ラジアン単位の角度を単位のない数値で返します。round、floor、ceilの省略可能な2番目の引数は、小数点以下の桁数ではなく ステップ です。round(17, 5)は最も近い5の倍数に丸めます。小数点以下の桁数に丸める方法については、端数処理を参照してください。- 対数、指数関数、双曲線関数には、単位やお金を使えません。通常の三角関数は、
30°のような角度を受け付けます。 - 平方根と立方根は、単位の指数が割り切れる場合に単位を保持します。量の累乗も単位を保持します。摂氏や華氏の温度は、2乗したり根を取ったりできません。
gcd(12, 18) 答え 6round(17, 5) 答え 15sin(30°) 答え 0.5sqrt(9 m²) 答え 3 m(2 kg)^2 答え 4 kg²制限
制限は、答えを表示する前にチェックされます。
- リストまたは
rangeの項目は1,024個まで - 行列は32 × 32まで
- 1つの
sumまたはproductの項は10,000個まで - リストと関数呼び出しの入れ子は16階層まで
- 1行の高度な数学全体(入れ子の呼び出しを含む)で共有する100,000ステップ
- 分数の分子または分母は4,096ビットまで(Varlig Calcのほかの部分と同じ)
制限に達すると、その行にエラーが表示され、ノートのほかの部分は引き続き動作します。途中までの合計、逆行列、収束していない根が答えとして表示されることはありません。すべての制限と答えの正確さについては、結果の読み方:表示と精度を参照してください。