プログラミング

C/C++/C#

Eigenで行列の固有値を計算するときに注意すること

行列演算ライブラリは巨大なのでコンパイルに時間がかかる。
C/C++/C#

Eigenで逆行列を求める

coreのほかにLUも必要。#include "../Eigen/core"#include "../Eigen/LU"あとはA.inverse()とすればいい。実行結果。-0.666667 -1.33333 1-0.666667 3.66...
C/C++/C#

行列の固有値と行列式の関係

行列の固有値の積は行列式の値と等しくなる。これをEigenで試す。実行結果固有値 (16.7075,0)(-0.905741,0) (0.198246,0)行列式-3確かめれば\begin{align}16.7075 \times (-0....
C/C++/C#

Eigenで固有値と固有ベクトルを計算する

Eigenで固有値と固有ベクトルを求めるにはEigen::EigenSolver< Eigen::MatrixXf > s(A);とした後、sに対してs.eigenvalues() とすれば固有値を、s.eigenvectors()とすれば...
C/C++/C#

トレースとフロベニウスノルムの関係

\(A\)と\(A\)の転地の積のトレースはフロベニウスノルムの二乗と等しくなる。つまり\begin{align}\mathrm{tr} (A A^{T}) = \mathrm{tr} (A^{T} A) = \sum_{i=1}^{n}\...
C/C++/C#

トレースの性質

トレースにはつぎのようなの性質がある。\begin{align}\mathrm{tr} {A1} + \mathrm{tr}{A2} &= \mathrm{tr} ( A1+A2 ) \\a\ \mathrm{tr} {A1} &= \ma...
C/C++/C#

C++で汎用print関数を作る

何度もstd~と書くのはめんどくさいので汎用print関数を作る。詳細は記事がたくさんあるので割愛。vectorなど工夫しないと使えないものもあるが、数値、文字関係なく使える。template <class T> void mytprint...
C/C++/C#

C++における配列の動的な宣言

CやC++では配列を動的に確保することができないのでmallocやnewを使う。メモリ開放をしないと大変なことになるので注意。実行結果要素数は?->3数を入力->2数を入力->1数を入力->42,1,4,ソースコード。#include <i...
C/C++/C#

トレースの性質 その1

トレースには次の性質がある。\begin{align}tr (A+B) = tr A + tr B\end{align} 今回はこれをC++で計算する。実行結果1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1...
C/C++/C#

C++でトレースを求める

正方行列の対角成分の和\begin{align}tr A = \sum_{i=1}^{n} a_{ii}\end{align}をトレースという。今回はこれをC++で計算する。実行結果1,2,3,4,5,6,7,8,9,15ソースコード#in...
C/C++/C#

C++でフロベニウスノルムを計算する

フロベニウスノルムは\begin{align}\| A \|_{F}=\sqrt{\sum_{i=1}^{m} \sum_{j=1}^{n} \left |a_{ij} \right |}\end{align}で計算できる。一次元配列に行列...
C/C++/C#

Eigenで内積と外積を計算する

ベクトルを定義するときは#include "../Eigen/Dense"をインクルードしてEigen::Vector3d x(1, 2, 3);とすればベクトルが定義できるので、内積と外積をx.dot(y)x.cross(y)で計算する。...
C/C++/C#

Eigenで行列の和・差・積を試す

Eigenで行列の和・差・積を試す。「+」、「-」、「*」が使えるので直観的。ソースコード#include <iostream>#include "../Eigen/core"int main() { int n = 2; Eigen::M...
C/C++/C#

Eigenをインストールして使ってみた

Eigen(は行列用の科学技術ライブラリで、ヘッダーだけ読み込めば動く。ダウンロードしたファイルを展開するとEigenというファイルがあるのでそれを適当な場所に置き#include "../Eigen/core"としてcoreにパスを通せば...
C/C++/C#

typedefと合わせた関数ポインタの使い方

typedefを使うと何度も宣言しなくてよく、型のように扱える。typedef void (*ECHO)(int);ソースコード#include <iostream>typedef void (*ECHO)(int);void echo(i...
C/C++/C#

C++の関数ポインタについて

内容はC言語。関数ポインタはvoid (*pecho)(int);で定義してpecho = echo;で参照設定する。関数ポインタの定義は参照元の関数の返り値と引数の型void echo(int x) { std::cout << x;}が...
C/C++/C#

C++で型変換をする

static_castを使えばできる y = static_cast<double>(x);型変換した後する前と変換後で型を調べる。実行結果intdoubleソースコード#include <iostream>#include <typein...
C/C++/C#

C++のfindを使ってみる

findを使うと先頭から何番目にその文字があるかを探すことができる実行結果184467440737095516150存在しませんちなみにこれらのコードはどれも同じ動作をする。autoの動作が原因。 if (str1.find("z") ==...
C/C++/C#

C++でコンストラクタをオーバーロードする

引数に応じて動作を変えられる。コンストラクタの定義はこの部分 Student() { } Student(std::string name, int jpn, int math, int eng) { m_name = name; m_ma...
C/C++/C#

Qiitaの質問にあったC++のクラスの使い方が変だったので直してみた

Qiitaの質問にあったC++のクラスの使い方が変だったので直してみた。記事については自分で探してほしい。やりたいことは生徒の成績をクラスに入れて管理すること。実行結果tanaka304050satoh206064takahashi7080...