コンテンツへスキップ
Varligガイド
Varligホーム

総和、方程式の解法、微積分

このページでは、一連の項を足し合わせたり掛け合わせたりする方法、方程式が成り立つ値を求める方法、式を公式として、または1点で微分する方法、そして定積分の計算を説明します。問題にΣやΠの記法が必要なとき、方程式を手で簡単に変形できないとき、授業で求めた導関数や曲線の下の面積を確かめたいときに役立ちます。

これらの関数はすべて、sum(k^2, k, 1, 10)k のように、引数の1つに変数名を取ります。この名前は呼び出しの中にだけ存在するので、ノートのほかの場所にある同じ名前の値が変わることはありません。

有限の和と積

calc
sum(k, k, 1, 100) 答え 5,050
sum(k^2, k, 1, 10) 答え 385
summation(2*k - 1, k, 1, 10) 答え 100
product(k, k, 1, 5) 答え 120

引数は、式、変数、最初の値、最後の値の順です。両端を含むので、sum(k, k, 1, 100) は1 + 2 + … + 100を計算します。summationsum の別名です。3行目は最初の10個の奇数の和が10²になることを、最後の行は5の階乗を示しています。

和はお金や単位とも使えるので、定期的な積み立てに向いています。

calc
# 5年間、毎年初めに£1,200を年5%で積み立てる
sum(£1200 * 1.05^k, k, 1, 5) 答え £6,962.30

積は、確率を連ねて計算するのに便利です。23人のグループの中に誕生日が同じ人が少なくとも2人いる確率は、1から23人全員の誕生日が異なる確率を引いたものです。

calc
p = 1 - product((365 - k)/365, k, 0, 22)
(p as %) to 1 dp 答え 50.7%

詳細:

  • 最初の値と最後の値は整数でなければなりません。
  • 最後の値が最初の値より小さい場合、項はありません。和は0、積は1になります。
  • 1つの和または積に含められる項は最大10,000個です。
  • sum(sum(j, j, 1, n), n, 1, 4) のように和を入れ子にできます。これは 20 です。入れ子の呼び出しは、全体で1つの処理量の上限を共有します。
  • すでにある値を合計するには、代わりにリストを使います。sum([4, 8, 15]) のように書きます。リストと統計を参照してください。

数値解を1つ求める

solve は、指定した2つの限界の間を探して、方程式を成り立たせる変数の値を見つけます。

calc
solve(x^2 = 2, x, 0, 2) 答え 1.4142135624
solve(x^2 - 4, x, -3, 0) 答え -2
solve(cos(x) = x, x, 0, 1) 答え 0.7390851332
# 石が44.1 m落ちるのに何秒かかるか
solve(4.9*t^2 = 44.1, t, 0, 10) 答え 3
# キャンドルの売値は£12、製造原価は1個£4、固定費は£2,000
solve(12*n = 2000 + 4*n, n, 0, 1000) 答え 250

引数は、方程式、変数、下限、上限の順です。方程式は = を使って書くことも、式だけを書くこともできます。式だけの場合、solve式 = 0 として扱います。

限界の選び方

solve では、指定した限界の間のどこかで、方程式の両辺の大小が入れ替わる必要があります。つまり 左辺 - 右辺 が、一方の限界で正、もう一方の限界で負(またはどちらかの限界でちょうどゼロ)でなければなりません。そのうえで範囲を狭めていき、交わる点を見つけます。

このことから、いくつかの注意点があります。

  • 限界の間に根が2つあると、全体として符号が変わらないことがあります。solve(x^2 - 4, x, -3, 3) は、x^2 - 4 が両端で正なので失敗します。03 のように、根を1つだけ挟む限界を使ってください。
  • x^2 = 0 のように曲線がゼロに接するだけの根は、符号が変わらないので、この方法では見つけられません。
  • 式は範囲全体で定義されている必要があります。solve(sqrt(x) = 2, x, -1, 10) は、負の数の sqrt がエラーになるので失敗します。代わりに範囲を 0 から始めてください。
  • 0 付近の 1/x のようにゼロをまたいで値が飛ぶところは根ではないので、solve はそこで答えではなくエラーを返します。
  • 下限は上限より小さく、どちらもただの数値でなければなりません。

