プログラミング

C/C++/C#

C++で共振周波数を計算する

RLC直列、並列回路の共振周波数は \begin{align}f=\frac{1}{2 \pi \sqrt{LC}}\end{align} となる。これをC++で計算する。 実行結果 235947 ソースコード main.cpp int m...
C/C++/C#

Windows.hを使った時間計測

Windows.hが使えれば1ms程度の精度で計測ができる。読み込んで QueryPerformanceCounter(&start); //処理 QueryPerformanceCounter(&end); 処理を書けばいい。 ソースコー...
C/C++/C#

C++のcomplexを使って複素数を定義する関数を作る

これが全て。 std::complex<double>(Re, Im) double型で受け取って放り込めば終わり。 ソースコード std::complex<double> dot(double Re, double Im) { retur...
C/C++/C#

C++で複素数のノルムを求める

複素数のノルムを求める。ノルムは \begin{align}z=\sqrt{x^2+y^2}\end{align} で求められる。 ソースコード double dot2norm(std::complex<double> dot) { ret...
C/C++/C#

EX2 – エラーの修正をやってみた

問題(を解いてみた。 修正箇所は「"」と「;」の付け忘れ、「5」の書き忘れ。 私の環境ではbits/stdc++.hは通らないのでiostreamに変更している。 あとusing namespace std;は宗教上の都合で削除した。 修正...
C/C++/C#

ポインタを使った値の代入

配列に直接入れてもポインタに代入しても結果は同じ。 実行結果 0 2 4 6 8 10 12 14 16 18 ソースコード #include<iostream> int main() { int num; int* p = &num; i...
C/C++/C#

MPIRを使ってみる

MPIR()をインストールしたので使ってみた。MPIRを使うと巨大な数を扱うことができるようになる。 ソースコード例 #include<mpir.h> #include<iostream> int main() { mpf_set_defa...
C/C++/C#

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

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

Eigenで逆行列を求める

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

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

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

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

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

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

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