旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

数学

【C#】 Bスプライン曲線の実装

Bスプライン曲線を実装する必要があったので作ってみました(次数は3固定にしています)。使い方は以下の二通りを想定しています。 制御点を指定して曲線を描く 指定した点を通るような曲線を描く まずはBスプライン曲線を描くクラスをBSplineとして実装しま…

【数学】 フィッシャーの線形判別を理解するのに有効なサイトのメモ

フィッシャーの線形判別について調べていたのですが、分かりやすく書いてくれているサイトを見つけたのでメモします。 理論についてはこちらが分かりやすいです。 s0sem0y.hatenablog.com コードが必要であればこちらにコード付きで記事を書かれています。 a…

【Python】 粒子群最適化法による最適化

粒子群最適化法による大域的最適化を行うクラスを実装します。粒子群最適化法は ハイパーパラメータが少ないので扱いやすい 単峰性が強い関数の最適化に向いている といった特徴を持っています。最適化問題は慣例として"目隠しした登山家が山の頂上をどうに…

固有値、固有ベクトルのイメージ

行列をかけるとは 固有値、固有ベクトルの計算方法は確か高校の時に習ったような気がしますし、OpenCV等既存のライブラリを使っても簡単に計算出来ますが、その意味が良く分かっていなかったのでメモします。 まず、点に適当に作った行列をかけてみます。 $$…

【C#】 ニュートン法を使って連立非線形方程式の解を求める

ニュートン法を使って連立非線形方程式の解を求めます。ニュートン法を使って連立非線形方程式の解を求める場合、ヤコビアンの計算が必要となり多くの計算量が必要となってしまいます。このため、ここではニュートン法の変種を使って連立非線形方程式の解を…

【C#】 ラグランジュの未定乗数法による制約条件付き最適化

という制約条件付きで、関数を最小化する、という問題をラグランジュの未定乗数法を使って解きます。ここでは例として、以下の制約条件下で目的関数を最小化するを探す、という問題を解きます。 目的関数 : 制約条件1: 制約条件2: 解き方は以下の手順に…

【C#】 ペナルティ法による制約条件付き最適化

制約条件が付いた最適化問題をペナルティ法を使って解いてみます。ここでは例として 制約条件: を満たす上で 目的関数: の最小値を与えるを求めます。 まずは目的関数、制約条件、ペナルティ係数から新しい目的関数を作成するクラスを作成します。 public …

【C#】 共役勾配法による多変数関数の最適化

共役勾配法を利用して多変数関数の最適化を行うクラスを実装します。共役勾配法ではここ(【C#】 勾配ベクトルを計算するクラス - 旅行好きなソフトエンジニアの備忘録)で作成したGradientというクラスを利用します。 public class ConjugateGradientMethod…

【C#】 ニュートン法を使って非線形方程式の解を求める

ニュートン法を使ってを満たすを計算します。まずはニュートン法を実装しますが、ここ(【C#】 微分を計算するクラス - 旅行好きなソフトエンジニアの備忘録)で作成したDerivativeというクラスを利用します。 public class NewtonMethod1D { /// <summary> /// ニュ</summary>…

【C#】 最急降下法による多変数関数の最適化

最急降下法を利用して多変数関数の最適化を行うクラスを実装します。最急降下法ではここ(【C#】 勾配ベクトルを計算するクラス - 旅行好きなソフトエンジニアの備忘録)で作成したGradientというクラスを利用します。 public class SteepestDescentMethodMV…

【C#】 黄金分割法による最適化

今回は黄金分割法を使って一変数関数の最適化を行う方法をメモします。 public class GoldenSectionSearch { private static readonly double _ratio = (3.0 - Math.Sqrt(5.0))/2.0; /// <summary> /// 黄金分割法による最適化を行うメソッド /// </summary> /// <param name="f">一変数関数</param> /// <param name="minX"></param>…

【C#】 最急降下法による一変数関数の最適化

最急降下法を利用して一変数関数の最適化を行うクラスを実装します。最急降下法ではここ(【C#】 微分を計算するクラス - 旅行好きなソフトエンジニアの備忘録)で作成したDerivativeというクラスを利用します。 public class SteepestDescentMethod1V { pri…

【C#】 勾配ベクトルを計算するクラス

今回は偏微分を計算するクラス(【C#】 偏微分を計算するクラス - 旅行好きなソフトエンジニアの備忘録)を使って 勾配ベクトルを計算するクラスを実装します。 public class Gradient { private const double _h = 1e-5; public static double[] Compute(Fu…

【C#】 偏微分を計算するクラス

偏微分を計算するクラスを作成します。 public class PartialDerivative { private const double _h = 1e-5; /// <summary> /// 偏導関数を計算するメソッド /// </summary> /// <param name="f">関数</param> /// <param name="index">偏微分を行うインデックス</param> /// <returns>fの偏導関数</returns> public static Func<double[], double> Compute(Func</double[],>

【C#】 微分を計算するクラス

微分を計算するクラスを作成します。まずはクラスのソースコードです。 public class Derivative { private const double _h = 1e-5; /// <summary> /// 導関数を計算するメソッド /// </summary> /// <param name="f">関数</param> /// <returns>fの導関数</returns> public static Func<double, double> Compute(Func<double, double> f) { return x => (f(</double,></double,>…