solve が返す根は1つだけで、すべての根のリストを返すことはありません。ただの数値でしか使えないので、方程式には単位を含めないでください。

丸めと再利用

答えは精度の高い数値近似なので、表示される最後の桁がずれることがあります。すっきりした値にするには同じ行に to 4 dp(桁数は任意)を付け、答えを再利用したいときは先に名前を付けてください。

calc
solve(sqrt(x) = 2, x, 0, 10) 答え 4.0000000001
solve(sqrt(x) = 2, x, 0, 10) to 4 dp 答え 4
= solve(sqrt(x) = 2, x, 0, 10) 答え 4.0000000001
* 3 to 2 dp 答え 12

solve を自分で作る関数で包めば、別の値で繰り返し使えます。

calc
根(y) = solve(x^2 = y, x, 0, 10)
(9) 答え 3

複数の未知数を含む複数の線形方程式には、ベクトルと行列solve_system を使ってください。

記号微分

引数が2つの場合、differentiate(または derivative)は導関数を式として返します。

calc
differentiate(sin(x), x) 答え cos(x)
derivative(x^3, x) 答え (3*(x^(3-1)))
derivative(x * sin(x), x) 答え (sin(x)+(x*cos(x)))
derivative(exp(2*x), x) 答え (exp((2*x))*2)

結果は簡約されず、すべての段階がかっこで囲まれます。(3*(x^(3-1))) は3x²です。式の中の小数は分数で返されるので、19.6(98/5) と表示されます。

結果は テキスト で、Varligがそのまま計算に使えるものではありません。使うには、その式を自分で作る関数に入力してください。

calc
傾き(x) = 3*x^2
傾き(2) 答え 12

記号微分で扱えるもの:

  • +-*/ とべき乗(和、積、商、べき乗、連鎖律を使用)
  • 関数 sincostansinhcoshexplnsqrt
  • そのほかの名前(定数として扱われ、結果にも名前のまま残ります)

名前はノートの中で値を持っている必要がないので、記号を含む式も微分できます。

calc
derivative(a*x^2, x) 答え (a*(2*(x^(2-1))))

abslog、自分で定義した関数など、ほかの関数はエラーになります。それらには下の数値微分を使ってください。また、得られた式は元の式の制約を引き継ぎません。(1/(2*sqrt(x))) はそれ自体で独立した式のように見えますが、sqrt(x) の導関数が有効なのは sqrt(x) が有効な範囲だけです。

数値微分

3つ目の引数を指定すると、derivative はその点での傾きを数値で返します。

calc
derivative(x^3, x, 2) 答え 12
differentiate(sin(x), x, 0) 答え 1
derivative(sqrt(x), x, 4) 答え 0.25
高さ(t) = 20*t - 4.9*t^2
derivative(高さ(t), t, 1) 答え 10.2

この形は、上の 高さ のようにノートで定義した関数にも使えます。記号微分ではこれができません。数値を求めるので、式の中のほかの名前にはすべて値が必要です。sumproductsolveintegrate も同様です。

calc
derivative(a*x^2, x, 2) 答え Unsupported: Unknown name: a
a = 3
derivative(a*x^2, x, 2) 答え 12

答えは、その点の両側の近い値から求めた推定値です。本当の傾きがきりのよい数の場合、Varligはその数を保存するので、厳密に比較できます。exp(x) の傾きのような無理数の傾きはすべての桁を保持するので、許容誤差の範囲内で比べてください。

calc
derivative(x^3, x, 2) == 12 答え true
abs(derivative(exp(x), x, 1) - e) < 1e-6 答え true

式は、その点の周辺で角や途切れのない滑らかなものである必要があります。derivative(abs(x), x, 0)abs がゼロで角を持つのでエラーになり、derivative(sqrt(x), x, 0)sqrt がゼロの左側で定義されていないのでエラーになります。

