以前作ったとはいえ, 作り直すのは骨が折れます.
今回は三次方程式のみ.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS14.0.1
スポンサーリンク
ダウンロード・使い方
https://www.icloud.com/shortcuts/e3bf8abce9a54c5692ff48902c5ed426
まず三次関数の各係数と定数項を入力します.
今回係数入力などは別々で打つようにしました, 三次関数なので三次の係数は0以外で.
その後開区間を","で区切って指定します.
これで指定した開区間の中に実数解が何個あるのか計算してくれます.
前回作ったものよりかなり速いかも?
フローの簡単な説明
基本的な流れは前回と同じで, 数処理が「計算式」アクションによってアクション数が劇的に減ったこと, またショートカットのために, 得られたスツルム列を-1,0,1のいづれかに揃える手法は前回同様用いています.
今回は「結果を表示」で三次関数の表示をそれなりにキレイにしてあります.
係数が0の項は書かないとか1のときは係数をかかないとか全部やりたいんですがそうなるとアクションがいくらでも増えていくので後者はやめときました.
前回と比べアクション数が増えているのは多分このせい.
画像はスツルム列の1つ目(f0xとでも書きましょうか)の計算式です.
以前から指摘していますが「計算式」で下手に変数を使うと意図しない扱いを受けるため, 影響する場所は全部括弧で括っています.
本来の計算なら計算して終わり…ですが, 定理はこのあとで前後と比較して符号が変わったかどうかを見ないといけません.
逆に言えば符号の変化を見るだけなので計算した値が結果に応じて-1,0,1のどれかであれば良いのです, つまり
- スツルム列のある値が正 → 1
- スツルム列のある値が0 → 0
- スツルム列のある値が負 → -1
となるように均します.
そのために, 値が0でない場合に自分自身の絶対値で割っているわけです.
今回は三次関数なのでスツルム列が4つ, 区間2つ分なので4×2=8回, (各々で違いますが)似たようなことをします.
スツルム列f1, つまりfを微分した式の計算式がこちら.
スツルム列f2, つまりgcd(f0,f1)の計算式がこちら.
どんどん式が複雑になります.
最後にf3…と言いたいのですがこれだけは他と性質が異なります.
画像では見づらいですが, f0およびf1は多項式からなる数式です.
f2は有理多項式, つまり多項式分の多項式…の形になっていますが分母に相当するのは9a, 9はともかくaは三次関数としたので0ではありえません(フローでも最初に弾いてあります).
なのでそのまま「計算式」でちゃんと評価してくれます.
問題なのはf3です.
こちらは(数式が長いのは察しの通りとして)ちょっと画像では見づらいですが分母が
(c-b^2)^2
…となっています.
つまり係数の条件次第, 具体的には c-b^2 が0となる場合この計算式は0で割ることになるので計算式アクションは評価してくれません(というより計算できません).
これをDで置いていることから分かる通り, 判別式のような存在ですね.
なのでその場合は今回は定理の仕様を利用して0の扱いとします.
そうでない場合は定理に従って計算し, これを均します.
また定理の条件から, f2,f3は結果に-1をかけます.
〆
四次五次…となったらとてもこの手法では厳しいですね, 素直に途中で変数を噛ませないと無用なミスを増やすだけです.