C++
n × n の正方行列 A と n次元のベクトル x について Ax = λx (ただし x ≠ 0) が成り立つとき λを固有値, x を固有ベクトルという. 最初に適当なベクトルx0から始めて xk+1 = Axk を反復すると xk は行列 A の最大固有値に対応する固有ベクトルに収束する. 固…
行と列とを入れ替えても(転置行列)一致する行列を対称行列と言う. 修正コレスキー法では, 対称行列 を下三角行列 , 対角行列 , の転置行列 の積に分解し( ), から を求め, から を求める. #include <iostream> #include <iomanip> #include <math.h> using namespace std; void decomp(d</math.h></iomanip></iostream>…
行と列とを入れ替えても(転置行列)一致する行列を対称行列と言う. コレスキー法では, 対称行列 を下三角行列 と, の転置行列 との積に分解し( ), から を求め, から を求める. #include <iostream> #include <iomanip> #include <math.h> using namespace std; void decomp(double a[4][</math.h></iomanip></iostream>…
連立一次方程式 を行列で表すと, こんな感じ このとき とすると, 最初の連立方程式は と表すことができる. このとき となる 上三角行列 , 下三角行列 を考えると, であり, とおくと となる.LU分解法では, 係数行列 を上三角行列 , 下三角行列 に分解し, から…
考え方は, ガウスの消去法とほぼ同じ.連立一次方程式 が与えられた場合, まず(1)式を9で割って(1)'とする. (2)式から(1)'式に2を掛けたものを引くとの項が消える. (3)式に(1)'式を足すとの項が消える. (4)式から(1)'式を引くとの項が消える.ここまでは, ガウ…
連立一次方程式 が与えられた場合, まず(1)式を9で割って(1)'とする. (2)式から(1)'式に2を掛けたものを引くとの項が消える. (3)式に(1)'式を足すとの項が消える. (4)式から(1)'式を引くとの項が消える.同様にして, 2番目の式を利用して, 3番目以降の式のyを…
考え方は、ヤコビ法とほぼ同じ. ヤコビ法の場合、漸化式で書くと だったが、2番目以降の式のの代わりに, 1番目の式で計算して得られたを使う. 同様に、3番目以降の式のの代わりに, 2番目の式で計算して得られたを使う. まとめると、 #include <iostream> #include <iomanip> #in</iomanip></iostream>…
例として を考える. この方程式を上から順に対角線上の変数について解くと となる. に適当な値を入れて右辺を計算し、 得られた値を新たなとして、計算を繰り返す. 漸化式で書くと #include <iostream> #include <iomanip> #include <math.h> using namespace std; void jacobi(double a</math.h></iomanip></iostream>…
#include <iostream> #include <vector> using namespace std; void multiply(vector< vector<double> > a, vector< vector<double> > b, vector< vector<double> >& c); int main() { cout << 'A' << endl; vector< vector<double> > a; vector<double> temp; temp.push_back(11); temp.push_back(12); temp.push_back(</double></double></double></double></double></vector></iostream>…
たとえば, 3行5列の行列と, 5行4列の行列との積は, 以下のように 3行4列の行列になる. 上記の場合, #include <iostream> using namespace std; void multiply(double a[3][5], double b[5][4], double c[3][4]); int main() { cout << 'A' << endl; double a[3][5] = {</iostream>…
非線形方程式の解法(反復法 または 単純代入法)を利用して2の平方根を求める 1. まず, 方程式 を, と変形する. 2. の値を として処理を繰り返して行くことで解を求める. ※ただし, 曲線 の傾きが, の傾きより小さくなければ 収束しない.例 を と変形しても…
非線形方程式の解法(ベイリー法)を利用して2の平方根を求める 関数 をテイラー展開すると, と, 近似できる. この式を 左辺 , として変形すると, この式の右辺の をニュートン法で使った で置き換えると この式を漸化式として用いる. #include <stdio.h> #include <math.h> d</math.h></stdio.h>…
非線形方程式の解法(はさみうち法)を利用して2の平方根を求める 考え方は、2分法とほとんど同じ. 1. まず, 条件 を満たす点 を考えると, 関数 の解は, 区間 の中に存在する. 2. 次に, 点 と 点 を結ぶ直線と 軸の交点 を考えると, であれば, 解は区間 の…
非線形方程式の解法(ニュートン法)を利用して2の平方根を求める 1. まず, 関数 上の点 を考える. 2. 点 における の接線と 軸との交点 は より解に近づいている. 3. この作業を繰り返して行くことで解を求める.点 での接線の傾きは なので, この式を漸化式…
非線形方程式の解法(2分法)を利用して2の平方根を求める 1. まず, 条件 を満たす点 を考えると, 関数 の解は, 区間 の中に存在する. 2. 次に, 区間 の中点 を考えると, であれば, 解は区間 の中に存在し, 同様に, であれば, 区間 の中に存在する. 3. この…
再度修正版 初速 250 km/h で, 45°の角度で打ったボールの軌跡をホイン法で計算する (空気抵抗係数を 0.01 で計算) 重力による鉛直方向の減速分は, 重力加速度を g, 時間を t とすると, 空気抵抗による水平方向の減速分は,速度を v, 速度の水平方向成分を vx…
修正版 初速 250 km/h で, 45°の角度で打ったボールの軌跡を中点法で計算する (空気抵抗係数を 0.01 で計算) 重力による鉛直方向の減速分は, 重力加速度を g, 時間を t とすると, 空気抵抗による水平方向の減速分は,速度を v, 速度の水平方向成分を vx, 空気…
Amazon Top 2! ※修正版 初速 250 km/h で, 45°の角度で打ったボールの軌跡をルンゲ・クッタ・ギル法で計算する (空気抵抗係数を 0.01 で計算) 重力による鉛直方向の減速分は, 重力加速度を g, 時間を t とすると, 空気抵抗による水平方向の減速分は,速度を v…
※再度修正 参考 http://www.enjoy.ne.jp/~k-ichikawa/Satellite3.html 初速 250 km/h で, 45°の角度で打ったボールの軌跡をルンゲ・クッタ法で計算する (空気抵抗係数を 0.01 で計算) 重力による鉛直方向の減速分は, 重力加速度を g, 時間を t とすると, 空…
初速 250 km/h で, 45°の角度で打ったボールの軌跡を後退オイラー法で計算する (空気抵抗係数を 0.01 で計算) #include <iostream> #include <iomanip> #include <math.h> using namespace std; // 重力加速度 const double g = -9.8; // 空気抵抗係数 const double k = -0.01; // 時間</math.h></iomanip></iostream>…
初速 250 km/h で, 45°の角度で打ったボールの軌跡をオイラー法で計算する (空気抵抗係数を 0.01 で計算) 重力による鉛直方向の減速分は, 重力加速度を g, 時間を t とすると, 空気抵抗による水平方向の減速分は,速度を v, 速度の水平方向成分を vx, 空気抵…
初速 150 km/h で, 45°の角度で投げたボールの軌跡をホイン法で計算する (空気抵抗を考慮しない) #include <iostream> #include <iomanip> #include <math.h> using namespace std; // 重力加速度 const double g = 9.8; // 水平方向の速度 double fx(double t, double vx) { // 水平方</math.h></iomanip></iostream>…
初速 150 km/h で, 45°の角度で投げたボールの軌跡をオイラー法で計算する (空気抵抗を考慮しない) #include <iostream> #include <iomanip> #include <math.h> using namespace std; int main(void) { // 角度 double degree = 45; double radian = degree * M_PI / 180.0; // 初速 150</math.h></iomanip></iostream>…
をオイラー法で近似する #include <iostream> #include <iomanip> #include <math.h> using namespace std; // 元の関数 double f(double x); // 導関数 double fd(double x); // Euler法 void euler(double x, double y, int n, double max); int main(void) { double x = 0.0; double </math.h></iomanip></iostream>…
をスプライン補間で近似する複数の点が与えられているとき, これらを1つの多項式でつなげるのではなく, 2点ずつの区間に分けて, 小区間ごとに別々の3次式を設定する.(1) 連立1次方程式をたてる (2) 連立1次方程式を解いて si を求める(3) 区間 xi 〜 xi+1…
LaTeX で出力してみた。 スプライン補間そのものの説明は、後日。 参考文献
をエルミート補間で近似する2個の関数値 f(x0), f(x1) と,それぞれの微分係数f'(x0), f'(x1) とを 与えられたとき, 与えられた2個の関数値を通る53次式を求めるには, まず次のような表を作る. このとき, . あとは, ニュートン補間と同じ この式を使って,…
をネヴィル補間で近似する与えられた5個の関数値 f(x0), f(x1), f(x2), f(x3), f(x4) と、 未知の点を通る4次式を求める場合, 次のような順序で計算する. (1) (2) (3) (4) (5) これらの式を使って, 与えられた点以外の点の値を求める. #include <iostream> #include <iomanip></iomanip></iostream>…
をニュートン補間で近似する与えられた4個の関数値 f(x0), f(x1), f(x2), f(x3) を通る3次式を求める場合, まず次のような表を作る. このとき, と定義する. これを x0とx1 の第1差分商, または1階差分商という. 同様に と定義し, これを x0, x1, x2 の第…
をラグランジュ補間で近似するn+1個の点 (x0, y0), (x1, y1) … (xn, yn) が与えられているとき, これらすべての点を通る n次式は次のように表すことができる. この式を使って, 与えられた点以外の点の値を求める. #include <iostream> #include <iomanip> #include <math.h> using names</math.h></iomanip></iostream>…