定積分

calc
integrate(x^2, x, 0, 3) 答え 9
integrate(sin(x), x, 0, pi) 答え 2
integrate(x^2, x, 3, 0) 答え -9
integrate(4/(1 + x^2), x, 0, 1) 答え 3.1415926536
# 3秒間に落ちる距離:速さ9.8t m/sを積分する
integrate(9.8*t, t, 0, 3) 答え 44.1

引数は、式、変数、下限、上限の順で、sum と同じです。答えは、限界の間の曲線の下の符号付き面積です。限界を入れ替えると符号が反転し、限界が等しいとゼロになります。integrate(出力(t), t, 0, 4) のように、ノートで定義した関数も積分できます。

integrate は数値的に計算するので、いくつかできないことがあります。

  • 不定積分はありません。答えは常に数値で、式にはなりません。
  • 限界はどちらも有限の数でなければなりません。無限大までは積分できません。
  • 式は範囲全体で定義されている必要があります。integrate(1/sqrt(x), x, 0, 1) は、面積自体は有限でも、1/sqrt(0) がゼロ除算になるのでエラーになります。
  • 値が飛ぶ式、鋭く突出する式、非常に速く振動する式では、答えが不正確になったりエラーになったりすることがあります。
  • 単位は使えないので、最後の例のようにコメントに書いてください。

アルゴリズムと収束

ふだん使う分にはこれらの詳細は必要ありませんが、結果がおかしく見えるときや、行がエラーになるときに役立ちます。

solve は二分法を使います。符号が変わる半分を残しながら、範囲を何度も半分にしていきます。左辺 - 右辺 の値がゼロから10⁻¹⁰以内になり、範囲が十分に狭くなると止まります。128回半分にしても見つからなければ、エラーを返して打ち切ります。

記号微分の derivative は、標準的な規則を簡約せずに1段階ずつ適用します。結果は最大8,192文字です。完全な数式処理システムではありません。

数値微分の derivative は、刻みを小さくしながら中心差分を比べ、左右それぞれの傾きを個別に確かめます。それらが一致しない場合や、点の近くの値が定義されていない場合は、推測値ではなくエラーを返します。

integrate は、適応型の7点・15点ガウス・クロンロッド則を使います。範囲の各区間で2つの推定値を比べ、推定誤差が最も大きい区間を分割していき、推定誤差の合計が10⁻⁹ × max(1, |答え|)を下回るまで続けます。分割は最大2,048回、分割の深さは20段階まで、処理は全体で100,000ステップまでです。サンプル点は等間隔ではないので、0 から 1 までの cos(128*pi*x) のような速い振動も定数と取り違えられることなく、正しくほぼゼロに積分されます。それでも誤差の推定は経験則なので、特異点や不連続点を持つ式の答えは注意して扱ってください。

完全な規則は高度な数学:機能と制限にあります。

まとめて使う

物理の宿題を確かめる例です。ボールを19.6 m/sで真上に投げ上げ、重力加速度を9.8 m/s²とします。

calc
# t秒後の高さ(m)
高さ(t) = 19.6*t - 4.9*t^2
速度(t) = 19.6 - 9.8*t
# 高さが再びゼロになったときに着地する(t = 0は除く)
着地 = solve(高さ(t) = 0, t, 1, 10) 答え 4
# 1秒後の速さ(高さの傾きから)
derivative(高さ(t), t, 1) 答え 9.8
# 最高点:速度がゼロになるところ
頂点 = solve(速度(t) = 0, t, 0, 着地) 答え 2
高さ(頂点) 答え 19.6
# 確認:頂点まで速度を積分すると同じ高さになる
integrate(速度(t), t, 0, 頂点) 答え 19.6

ボールは4秒後に着地し、2秒後に19.6 mの高さに達します。着地 の行の下限を1にしているのは、solvet = 0 にあるもう1つの根を見つけないようにするためです。最後の行では、速度を積分するという別の方法で高さを確かめています。