« 2022年7月 | トップページ | 2022年9月 »
今日、このTweet見た。
主成分分析とバイプロットの関係がわかりにくいというご質問をいただいたので、特異値分解も含めて三者の関係を解説した記事を書きました(Rを利用。そのうちPython版も書くかも) https://t.co/11Nt23dOmw
— Haruhiko Okumura (@h_okumura) August 28, 2022
こちらのリンクの例題をC#とMath.NET Numericsでやってみよう。
特異値分解は実はめちゃくちゃ簡単で、M.Svd()だけで計算できる。その前にCSV読んで平均引いて、、、というのが実は面倒くさい(もしかしたらもっと簡単になるのかもしれないが、私はC#初心者…)。
結果はこちら。奥村先生がRでやられたのと一致している。
ファイル読み込みも含めたソースはこちら。
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using MathNet.Numerics.LinearAlgebra;
namespace SVDtest01
{
class Program
{
static void Main(string[] args)
{
EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance;
var encoding = provider.GetEncoding("shift-jis");
StreamReader sr = new StreamReader(@"atest2014chu.csv",encoding);
string[] header = sr.ReadLine().Split(",");
var list = new List();
while (!sr.EndOfStream)
{
list.Add(sr.ReadLine().Split(","));
}
var M = Matrix.Build.Dense(list.Count, list[0].Length - 1);
for (int i = 0; i < list.Count; i++) {
for (int j = 0; j < list[0].Length - 1; j++)
{
M[i, j] = Convert.ToDouble(list[i][j + 1]);
}
}
var ColumnMean = new double[list[0].Length - 1];
for (int j = 0; j < list[0].Length - 1; j++)
{
ColumnMean[j] = 0.0;
for (int i = 0; i < list.Count; i++)
{
ColumnMean[j] += M[i, j];
}
ColumnMean[j] /= Convert.ToDouble(list.Count);
}
for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < list[0].Length - 1; j++)
{
M[i, j] -= ColumnMean[j];
}
}
var factorSvd = M.Svd();
var u = factorSvd.U;
var v = factorSvd.VT.Transpose();
var w = factorSvd.W;
Console.WriteLine(w.Diagonal() / Math.Sqrt(47 - 1));
Console.WriteLine(v);
Console.WriteLine(u * w);
}
}
}
過去のもの:
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。
C#でMath.NET Numericsを使うシリーズ7回目。今回は非線形回帰(最小二乗法)で有名なLevenberg-Marquardt法だ。
どう使うかは公式サイト見てもよくわからん、、、のでGitHubを直接見に行って、Testしているところを見るのがいい。
なるほど。ではここにも出ているNISTの非線形回帰のサンプル集、
https://www.itl.nist.gov/div898/strd/nls/nls_main.shtml
からRat43をやってみよう。Math.NET Numericsでは微分(Gradiant)は使わないでやっているがこちらは使ってみる。
結果はこちら。ちゃんとNISTの値と整合が取れた値が出ている。
テキストでもコードを書いておく。ただしグラフ部分以外。
using MathNet.Numerics;
using MathNet.Numerics.IntegralTransforms;
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.Optimization;
using MathNet.Numerics.Optimization.TrustRegion;
using Series = System.Windows.Forms.DataVisualization.Charting.Series;
var obj = ObjectiveFunction.NonlinearModel(OptimizeFunction, Gradient, Xdata, Ydata);
var solver = new LevenbergMarquardtMinimizer() ;
var result = solver.FindMinimum(obj, InitialValue1);
for (int i = 0; i < Xdata.Count; i++)
{
series1.Points.AddXY(Xdata[i], Ydata[i]);
}
var x = Vector.Build.DenseOfArray(Generate.LinearSpaced(100, 1.0, 15.0));
var y = OptimizeFunction(result.MinimizingPoint, x);
for (int i = 0; i < x.Count; i++)
{
series2.Points.AddXY(x[i], y[i]);
}
for (int i =0; i < result.MinimizingPoint.Count; i++)
{
Console.WriteLine($"p[{i}] = {result.MinimizingPoint[i]}");
}
}
private Vector Xdata = Vector.Build.DenseOfArray(new double[] {
1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00, 9.00, 10.00,
11.00, 12.00, 13.00, 14.00, 15.00
});
private Vector Ydata = Vector.Build.DenseOfArray(new double[] {
16.08, 33.83, 65.80, 97.20, 191.55, 326.20, 386.87, 520.53, 590.03, 651.92,
724.93, 699.56, 689.96, 637.56, 717.41
});
private Vector InitialValue1 = Vector.Build.DenseOfArray(new double[] { 100, 10, 1, 1 });
private Vector OptimizeFunction(Vector p, Vector x)
{
var y = Vector.Build.Dense(x.Count);
for (int i = 0; i < x.Count; i++)
{
y[i] = p[0] / Math.Pow(1.0 + Math.Exp(p[1] - p[2] * x[i]), 1.0 / p[3]);
}
return y;
}
private Matrix Gradient(Vector p, Vector x)
{
var prime = Matrix.Build.Dense(x.Count, p.Count);
for (int i = 0; i < x.Count; i++)
{
prime[i, 0] = 1.0 / Math.Pow(1.0 + Math.Exp(p[1] - p[2] * x[i]), 1.0 / p[3]);
prime[i, 1] = - p[0]* Math.Exp(p[1] - p[2] * x[i]) /
(p[3]*Math.Pow(1.0 + Math.Exp(p[1] - p[2] * x[i]), 1.0 / p[3]+1.0));
prime[i, 2] = p[0] * x[i] * Math.Exp(p[1] - p[2] * x[i]) /
(p[3] * Math.Pow(1.0 + Math.Exp(p[1] - p[2] * x[i]), 1.0 / p[3] + 1.0));
prime[i, 3]= Math.Log(1.0 + Math.Exp(p[1] - p[2] * x[i])) * p[0] /
(p[3] *p[3]* Math.Pow(1.0 + Math.Exp(p[1] - p[2] * x[i]), 1.0 / p[3] ));
}
return prime;
}
過去のもの:
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。
IMAXで観るとポスターもらえます。
しかし予告編では完全にSFホラーだったのが、もちろんそういう要素もあるけどかなり違いますね。
最初から不穏なチンパンジーの映像で、なんだこれは!と恐ろしくも期待を持たせる。
そしてこの前、読んだこれ↓
のマイブリッジが出てきた!ここからハリウッドと黒人の関係についてもテーマなんだろうなとか思う。
でオプラが日本人にはよくわからんだろう。。。オプラ・ウィンフリー・ショーのオプラさん。
で結構早めに空にいるものの正体(というかUFOじゃないこと)がわかるのですがこの造形は最後の最終形態も含めて見事。航空力学的にも考えられているとか。
そしてエアダンサーがこんな風に使われるとは、、、まあ怪獣映画のレーダーだな。
ベールをかぶった女性、予告編ではやられた後かと思ったら、過去のあの出来事でか、、、一番恐ろしいのは上にいるやつよりチンパンジー。
それが恐ろしいことを知っているはずのパークの責任者(韓国系のアメリカ人の俳優さんですが、超イケメンでした)はなぜあんなことをするのか…
最後の闘いは、まあゴーストバスターズのマシュマロマンを思い出したり、松本人志さんの大日本人を思い出したり。
そこは問題ではないだろう。最後をどう考えるのか。
エンドクレジットに電通が出てたのも驚くが、キリンの一番搾りが普通に出てるのも驚く。
観終わったあとのほうが、いろいろ考えることのある映画でホラー要素が全然ダメな人以外はお勧めです。
今回はMath.NET Numericsを使った最適化。
Python(SciPy)の例題を使おう。
https://docs.scipy.org/doc/scipy/tutorial/optimize.html
アルゴリズムは導関数などが不要なNelder-Mead SimplexでRosenbrock関数の5パラメータ版を使う。
ObjectiveFunction.Valueに関数を与える必要がある、というのがよくわからなくて悩んだ…
プログラムはこんな感じで、
結果はこちら。
プログラムのテキスト:
using System;
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.Optimization;
namespace OptimizationTest01
{
class Program
{
static void Main(string[] args)
{
var objFunc = ObjectiveFunction.Value(Rosenbrock);
var solver = new NelderMeadSimplex(1.0E-9, 1000);
var initialGuess = Vector.Build.DenseOfArray(new []{ 1.3, 0.7, 0.8, 1.9, 1.2 });
var results = solver.FindMinimum(objFunc, initialGuess);
for (int i = 0; i < initialGuess.Count; i++) {
Console.WriteLine($"x[{i}] = {results.MinimizingPoint[i]}");
}
}
static double Rosenbrock(Vector x)
{
double sum = 0.0;
for (int i = 0; i < x.Count - 1; i++)
{
sum += 100.0 * (x[i+1] - x[i] * x[i]) * (x[i+1] - x[i] * x[i]) + (x[i] - 1.0) * (x[i] - 1.0);
}
return sum;
}
}
}
過去のもの:
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。
Numberphileでもよく登場するマット・パーカーさんの著書。
https://www.youtube.com/channel/UCoxcjq-8xIDTYp3uz647V5A
これはなかなか面白かった!数学史という邦題ですが、実際はオリジナルのタイトルに近い(コメディというか悲惨な事故も多いですが)。
なかでも面白かった話題は、
・タコマナローズ橋は共振ではなくてねじり不安定性のフィードバックループで落ちた。
・ファインマンさんのスペースシャトル事故の究明(Oリング) だけじゃなかった。
・ランダムかどうかの見分け方をマットさんが高校教師時代にどうしてたか?
などなど。これらはほんの一部だが他にも面白い話題がたくさん。
数字のバグやミスについて興味がある方にお勧めです。
始まっていきなりの感想は「あれ?音量オンにし過ぎじゃない?」と思ったが、、、
それで完全に正解で、もうAdoさんの歌がよすぎる。2曲、多くても3曲くらいかな?と思ったらもうちょっとしたライブくらいの曲数。
楽曲提供者も豪華!エンドクレジットで初めて知った!
ストーリーはこれネタバレするとだめなやつなので伏せるとして、UTAもものすごく魅力的に描かれている。
なので最後が、、、(終わってから周りの人だれも立とうとしなかったり)。
各メンバーそれぞれ見せ場も複数あって、あれ?この人も登場?これはいつの話だ?とか思ったり。
でやはり一番かっこよかったのはシャンクスだが、ほとんど見せ場がなかったウソップが最後にキーになるとは!
まあシャンクスが出てるからな。うまい展開だ。
でかなりうるっと来るシーンも多かった。全然違うけど泣いた赤鬼(誰かが悪者のふりをして誰かを守る)を思いだしたり。
最後は直接的には描かれないのがまた…そして(新世界を作るために、UTAのために)「海賊王に俺はなる!」
兵庫県立美術館の次はこちらへ。
スコットランド国立美術館のものすごく多い画家の絵が出典されていてとてもよかった。最初のナイアガラからすごかった。
レンブラントなどの絵もよかった(そんな話が聖書にあるとは知らなかった、、、)が、面白かったのはラーメンを作っているように見える卵を料理する老婆とか。
エル・グレコのキリストと、ジョン・エヴァレット・ミレイの超美少女もよかった。
公式サイトを参照:
今月のMicrowave Journalの特集はmmWave Technology + EuMW Show Issueですが、
https://www.microwavejournal.com/publications/1
この記事がカバー。Greenerwaveのreconfigurable intelligent surfaces (RIS)について。最近結構流行ってきてる気がする。
あと6Gの周波数は6~7GHzがいいのではという現実的な記事とか。
次はBroadcomのイーサネットスイッチ。51.2 Tbps!
アンリツの220GHzまでのVNAとスペアナが合体したもの。
次はViaviの6Gプログラムについて。
Next G allianceと6G-IAのMoU。
Mediatekの低軌道衛星を用いた5G通信の検証。
リンクはこちら。
リンゴを投げるシーンからスタート。見えない力、重力。宇宙を支配している。輝く星々もその力を免れない。阿部寛さんが砂になって登場!時間も空間も重力に支配されるといったやつがいる。そしいてアインシュタインの銅像が登場。
— tomo (@tonagai) August 16, 2022
<参考リンク>
最初に見つかったクェーサーの重力レンズ現象:
大栗さんの予言通りになった話:
香取さんの光格子時計でスカイツリーで一般相対論検証:
持ち運べる光格子時計を開発、性能初確認 スカイツリーで高低差計測 東京大学など
あとNumerical Recipesが写っていたのも驚いたり。
久々に加賀さんシリーズですが、もう阿部寛さんのイメージしか浮かばない、、、ということはドラマ化すると今回は溝端淳平さんが主役か。
あらすじは「小さな喫茶店を営む女性が殺された。捜査を進めても善人だったという話しか出てこない。しかし松宮はある少女との話から手がかりを見つけ始める。一方、金沢で旅館を営んでいた男性が息を引き取ろうとしていた。彼の遺言書を見た娘はその最後に意外な人物の名前が記載されているのを見る。」
というもの。盛りだくさんくらいのいろんなことが盛り込まれていて、後半にかけて怒涛の情報量になります。ただいくらなんでもそんなことあっちゃだめだろ!というあるミスが出てきて、それが気になって気になって、、、実際こんなこと起きるのか?とか。
ただ登場人物のほとんどが気の毒なくらい不幸に見舞われていて、タイトルの「希望の糸」どおりのラストになったときは救いが。
5年前に三重に来た時も観に行ったほど好きで、今回もATCまで行ってきた。
(前回の記録)
テオ・ヤンセン展@三重県立美術館へ行って来た。アタリのパソコンを計算に使ってた!
直筆のサインだそう。
最初はアタリのパソコン(520ST)で設計していたとか。
今回、危険回避のための機構を初めて知った!水が入ると動くそうだ。
で、三重ではちょうど故障か何かで動く姿が見られなかったが、今回は2種類のリ・アニメーション(再生)が見られた。
動画はTwitterのほうにあげときます。
#テオ・ヤンセン展 @大阪南港ATCギャラリーへ行ってきた。5年前に三重で観てきた以来だ!あの時は故障で動かなかったけれど今回は目の前で巨大なものが動くのを見られた!アタリのPC(520ST)も前回同様に展示。水を検知して後ずさるシステムを今回初めて知った。 https://t.co/Hz4KMXU3cJ pic.twitter.com/CClAW6c3B3
— tomo (@tonagai) August 12, 2022
最前列の人たち踏まれてる?
こいつの動きにも驚いた。
3D映画を見るのは本当に久しぶり。最近全然やらないですね。せっかくなので大阪エキスポシティのIMAXの大画面で。
過去作の主要人物(で生きている人)総登場という感じで、出てくる恐竜も総登場。驚かせ方も過去のオマージュ感あったり(シャイニングもあったけど)。
しかし本当に恐竜が自然で、CGということを忘れるシーンも。今回、羽毛のある恐竜も出てきますが、羽毛があるとかわいかったり間抜けぽかったりするかと思いきや!羽毛のあるほうが恐ろしい感じに。恐ろしいといえばイナゴが一番恐ろしい。
遺伝子ドライブの話も。
https://darwin-journal.com/gene_drive_overview_mechanism
メイジー(こういう状況になった張本人)も前作から大きくなってかわいくなってますが、出生の秘密も出てきます。
それよりブルーの娘まで登場。これもちょっとかわいい。
でも一番かっこよかったのはカイラ。かっこいいというかいい人過ぎるというか、、、こんな理由だけで命からお宝まで全部投げうつという。
あのヘリもらっとけばよかったのに、とか。
最後の戦いはまさに「怪獣大戦争」のようでこれもかっこよかった。ゴジラ キング・オブ・モンスターズかもしれないが。
一番目が点になったのは恐竜とのカーチェイス(バイクチェイス)。これはすごい、、、がそのあとの街の惨状を考えると…
今月のIEEE Microwave Magazineの特集はパッシブ回路。
https://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=6668
たまに見るトランスを使った整合や、マルチバンドのカプラ設計方法レビューなど。
QorvoのBAWを使ったコロナウイルスの抗原検査装置がFDAに緊急承認。
3GHzで共振するBAW振動子の周波数が変わることを利用しているが、周波数が高くQも高いため検出感度が良好とのこと。
TechInsightsの記事。Wi-Fi 6Eだって全然普及してないのに早いな。
Qualcommとグロファンの契約。
ブランドの偽造を防止するInfineonのNFCタグ。
RFフィルタのマーケット予測。
Akoustisが5G向けフィルタサンプル出荷。
だいぶ前にこの記事を見た。
LAMBDAやLETは使えるようになっていたがこれらの関数使えないな、と思ってすっかり忘れていて昨日たまたまやってみたらもう使えるようになっていた!
じゃあまずは、、、LAMBDAでやったけどちょっと複雑だなとおもったこれ。
これをTOROW関数使ってやってみよう。
再掲するとTouchstoneフォーマットは
https://ibis.org/connector/touchstone_spec11.pdf
これの問題は、3ポート以上だとデータの並びが変なこと。例えば3ポート、4ポートは
のように折り返される。(※5ポートからもっと変になるがそれはちょっと置いておいてまずは3と4ポートだけ)
これをテキストとしてExcelで読んで、普通にデータ処理とかグラフにするのがとんでもなくめんどくさい。
TOROW使うと、
=TOROW(INDIRECT(ADDRESS((ROW()-2)*4+2,1,4)):INDIRECT(ADDRESS((ROW()-2)*4+5,9,4)),1)
を1つのセルに入れて、それをただ下にコピペするだけでいい。
結果はこんな感じ。ただし遅い…
14個もあるから他に何ができるか考えてみよう。
過去にLAMBDA関数でやったもの:
ExcelでLAMBDA関数が突然使えるようになった。4段4次のルンゲクッタ法がワークシートだけ(VBA使わずに)で簡単に計算できるようになった。まずはローレンツ方程式を計算してみる。
ExcelでLAMBDA関数が突然使えるようになった(2) 5次のルンゲクッタフェールベルグ法でローレンツ方程式をワークシートだけで(VBA使わずに)計算
ExcelでLAMBDA関数が突然使えるようになった(3) LET、SEQUENCE、IFSと組み合わせてワンライナー(1セル)で数値積分(シンプソンの積分公式)を計算
ExcelでLAMBDA関数が突然使えるようになった(5)なんと再帰まで使える。階乗とフィボナッチ数列で試してみた。
前から観に行こうと思っていたが機会を逃していてようやく観られた。想像以上に面白かったです。
このポストカードが素敵。
メカがとにかくかっこいい。特にバズが乗るロケット(XF-1)がかっこよくてこんな記事も出ていた。
ロボットがズゴック風(赤いのもいる)だが、悪の親玉がどっかで見たけどなんだっけ、、、
ドラえもんの映画(のび太とロボット王国)のこれかもしれない。
https://renote.jp/articles/230889/page/3
また光速に近づく時のエフェクトもよくて、相対論効果(ウラシマ効果)が話の肝として使われていてトップをねらえ!のようだ。
が、バズがその効果を知らなかったのは納得できん!そもそも最初から飛んでただろ!とか、スペースレンジャーなら習うだろ!とか。
まあ子供にその説明をするためだろうから仕方ない。
あと、ロケットの部品が特殊キャパシタンスといっててコイルが出てくるところに笑う。
まあコイルは負のキャパシタンスとも見えるから特殊だなと。しゃれてる?
エンドクレジットで将来のスペースレンジャーと出ていたのはプロダクションベイビーだろうな。これは好き。
でも最後のほうにTo infinity...and beyond!にかけた謝辞があるのに訳されてなかったのはちょっと残念。
残念と言えばディズニーの日本語吹き替え版はどれもですが、登場するものに英語が書かれているものを日本語に直しているときのフォントがあまりにも気を使ってない(ゴシック丸出しとか)。これちゃんと雰囲気だすようにするにはものすごく費用かかるんだろうか。
だったら元の英語のままにして下に和訳つけた方がいいんじゃないかとずっと思ってるんですが、、、どうだろう。
晴れていると思って外に出たら雨。久しぶりに狐の嫁入りだ。そのおかげで綺麗な虹が出ていた。
完全にふもと見えてるじゃないか。ということで追いかけるが…
どんどん遠ざかっていく…
理由はこちらなど:
C#のMath.NET Numericsを使った数値解析シリーズも5回目。さて今回は常微分方程式の数値解法。2次と4次のルンゲクッタ法とアダムスバッシュフォース法が使える。
まずは最初にusing MathNet.Numerics.OdeSolvers;はつけておく。で基本、RungeKutta.FourthOrderの1文で計算できる。Vector
例題はまあLorenz方程式がいいでしょう。
\begin{align} &\frac{dx}{dt} = \sigma (y - x) \\\ &\frac{dy}{dt} = -xz + rx -y \\\ &\frac{dz}{dt} = xy - bz \\\ \end{align}
プログラムはこんな感じで、
結果はこちら:
ソースコードの詳細はこちら:
using System;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using MathNet.Numerics;
using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.OdeSolvers;
using Series = System.Windows.Forms.DataVisualization.Charting.Series;
namespace RungeKuttaTest01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
chart1.Series.Clear();
chart1.Titles.Clear();
chart1.Legends.Clear();
chart1.ChartAreas.Clear();
}
private void button1_Click(object sender, EventArgs e)
{
Title title = new Title("Lorenz Equation", Docking.Top);
chart1.Titles.Add(title);
Legend legend = new Legend();
chart1.Legends.Add(legend);
Series series1 = new Series();
series1.ChartType = SeriesChartType.Line;
series1.BorderWidth = 1;
series1.LegendText = "Y";
chart1.Series.Add(series1);
Series series2 = new Series();
series2.ChartType = SeriesChartType.Line;
series2.BorderWidth = 1;
series2.LegendText = "Z";
chart1.Series.Add(series2);
chart1.ChartAreas.Add("");
Axis axisX = new Axis();
axisX.Title = "X";
axisX.Minimum = -20;
axisX.Maximum = 25;
axisX.Interval = 5;
chart1.ChartAreas[0].AxisX = axisX;
Axis axisY = new Axis();
axisY.Title = "Y,Z";
axisY.Minimum = -30;
axisY.Maximum = 60;
axisY.Interval = 10;
chart1.ChartAreas[0].AxisY = axisY;
double dt = 0.01;
double tmax = 200.0;
int n = Convert.ToInt32(tmax / dt);
var t = Generate.LinearSpaced(n, 0.0, tmax);
var x0 = Vector.Build.DenseOfArray(new double[] { 1.0, 1.0, 1.0 });
var x = RungeKutta.FourthOrder(x0, 0, tmax, n, Func);
for (int i = 0; i < n; i++)
{
series1.Points.AddXY(x[i][0], x[i][1]);
series2.Points.AddXY(x[i][0], x[i][2]);
}
}
public static Vector Func(double t, Vector x)
{
double s = 10.0, r = 28.0, b = 8.0/3.0;
double x_dot = s * (x[1] - x[0]);
double y_dot = r * x[0] - x[1] - x[0] * x[2];
double z_dot = x[0] * x[1] - b * x[2];
return Vector.Build.DenseOfArray(new double[] { x_dot, y_dot, z_dot });
}
}
}
過去のもの:
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(1) 複素行列を定義して一次方程式や逆行列、行列式などを計算する。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(2) 補間を行う(Interpolate) リニア、3次スプライン、有理関数などいろいろ使える。
Visual C# (C_sharp)の数学ライブラリ Math.NET Numericsを使う(4) 多項式フィッティングをして、Array.ConvertAllで一括でフィッティングデータを得る。
ハケンアニメ?派遣社員がこき使われる話?と勝手に思って読んでなかったが、、、全然違った!
アニメの覇権を争うお話で、章ごとに2人の主人公が出てきてアニメの制作を行うのだがどの主人公もキャラが立ってる!
第一章は王子と猛獣使い。若くして歴史に残る名作を作ったルックスも抜群の王子(本名)がブランクの後、プロデューサーの女性、有科と新しい作品リデルライトを作り上げるお話。
そしてそこにちょっとだけでてきた人物たちが次の第二章、女王様と風見鶏の主人公。
新人女性監督の斎藤と、ヒットさせるためには手段も択ばないプロデューサーの行成が、夕方のアニメ、サウンドバックを作り上げるお話。
そしてまたそこにちょっとだけ出てきた神原画と呼ばれるアニメータの並澤と、そのスタジオがある田舎の市役所の職員、宗盛が出てくる第三章の軍隊アリと公務員。
最終章、この世はサーカスはこれまでの全員が出てくる。果たして派遣を取ったのは、、、、
というものでめちゃくちゃ面白かった。
文庫版にはさらに執事とかぐや姫があって、これも本編では語られなかったある人物たちにスポットライトがあたってこれも面白い!
リデルライトとサウンドバック見たいなー、でもどちらも小説だから成り立つ設定で本当にやったら制作陣死ぬな、
と思ったら映画でちょっとやってたそうで。。。
ああ、映画見逃したか、だいぶ前にやってたからなあ、と思ったけどまだ上映しているところがあるようで観に行きたいな。
https://toei-screeninginfo.azurewebsites.net/theaterlist/02537
昨日書き忘れていたこと。途中までは昨日と同じ。
NポートのSパラメータ(Sa)の各ポートごとに2ポートのSパラメータ(S(i))がくっついているとして、最終的に合成されたSパラメータ(Sm)が測定されたときに逆にSaを求めたいとする。これをよくDe-embeddingという。
昨日の結論がそのまま使える。
\begin{equation} S_{m} = \left( \Gamma_{11}+ \Gamma_{12}(I - S_{a}\Gamma_{22})^{-1} S_{a}\Gamma_{21} \right) \end{equation}
変形すると
\begin{equation} \Gamma_{12}^{-1} (S_{m} - \Gamma_{11})\Gamma_{21} ^{-1}= (I - S_{a}\Gamma_{22})^{-1} S_{a} \end{equation}
となりますが、
\begin{equation} A=\Gamma_{12}^{-1} (S_{m} - \Gamma_{11})\Gamma_{21} ^{-1} \end{equation}
とよく置かれる。このAを使うと
\begin{equation} S_{a}=A( I + \Gamma_{22} A)^{-1} \end{equation}
と簡単になります。
続きを読む "昨日の続きでNポートSパラメータのポートごとに2ポートSパラメータをDe-embeddingするときの式もついでに導出。" »
考えている状況は以下の通りで、NポートのSパラメータ(Sa)の各ポートごとに2ポートのSパラメータ(S(i))がくっついたとき(マッチング回路やDe-embeddingのような場合)、最終的に合成されたSパラメータ(Sm)を求めたいとする。
入射波aiと反射波biの関係がSパラメータSa。
\begin{equation} \left(\begin{array}{cccc} b_{1} \\\ b_{2} \\\ \vdots \\\ b_{n} \end{array}\right) = \left(\begin{array}{cccc} S_{a11} && S_{a12} && \cdots && S_{a1n} \\\ S_{a21} && S_{a22} && \cdots && S_{a2n} \\\ \cdots && \cdots && \cdots && \cdots \\\ S_{an1} && S_{an2} && \cdots && S_{ann} \end{array}\right) \left(\begin{array}{cccc} a_{1} \\\ a_{2} \\\ \vdots \\\ a_{n} \end{array}\right) \end{equation}
ここで各ポートにつく2ポートのSパラメータS(i)の入射波と反射波の関係を考えると、Nポートでつながっているところの入射波が2ポートSパラの反射波になっていて、逆に反射波は入射波になっている。ということでこう書ける(Tパラメータと同じ考え方)
\begin{equation} \left(\begin{array}{cccc} b_{1}' \\\ a_{1} \end{array}\right)= \left(\begin{array}{cccc} S_{11}^{(i)} && S_{12} ^{(i)} \\\ S_{21}^{(i)} && S_{22}^{(i)} \end{array}\right) \left(\begin{array}{cccc} a_{1}' \\\ b_{1} \end{array}\right) \end{equation}
これがNポート分できる。で、成分を並べ替えてベクトルb', a', aを作る。ここがトリッキーなところ。Γijは対角行列になっている。
\begin{equation} \left(\begin{array}{cccc} b_{1}' \\\ b_{2}' \\\ \vdots \\\ b_{n}' \end{array}\right) = \Gamma_{11} \left(\begin{array}{cccc} a_{1}' \\\ a_{2}' \\\ \vdots \\\ a_{n}' \end{array}\right) +\Gamma_{12} \left(\begin{array}{cccc} b_{1} \\\ b_{2} \\\ \vdots \\\ b_{n} \end{array}\right) \end{equation}
\begin{equation} \left(\begin{array}{cccc} a_{1} \\\ a_{2} \\\ \vdots \\\ a_{n} \end{array}\right) = \Gamma_{21} \left(\begin{array}{cccc} a_{1}' \\\ a_{2}' \\\ \vdots \\\ a_{n}' \end{array}\right) +\Gamma_{22} \left(\begin{array}{cccc} b_{1} \\\ b_{2} \\\ \vdots \\\ b_{n} \end{array}\right) \end{equation}
ここまで来たら後は簡単。
\begin{equation} \boldsymbol{b'} = \Gamma_{11}\boldsymbol{a'} + \Gamma_{12}\boldsymbol{b} \end{equation}
\begin{equation} \boldsymbol{a} = \Gamma_{21}\boldsymbol{a'} + \Gamma_{22}\boldsymbol{b} \end{equation}
2つ目の式にSaをかけると
\begin{equation} \boldsymbol{b} = S_{a}\Gamma_{21}\boldsymbol{a'} + S_{a}\Gamma_{22}\boldsymbol{b} \end{equation}
\begin{equation} \boldsymbol{b} =(I - S_{a}\Gamma_{22})^{-1} S_{a}\Gamma_{21}\boldsymbol{a'} \end{equation}この式を1式目にいれると
\begin{equation} \boldsymbol{b'} = \left( \Gamma_{11}+ \Gamma_{12}(I - S_{a}\Gamma_{22})^{-1} S_{a}\Gamma_{21} \right) \boldsymbol{a'} \end{equation}
ということで最終結果は
\begin{equation} S_{m} = \left( \Gamma_{11}+ \Gamma_{12}(I - S_{a}\Gamma_{22})^{-1} S_{a}\Gamma_{21} \right) \end{equation}
1ポートのキャリブレーションと同じような形をしているのが面白い。
続きを読む "NポートSパラメータのポートごとに2ポートSパラメータをカスケード接続するときの変換式を完全に忘れていたので思い出す…" »
最近のコメント