ドキュメントのセクション
目標値からの逆算
POSThttps://rftools.io/ api/ py/ v1/ calculate/ solve
計算ツールの出力の 1 つを目標値にする入力値(50 Ω になる配線幅、目標の差動インピーダンスになる間隔など)を求め、その値でのフォワード計算の結果とともに返します。クライアントが手作業で探索すると何度も必要になるフォワード呼び出しを、計上対象の呼び出し 1 回で済ませられます。
探索の仕組み
探索は solveFor に定められた範囲で行われ、range が指定されていればその範囲に絞られます。範囲が定められていない入力には range が必要です。grid が指定されている場合、返される value は範囲内で最も近いグリッドの倍数に丸められ、unrounded に厳密解が入ります。grid がない場合、value と unrounded は同じ数値です。いずれの場合も result(/calculate がその入力に対して返すものと同一で、来歴を含みます)は、返された value で計算ツールを実行したフォワード計算の結果です。つまりクライアントが表示するのは、ソルバー自身の推定値ではなく、実際のフォワード計算の結果です。
リクエストボディ
| フィールド | 説明 |
|---|---|
| slug必須string | 計算ツール。 |
| inputs必須object of numbers | solveFor 以外のすべての入力。solveFor に値を指定した場合、それは探索の開始点にすぎず、解が複数あるときの選択に使われます。 |
| solveFor必須string | 計算ツールで宣言されている数値入力。 |
| target.output必須string | 計算ツールが返す出力のキー。 |
| target.value必須number | その出力が到達すべき値。 |
| gridnumber | 正の製造グリッド。返される値は、範囲内で最も近いその倍数に丸められます。 |
| range[number, number] | solveFor に定められた範囲を絞り込みます。範囲が定められていない場合は必須です。 |
レスポンス
| フィールド | 説明 |
|---|---|
| valuenumber | 求めた値。grid が指定されていればそれに丸められます。 |
| unroundednumber | グリッドに丸める前の厳密解。 |
| reachedboolean | 目標値に到達したかどうか。false の場合も、推測ではなく、見つかった最も近い値が入ります。 |
| evaluationsinteger | 探索で使ったフォワード評価の回数。 |
| warningsstring[] | 逆算自身の所見:範囲内のもう 1 つの解、または目標値に到達しなかったこと。 |
| resultobject | solveFor を value にした入力に対して /calculate が返すものと同一:values、warnings、errors、provenance。 |
| slug, solveFor, target, gridecho | リクエストのフィールドを指定どおりに返します。grid が指定されなかった場合は null です。 |
費用と複数解
費用
計上対象の呼び出し 1 回で、下記のすべてのチェックの後に
/calculate と同様に課金され、その後サービス側で失敗した場合は戻されます。探索で到達できない目標値も成功として扱われ、reached: false と見つかった最も近い値が返り、課金されます。呼び出し元が求めたものを、サービスは提供したからです。解が複数ある場合
範囲内で出力が目標値と 2 回以上交わる場合、呼び出しは開始値(呼び出し元が
solveFor に指定した値、なければ計算ツールの既定値)に最も近い交点を返し、もう一方の交点を示す警告を追加します。拒否
解けないリクエストは課金の前に拒否され、param に問題のあるフィールドが示されます:
| ステータス | 発生する場合 |
|---|---|
| 404 | 計算ツールのスラッグが存在しません。 |
| 400 | solveFor が計算ツールで宣言された数値入力ではありません(param: solveFor、allowed 付き)。 |
| 400 | target.output が計算ツールの出力ではありません(param: target.output、allowed 付き)。 |
| 400 | grid が指定されていて、有限の正の数でないか、範囲内に倍数がありません。 |
| 400 | 指定された値(入力、target.value、範囲の境界)のいずれかが有限ではありません。 |
| 400 | solveFor に範囲が定められておらず、ボディに range もありません。または、指定した範囲が定められた範囲の外にあるか、空です。 |
| 400 | 固定した入力が、計算ツールが自身の実行時間に課している上限を超えています(/calculate と同じ)。 |