« 2024年3月 | トップページ | 2024年5月 »

2024年4月

2024年4月30日 (火)

ローマ軒 nambaなんなん店で旨辛スパゲティ(大盛)をいただく。具だくさんでピリ辛でなかなか美味しかった。

このお店限定の旨辛スパゲティを初めて食べた。具だくさんでなかなか美味しい。けどタバスコ(大きな瓶の)ってデフォルトで店頭に出なくなってた。まあ昨今迷惑動画のようなことをする奴らが増えてるからかな…

20230717-1315581 20230717-131559

2024年4月29日 (月)

大阪王将で「推し麺総選挙」で選ばれた”にらホルモン中華そば”+餃子を食す。かなりのホルモンの量で、ピリ辛でなかなか美味しかった。

キャベツがかなり多かったが、ホルモンも予想していたよりかなり多く入っていてこれはよかった。味もピリ辛くらいでなかなか美味しい。

20240428-125517

餃子も一緒に。今回のは餃子の王将より美味しい感じがしたな。

20240428-125804

2024年4月28日 (日)

引っ越しするので部屋を片付けているが、文庫本だけで段ボール56個、1400冊くらいあった…まだ専門書とかが大量にある…いつ終わるんだ。

今、引っ越しの準備をしているが、とにかく本が多い。まずは文庫本を中心に段ボール詰めをしてみたが…

Bunko

大体1箱25冊程度はいっているので、それが56個で1400冊…よく集めたもんだ。

しかもまだ大量の専門書やコミックもある。もう本だけで気が遠くなる…

文庫とコミックは売ろうかな…

2024年4月27日 (土)

定食屋 宮本むなしで回鍋肉(ホイコーロー)定食をいただく。

ここはご飯お替り自由で、しば漬けがついてくる。キャベツがシャキシャキで美味しかった。

20240417-130603 20240417-130604

2024年4月26日 (金)

餃子の王将の四月限定メニュー、海鮮あんかけ焼そば フェアセットBをいただく。あんかけも焼きそばも好きなのでこれは美味しい。

量もたっぷりで海鮮も美味しい。

20240419-142110 20240419-142111

2024年4月25日 (木)

3GPPで6Gのロゴが決定したが、LTE(4G), 5Gのロゴと比べて波が直線状に。これは近傍界(球面波)から遠方界(平面波)に変わる距離が周波数が高くなるとどんどん近くなること(5Gはミリ波、6Gはサブテラヘルツ)を意図してる?これなら7Gは直線3本になりそう。

3GPPで6Gのロゴが決まった。

New 6G logo approved

あれ?波の部分がだいぶ直線的に。

6g_launch_450_350px

5Gのロゴと、

5g

LTE(4G)のロゴと

Lte

比べても、どんどん円から直線になって行っている。

あ、これはあれか。遠方界と近傍界の話か。球面波から平面波に変わる距離が短くなるのは周波数が高く波長が短いとき。

https://www.ieice-hbkb.org/files/04/04gun_02hen_02.pdf

実際、5Gでミリ波帯が加わって、6Gではサブテラヘルツ波まで使うことが想定されている。

てことはもう7Gでは数THzとか使われて直線のロゴになるんじゃないか。

こんな感じに。

7g

 

2024年4月24日 (水)

高周波(RF・マイクロ波・ミリ波・5G/6G)関連ニュース2024年4月23日 IEEE Microwave Magazineで低損失基板RogersのJohnさん記事、Microwave Journalで振動補償OCXO、パワーアンプスタートアップFalcomm、NTTらのサブテラヘルツ通信、mmTronのミリ波ミキサ、など。

今月のMicrowave MagazineはIMS2024特集。

https://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=6668

だがなぜか低損失基板で有名なRogersの名物おじさん、John CoonrodさんがGrounded Coplanarをミリ波帯でP板で作るときの注意の記事を書いている。

Theory vs. Reality: Using Printed Circuit Board Technology for Grounded Coplanar Waveguide at Millimeter-Wave Frequencies: Understanding PCB Technology for Millimeter-Wave Applications

この銅箔の粗さは最近よく問題になっている。

Microwavemagazine202404

Microwave Journalはアンプと発振器特集。

https://www.microwavejournal.com/publications/1

OCXO、振動に弱いのか(レベルが普通と違うけれど)…そりゃそうだな。

A Vibration-Compensated OCXO with Digital PLL & Aging Compensation

F4202404

ジョージア工科大学からのスタートアップ、Falcomm。パワーアンプでQualcomm,Broadcom, Skyworks打倒を目指すとか。えらいこといってるな。

New Power Amplifier Startup Wants to Take on the likes of Qualcomm, Broadcom and Skyworks

Falcomm

久々に日本の話題:

6G移動通信に向け世界最高クラスのサブテラヘルツ帯無線デバイスを開発し、100Gbpsの超高速伝送を実現

240411aa

mmTronのミリ波ミキサ。

Ultra-Broadband 20 to 80 GHz Mixer IC for mmWave Applications

6Gって本当にいる?

Is There a Real Need for Developing 6G? Experts Say Yes

Akoustisのウェビナー:

BAW Filter Mastery for All: Exploring XBAW and New XP3F Technology, Leveraging Foundry Services from 2 to 20 GHz

2024年4月23日 (火)

やよい軒で牛焼きしゃぶとたっぷり野菜の定食(ごまだれ/ぽん酢)をいただく。お肉1.5倍にしなくても十分な肉の量でなかなか美味しかった。

お肉1.5倍にしようかどうか悩むが、まあ一回はノーマルでと注文。たれはあっさりしたいのでごまだれとポン酢で。

ポン酢が美味しかった。

20240421-112614

香ばしさとたれと野菜でご飯が進む味でした。

20240421-112619

2024年4月22日 (月)

長岡天神のつつじ(2024年4月21日)

あいにくの雨でしたがものすごい数のつつじが咲いていました。人もいっぱい。

20240421-103948 20240421-104007 20240421-104128 20240421-104141 20240421-104212 20240421-104220

2024年4月21日 (日)

吉野家で期間限定の親子丼(大盛)をいただく。鶏肉も多いが玉ネギが大量に入っていていいな。前回より美味しくなっている気がする。

以前に食べたときはちょっとだけ鶏の臭みがあった気がしたが、今回は全くなかった。鶏肉の量も多いが玉ネギがびっくりするほど大量に入っていて驚く…つゆだくで美味しいです。なか卯とはまた違う感じでワイルド系?

20240420-134513

豚汁もつけた。

20240420-134510

2024年4月20日 (土)

葬送のフリーレン サウンドトラック、プレリリースに続いてフル版も買った。キーになる場面(タイトル回収、アウラ戦、ゼーリエ結界破り)でかかるFrieren the Slayerが良すぎる。Zoltraakを聞くとフェルンの連続ゾルトラークが見える…Evan Callさんすごいな。

葬送のフリーレン、BGMがEvan Callさんでとてもいいので、Pre-release版をまず買って、

Frieren01

フル版が出たので早速iTunesで買った。

https://amzn.to/3vVj0sB

https://amzn.to/3W1f6cl

Frieren02

どの曲も情景がよみがえるもので、ほんわかした曲から戦闘の切羽詰まるもの、魔族の恐ろしさを表すものなどバラエティーに富んでる。

中でも一番好きなのはフリーレンが本気出すシーン(タイトル回収回で過去の月をバックにして浮いているシーン、フランメ先生との過去からアウラ、自害しろのシーン、ゼーリエ様の天地がひっくり返っても破れないはずの結界を破るシーン、フリーレン複製体との戦闘)でかかる、葬送のフリーレンの英語タイトルでもあるFrieren the Slayer。

 

 

そしてフェルンがゾルトラークを撃ちまくるシーンのこれ。

その他もどれもいい曲で、これで散歩中のBGMはしばらくこれになりそう。

2024年4月19日 (金)

トランジスタ技術2024年5月号でKeysight ADSに似た高周波シミュレータQucsStudioが本誌、別冊両方で紹介。私もお勧めだがFDTD法も使えることまではなかったり。QorvoのQSPICEや大きく変わったLTSpice 24特集もあり。エンジニア手帳では無線局開局と基板設計があるのが面白かった。

5月号は新型シミュレータ!初めての電子回路、ということでQucsStudioが大きく取り上げられていた。

https://amzn.to/3vZjMF2

20240418-200211

私も以前お勧めした。

スマホRF駆け出しエンジニアの豆知識: ⑨フリーの高周波シミュレーションソフト(回路シミュレーションはQucsStudio, LTSpice XVII、電磁界シミュレーションはHFSS学生版、Rogersツールで特性インピーダンス計算、PythonはScikit-rf)

しかし分布定数回路がFDTD法で計算できることまでは書いてない(そりゃそうか)

高周波回路シミュレータQucsStudioを使ってみる(その4) 電磁界シミュレーション(FDTD)機能を使ってKeysight ADSのMomentumの例題のフィルタ(スタブLPF)を計算。 

Fdtd

QSPICEも以前紹介。

QorvoのQSPICEが正式発行された!LTSpiceと同じ作者さんということで両者 QucsStudioと比較。特にLTSpiceと比較してサクサク動くし、C でモデルが書ける(内蔵してる)し、45°に部品を回転できる。ユーザーフォーラムもすでにできている。

さらにLTSpiceが17から24になって大きく変わったことも記載。

Qspiceltspice

エンジニア手帳の方もエンジニア版理科年表みたいでいろんな話題があって面白かった。

 

2024年4月18日 (木)

「黄土館の殺人」を読んだ。災害+館での殺人のシリーズ3作目。今回は地震で土砂崩れで閉じ込められた館での殺人、だが名探偵の葛城はそこにはいない、とというもの。大がかりなトリック+探偵が追い込まれるストーリーが面白い。超有名な館ものもちょっと思い出す。

阿津川 辰海さんの作品を読むのもこれで3作目。

紅蓮館の殺人を読んだ。てんこ盛りの内容で、かつ「名探偵の証明」「名探偵に薔薇を」のような探偵であること、について悩む探偵が出てくる作品は好きです

蒼海館の殺人を読んだ。前作の火に続いて今度は水。探偵の実家の屋敷で探偵の家族が事件に、というのはすごく珍しいのでは。今回もいろんな仕掛けがたっぷりで面白かった

https://amzn.to/3Q5CzFA

20240417-194233

あらすじは

殺人を企む一人の男が、土砂崩れを前に途方にくれた。
復讐相手の住む荒土館が地震で孤立して、犯行が不可能となったからだ。
そのとき土砂の向こうから女の声がした。

声は、交換殺人を申し入れてきた――。

同じころ、大学生になった僕は、
旅行先で「名探偵」の葛城と引き離され、
荒土館に滞在することになる。
孤高の芸術一家を襲う連続殺人。
葛城はいない。僕は惨劇を生き残れるか」

というもの。今回も探偵が悩み、その上、殺人が起こっているところとは分断され、そして大がかりなトリックとけれんみたっぷりで面白かった。

最近また話題の超有名作(この状況なら似ざるを得ないか?)を思い出した。

地震を扱ったことについて後書きで能登半島地震があったことで出版を悩まれたことも書かれています。

 

 

2024年4月17日 (水)

国立科学博物館のクラウドファンディングへの返礼品としてとても立派な本(地球の宝を守れ 科博コレクション図鑑)をもらった!

これは相当いい本で、内容もそうだが紙質がとてもいい。クラウドファンディングしてよかった。総額9億円を超えたそうです。

20240415-131818 20240415-131832

2024年4月16日 (火)

Excel VBAからOfficeスクリプトへ乗換るための数値計算(5) 二次元拡散方程式の差分法の計算を両者でやって速度を比較した。あれ?Officeスクリプトの方がExcel VBAより1.5倍くらい遅い…意外。Node.jsのTypeScriptは両者より圧倒的に速いのだが…

ChromeなどでのJavaScriptは高速なので、当然VBAよりOffceScripts(TypeScript)のほうがずっと速いんじゃないかと思ってやってみた。

例題はループを何回も回すものとして2次元拡散方程式の差分法での計算にしてみた。

NxNのメッシュで、Nを増やしてみてどのくらいの計算量か見る。

VBA

Diffusionvba

Offceスクリプト

Diffusionscript

計算結果はほぼ同じ。では計算時間は?

Diffusioncomparison_20240415165101

あれ?意外。1.5倍くらいOffceスクリプトのほうが遅い。

でもNode.jsのTypeScriptはどっちもぶっちぎって爆速。なんでこんなに違うんだろう。

Officeスクリプトのコードはこんな感じ。
function main(workbook: ExcelScript.Workbook) {
    
    let selectedSheet = workbook.getWorksheet("OfficeScripts");
    const n : number =128;
    const m : number = 10000;
    const d : number = 0.01;
    let f0 : number[][] = Array(n + 2);
    let f1 : number[][] = Array(n + 2);
    let startTime : number = 0;
    let stopTime : number = 0;

 

    for (let i =0; i <= n + 1; i++) {
        f0[i] = Array(n + 2).fill(0);
        f1[i] = Array(n + 2).fill(0);
    }
    f0[n/2][n/2] = 1.0;
    
    startTime = performance.now();
    for (let k = 0; k < m; k++) {
        for (let i = 1; i <= n; i++) {
            f0[0][i] = f0[1][i];
            f0[n+1][i] = f0[n][i];
            f0[i][0] = f0[i][1];
            f0[i][n+1] = f0[i][n]; 
        }
        for (let i = 1; i <= n; i++) {
            for (let j = 1; j <= n; j++) {
                f1[i][j] = f0[i][j] 
                + d*(f0[i+1][j]+f0[i-1][j]+f0[i][j+1]+f0[i][j-1] - 4.0*f0[i][j]);
            }
        }
        for (let i = 1; i <= n; i++) {
            for (let j = 1; j <= n; j++) {
                f0[i][j] = f1[i][j];
            }
        }
    }
    stopTime = performance.now();
    selectedSheet.getRangeByIndexes(22, n+2, n+2).setValues(f0);
    selectedSheet.getCell(0,0).setValue((stopTime-startTime)/1000);
}
Excel VBAはこう。
Option Explicit

Private Sub CommandButton1_Click()

    Dim f1() As Double, f0() As Double
    Dim i As Integer, j As Integer, k As Integer, m As Integer, n As Integer
    Dim d As Double
    Dim startTime As Double, stopTime As Double
   
    Worksheets("VBA").Activate

    Application.ScreenUpdating = False
   
    n = 128
    m = 10000
    d = 0.01
    ReDim f1(n + 1, n + 1), f0(n + 1, n + 1)
    For i = 0 To n + 1
        For j = 0 To n + 1
            f0(i, j) = 0
        Next j
    Next i
    f0(n / 2, n / 2) = 1#
   
    startTime = Timer
    For k = 0 To m
   
        For i = 1 To n
            f0(0, i) = f0(1, i)
            f0(n + 1, i) = f0(n, i)
            f0(i, 0) = f0(i, 1)
            f0(i, n + 1) = f0(i, n)
        Next i
   
        For i = 1 To n
            For j = 1 To n
                f1(i, j) = f0(i, j) + d * (f0(i + 1, j) + f0(i - 1, j) + f0(i, j + 1) + f0(i, j - 1) - 4# * f0(i, j))
            Next j
        Next i
       
        For i = 1 To n
            For j = 1 To n
                f0(i, j) = f1(i, j)
            Next j
        Next i
       
    Next k
    stopTime = Timer

    Range(Cells(3, 3), Cells(3 + n + 1, 3 + n + 1)) = f0
    Cells(1, 1) = stopTime - startTime
    Application.ScreenUpdating = True
End Sub

(過去のもの)

Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(4) LU分解(奥村先生のC言語による最新アルゴリズム事典のTypeScript移植版)で連立方程式を計算する。セルの範囲を指定して実行すると任意の大きさの連立方程式の解がセルに表示される。

 Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(3) セル範囲を2次元配列、1次元配列に入れるところでハマる…as number[][]で数値型に直したり、[].concat(...a)で2次元から1次元に直したり、a.map((x) => [x])で1次元から2次元に直すなどした。

Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(2) 4段4次のルンゲクッタ法でローレンツ方程式を計算してみる。

Excelの自動化がいつの間にかVBAじゃなくてデスクトップ版でもOfficeスクリプト(TypeScript)で出来るようになっていた。Python in Excelとか触っているうちに出遅れた…そこで先日作った複素数クラスを使ってセルに入力した値を複素数計算できるようにした。

2024年4月15日 (月)

マイカリー食堂でごろごろ野菜ロースかつカレー(大辛)を、カレーハウススパイシーでチキンカツカレー(大辛)をいただく。

マイカリー食堂でのカツカレー。野菜がごろごろ。ただ大辛にしてもほとんど辛くなかったり。

20240107-134203

カレーハウススパイシーのカツカレー。これは大辛にすると相当辛くていい。一口目が甘くてだんだん辛くなる好みのカレー。

20231231-134201

2024年4月14日 (日)

カレーハウス スパイシーでチキンカツカレーの大辛、2倍の大盛もいただく。卓上に辛みオイルだけでなくてとび辛スパイス、香りスパイスもおかれるようになっていてさらに美味しくなった。

私はここのカレーがかなり好き。一口目は甘い感じだけどあとからスパイスが効いてくる。

辛みオイルを大辛に加えて入れるのが気に入ってますが、新たにとび辛スパイスと香りスパイスも卓上に置かれていた。

これをかけるとさらに美味しく。

20220305-135525 20220305-135526

2024年4月13日 (土)

長岡京・下海印寺の小泉川の鯉のぼりを観てきた。

こどもの日はまだ先ですがこいのぼりが上がっていた。なかなか壮観。

https://www3.nhk.or.jp/lnews/kyoto/20230427/2010017183.html

20240413-162602 20240413-162607 20240413-162608

2024年4月12日 (金)

Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(4) LU分解(奥村先生のC言語による最新アルゴリズム事典のTypeScript移植版)で連立方程式を計算する。セルの範囲を指定して実行すると任意の大きさの連立方程式の解がセルに表示される。

先日、2次元配列と1次元配列がExcelのセルから読み出せるようになったので、早速行列計算をしてみる。最近のXで線形代数がトレンドに入ることが多いし。

まずはLU分解がいいだろう。奥村先生のC言語による最新アルゴリズム事典(今は改訂新版 C言語による標準アルゴリズム事典)の

https://github.com/okumuralab/algo-c

LU分解をそのままTypeScriptに移植させてもらいました。変数の宣言が違うだけなのですぐに移植完了。

画面はこんな感じで。

Officescript_lu01

実行している動画(クリックで現れます)。

Officescriptlu_20240410201501

ソースコード:

function main(workbook: ExcelScript.Workbook) {
  let range : number[][]= workbook.getSelectedRange().getValues() as number[][];
  let row : number  = workbook.getSelectedRange().getRowIndex();
  let column: number = workbook.getSelectedRange().getColumnIndex();
  const n : number = range.length;
  let a: number[][] = Array(n);
  let b: number[] = Array(n);
  let ip: number[] = Array(n);
  let x: number[] = Array(n);

 

  for (let i = 0 ; i < n; i++) {
    a[i] = range[i].slice(0, n);
    b[i] = range[i][n];
  }

 

    let det = lu(n, a, ip);
    solve(n, a, b, ip, x);
    workbook.getActiveWorksheet().getRangeByIndexes(row, column + n + 1, n, 1)
                    .setValues(x.map((x) => [x]));

 

}

 

function lu(n : number, a : number[][], ip : number[])
{
  let ii : number;  let ik : numberlet jj  : number;
  let t : number;   let u :  numberlet det : number;
  let weight : Array<number> = Array(n);

 

  det = 0;                   /* 行列式 */
  for (let k = 0; k < n; k++) {  /* 各行について */
    ip[k] = k;             /* 行交換情報の初期値 */
    u = 0;                 /* その行の絶対値最大の要素を求める */
    for (let j = 0; j < n; j++) {
      t = Math.abs(a[k][j]); if (t > u) u = t;
    }
    if (u == 0return null/* 0 なら行列はLU分解できない */
    weight[k] = 1 / u;     /* 最大絶対値の逆数 */
  }
  det = 1;                   /* 行列式の初期値 */
  for (let k = 0; k < n; k++) {  /* 各行について */
    u = -1;
    for (let i = k; i < n; i++) {  /* より下の各行について */
      ii = ip[i];            /* 重み×絶対値 が最大の行を見つける */
      t = Math.abs(a[ii][k]) * weight[ii];
      if (t > u) { u = t; jj = i; }
    }
    ik = ip[jj];
    if (jj != k) {
      ip[jj] = ip[k]; ip[k] = ik;  /* 行番号を交換 */
      det = -det;  /* 行を交換すれば行列式の符号が変わる */
    }
    u = a[ik][k]; det *= u;  /* 対角成分 */
    if (u == 0return null;    /* 0 なら行列はLU分解できない */
    for (let i = k + 1; i < n; i++) {  /* Gauss消去法 */
      ii = ip[i];
      t = (a[ii][k] /= u);
      for (let j = k + 1; j < n; j++)
        a[ii][j] -= t * a[ik][j];
    }
  }
  
  return det;           /* 戻り値は行列式 */
}

 

function solve(n : number, a : number[][], b : number[], ip : number[] , x : number[])
{
  let ii : number;
  let t : number;

 

  for (let i = 0; i < n; i++) {       /* Gauss消去法の残り */
    ii = ip[i]; t = b[ii];
    for (let j = 0; j < i; j++) t -= a[ii][j] * x[j];
    x[i] = t;
  }
  for (let i = n - 1; i >= 0; i--) {  /* 後退代入 */
    t = x[i]; ii = ip[i];
    for (let j = i + 1; j < n; j++) t -= a[ii][j] * x[j];
    x[i] = t / a[ii][i];
  }
}


結構いい感じで動くな。さらに次行ってみよう。FFTか、VBAとの速度比較か…

 

 

(過去のもの)

 Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(3) セル範囲を2次元配列、1次元配列に入れるところでハマる…as number[][]で数値型に直したり、[].concat(...a)で2次元から1次元に直したり、a.map((x) => [x])で1次元から2次元に直すなどした。

Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(2) 4段4次のルンゲクッタ法でローレンツ方程式を計算してみる。

Excelの自動化がいつの間にかVBAじゃなくてデスクトップ版でもOfficeスクリプト(TypeScript)で出来るようになっていた。Python in Excelとか触っているうちに出遅れた…そこで先日作った複素数クラスを使ってセルに入力した値を複素数計算できるようにした。

吉野家でタルタル南蛮から揚げ定食(大盛、ご飯増量無料)をいただく。タルタルがとても多くていいな。

最近の吉野家は入ったところのカウンターで注文して受け取るセルフの店が増えているような気がする。今回行ったところもそうだった。

で注文してすぐ出てきた。

20240317-134511

タルタルがたっぷりでこれは美味しい。

20240317-134513

2024年4月11日 (木)

HumaneのAIピンの内部構造がFCCで公開されていた。QualcommのSnapdragon 720GにX15 LTEモデム、SkyworksのFEM、QualcommのSAWなどがなんとなくわかる。

※2024/5/8追記 これ結構間違ってました。もう少し正確なのはこちら。

https://sci.tea-nifty.com/blog/2024/05/post-5a3f85.html

このポスト見た。

 

FCCで公開されてるのか!早速見てみた。

https://fcc.report/FCC-ID/2BAFM-HU123/

なんとなく一般的なスマートフォンの上部基板だけ取り出してきたような形態をしている。まあそれはそうか…

マーキングがあまり見えないがある程度分かるものを。

Humaneaipi01

Skyworksの上のFEMの印字見えないな…でもRx系のFEMだろう。EPCOSマークがあるSAWは今はQualcomm(RF360)。

LTCCフィルタ系はまあだいたいわかるが略。

Humaneaipi02

こっちはほとんど印字見えない…まあSnapdragon 720Gと共に使われるモデムとWiFiだろう。

左下はGPSかもしれない。

2024年4月10日 (水)

Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(3) セル範囲を2次元配列、1次元配列に入れるところでハマる…as number[][]で数値型に直したり、[].concat(...a)で2次元から1次元に直したり、a.map((x) => [x])で1次元から2次元に直すなどした。

さて今回は、行列計算をしようとしてハマったところを。

・セルの範囲をRangeオブジェクトから getValues()で値をとると2次元配列になる。

 ただ、型が(number | string | boolean)なので、数値の2次元配列変数に入れようとすると×。

 as number[][]で型アサーションが必要。

 https://typescriptbook.jp/reference/values-types-variables/type-assertion-as

・セルの範囲は1列(縦ベクトルのような)でも2次元配列になる。なので1次元配列に変換が必要。

 どうもJavaScriptにはあるflatがTypeScriptはないようで、代わりに三点リーダーを使うスプレッド構文と

 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax
 

   連結するconcatを使うと簡単。

 https://qiita.com/manzoku_bukuro/items/c28c6f484315a0ff6ce2

・逆に1次元配列を2次元配列にするにはmapを使うと簡単。

例題はこんな感じ。

Officescript_array

 

コードもつけておきます。

// セルの範囲を2次元配列、1次元配列に入れる例

 

function main(workbook: ExcelScript.Workbook) {
    let sheet = workbook.getActiveWorksheet();
    //2次元配列を行列から得る場合
    // Rangeオブジェクトの値は2次元配列だが、変数にいれるにはas numbers[][]で型アサーションが必要
    let a: number[][] = sheet.getRange("A1:C3").getValues() as number[][];
    // 1次元配列を縦ベクトルから得る場合
    //1列しかなくても2次元配列になるので縦ベクトルは1次元にconcatで直す。
    let b : number[] = [].concat(...sheet.getRange("E1:E3").getValues() as number[][]);
    //2次元配列をセルに表示する場合はそのままでOK。
    sheet.getRange("A5:C7").setValues(a);
    //1次元配列を縦ベクトルのように表示するときは2次元配列にmapで直す。
    sheet.getRange("E5:E7").setValues(b.map((x) => [x]));
}

 

次はやっと本題の行列計算(LU分解かな)。

(過去のもの)

Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(2) 4段4次のルンゲクッタ法でローレンツ方程式を計算してみる。

Excelの自動化がいつの間にかVBAじゃなくてデスクトップ版でもOfficeスクリプト(TypeScript)で出来るようになっていた。Python in Excelとか触っているうちに出遅れた…そこで先日作った複素数クラスを使ってセルに入力した値を複素数計算できるようにした。

2024年4月 9日 (火)

パリ ポンピドゥーセンター キュビスム展—美の革命 ピカソ、ブラックからドローネー、シャガールへ@京都市京セラ美術館を観てきた。なかなか面白かった。何をどう見てもタイトルと結びつかない絵も。100点を超える作品数で、写真撮影も大部分がOKでした。

村上隆さんの展覧会も同時に開催されてますが、前回観てきたので今回はキュビズム展へ。

20240406-143242

これはまだわかる…

20240406-135238

これがギター奏者、どう見ればいいんだ…

20240406-135354

バイオリンもなかなかわからん。

20240406-135456 20240406-135608

このあたりからだんだんわかりやすくなってくる。

20240406-140222 20240406-141212 20240406-141516 20240406-141914 20240406-142249 20240406-142636 20240406-142752 20240406-142822 20240406-142841 20240406-142955

なかなか面白かった。ほとんど全て写真を撮ったので後で見返してみよう。

2024年4月 8日 (月)

ドラクエウォーク、ほこらシーズンで初めてプラチナIIになった!ポケモンGOはジャンボコレクションチャレンジ、コレクションチャレンジ完了ですご腕コレクターメダルは92に。でもワールド・オブ・ワンダーズは5/5でまた調査中になった。

累計181,900でプラチナIIになった!降格ラインは150,000くらいだったようだ。ただプラチナIまではさらに200,000くらい追加で必要でこれはちょっと無理か…

20240405-151137

ポケモンGOも2つのコレクションチャレンジ完了。

20240405-123759

すご腕コレクターメダルは92になった。

20240405-123509

でもワールド・オブ・ワンダーズも今日終わるか?と思っていたらまた調査中になった。

20240408-055637

2024年4月 7日 (日)

吉兵衛(三宮本店)でかつ丼だぶるをいただく。

ここはいつ行っても混んでいるが、今回はお昼時から時間がたっていてので少しすいていた。なので初めて訪問。

だぶるの肩ロースにした。

いい感じの卵のとろとろ感にカツが2枚でたっぷり。美味しかった!

20210109-151147 20210109-151148

2024年4月 6日 (土)

2024年4月6日時点の京都・木屋町、平安神宮、長岡天神の桜。かなり満開に近く咲いている。

まずは長岡天神。結構咲いてるな。

20240406-122356

平安神宮あたり。ここもかなり咲いている。

20240406-134253 20240406-143523 20240406-143553 20240406-144114

そして木屋町あたり。ここはもう満開かな。

20240406-154447 20240406-154456 20240406-154825

2024年4月 5日 (金)

Excel VBAからOfficeスクリプト(TypeScript)へ乗換るための数値計算(2) 4段4次のルンゲクッタ法でローレンツ方程式を計算してみる。

このブログではかつて、Excel VBAでいろいろな数値計算をするのが看板だった。例えばこんなの。

Excelマクロ(VBA)で数値計算-複素TDGL方程式、蔵本シバシンスキー方程式、ピタゴラスの三体問題、シュレーディンガー方程式、FPU問題などなど

Dormand-Prince(ルンゲ・クッタ8次)の有名なルーチンDOP853をExcel VBAに移植

Excel VBAで複素数/FFTが使えるライブラリ

ただ、VBAからOfficeスクリプトにマイクロソフトは置き換えようとしているように見える。(Python in Excelは別用途)

で先日こんなのをやってみた。

Excelの自動化がいつの間にかVBAじゃなくてデスクトップ版でもOfficeスクリプト(TypeScript)で出来るようになっていた。Python in Excelとか触っているうちに出遅れた…そこで先日作った複素数クラスを使ってセルに入力した値を複素数計算できるようにした。 

VBAよりはるかに簡単に数値計算プログラム書けそう、ということで前回を(1)として今回の(2)ではもう何回やったかわからない4段4次のルンゲクッタ法でローレンツ方程式を計算してみよう。

プログラムはこんな感じで簡単。

function main(workbook: ExcelScript.Workbook) {
    let selectedSheet = workbook.getActiveWorksheet();
    let x : Array<number> = [0.10.10.1]; 
    let t: number = 0;
    const h: number = 0.01;
    for (let i = 0; i < 5000; i++) {
      selectedSheet.getCell(1 + i, 0).setValue(t);
      selectedSheet.getRangeByIndexes(1 + i, 113).setValues([x]);
      x = RungeKutta(t, x, h);
      t += h;
    }
    let chart = selectedSheet.addChart(ExcelScript.ChartType.xyscatterLinesNoMarkers, selectedSheet.getRange("B1:D1").getExtendedRange(ExcelScript.KeyboardDirection.down));
    chart.getTitle().setText("ローレンツ方程式");
}
function func(t : number, x : Array<number>) : Array<number> {
  let f : Array<number> = new Array(x.length);
  const p : number = 10.0;
  const r : number = 28.0;
  const b : number = 8.0/3.0;
  f[0] = -p * (x[0] - x[1]);
  f[1] = -x[0] * x[2] + r * x[0] - x[1];
  f[2] = x[0] * x[1] - b * x[2];
  return f;
}
function AddArray(a : Array<number>, b : Array<number>, c : number) : Array<number> { 
  let tmp : Array<number> = new Array(a.length);
  for (let i = 0; i < a.length; i++) {
    tmp[i] = a[i] + c * b[i];
  }
  return tmp;
}
function RungeKutta(t: number, x: Array<number>, h : number) : Array<number> {
  const k1: Array<number> = func(t, x);
  const k2: Array<number> = func(t + h / 2AddArray(x, k1, h / 2));
  const k3: Array<number> = func(t + h / 2AddArray(x, k2, h / 2));
  const k4: Array<number> = func(t + h, AddArray(x, k3, h));
  let x_next : Array<number> = new Array(x.length);
  for (let i = 0; i < x.length; i++) {
    x_next[i] = x[i] + h * (k1[i] + 2*k2[i] + 2*k3[i] + k4[i])/6;
  }
  return x_next;
}
実行するとすぐにこんなグラフが得られた!これは簡単。
Officescriptrungekutta1
コードエディタではこんな感じになって、補完とかしてくれる。

Officescriptcomplex02_20240404213401

このシリーズもちょっとやっていこう(続く)。

2024年4月 4日 (木)

Excelの自動化がいつの間にかVBAじゃなくてデスクトップ版でもOfficeスクリプト(TypeScript)で出来るようになっていた。Python in Excelとか触っているうちに出遅れた…そこで先日作った複素数クラスを使ってセルに入力した値を複素数計算できるようにした。

いつの間にかTypeScriptベースのOffice Scriptsが自動化で使えるようになっていた。

Office スクリプトと VBA マクロの違い

これは…Python in Excelは使える人が限られそうだが、こっちはVBAを置き換えていく気がする。

このために、先日

TypeScriptで複素数クラスを作って複素数の四則演算、exp、べき、logの計算ができるようにした。大昔にJavaScriptで作ったり、数値計算ライブラリmathjsを使ったりしたがもうちょっとお手軽なものが欲しかったので。 

というのを書いたのだった。

こんな感じでエディットできる。

Officescriptcomplex01

コードはこちら:

Officescriptcomplex02

テキストでも示す。コマンドは違うがほとんどVBAと同じ感じでセルの操作はできる。ちょっといろいろ試してみようか。

function main(workbook: ExcelScript.Workbook) {
  class complex {
    x: number;
    y: number;
    constructor(x: number, y: number) {
      this.x = x;
      this.y = y;
    }
    set Re(x: number) {
      this.x = x;
    }
    get Re(): number {
      return this.x;
    }
    set Im(y: number) {
      this.y = y;
    }
    get Im(): number {
      return this.y;
    }
    static add(a: complex, b: complex): complex {
      return new complex(a.x + b.x, a.y + b.y);
    }
    static sub(a: complex, b: complex): complex {
      return new complex(a.x - b.x, a.y - b.y);
    }
    static mul(a: complex, b: complex): complex {
      return new complex(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
    }
    static div(a: complex, b: complex): complex {
      const r2 = b.x * b.x + b.y * b.y;
      return new complex((a.x * b.x + a.y * b.y) / r2, (-a.x * b.y + a.y * b.x) / r2);
    }
    static conj(a: complex): complex {
      return new complex(a.x, -a.y);
    }
    static exp(a: complex): complex {
      return new complex(Math.exp(a.x) * Math.cos(a.y), Math.exp(a.x) * Math.sin(a.y));
    }
    static log(a: complex): complex {
      const r2 = a.x * a.x + a.y * a.y;
      return new complex(0.5 * Math.log(r2), Math.atan2(a.y, a.x));
    }
    static pow(a: complex, b: complex): complex {
      return complex.exp(complex.mul(complex.log(a), b));
    }
    static abs(a: complex): number {
      return Math.sqrt(a.x * a.x + a.y * a.y);
    }
    static arg(a: complex): number {
      return Math.atan2(a.y, a.x);
    }
    static toString(a: complex): string {
      if (a.y < 0) {
        return a.x.toString() + a.y.toString() + "i";
      } else {
        return a.x.toString() + "+" + a.y.toString() + "i";
      }
    }
  }
  let selectedSheet = workbook.getActiveWorksheet();
  const z1 = selectedSheet.getRange("C2:D2").getValues();
  const z2 = selectedSheet.getRange("C3:D3").getValues();

 

  const a = new complex(Number(z1[0][0]), Number(z1[0][1]));
  const b = new complex(Number(z2[0][0]), Number(z2[0][1]));
  
  const c = complex.div(a, b);
  selectedSheet.getRange("C4:D4").setValues([[c.Re, c.Im]]);

 

}

 

Python in Excel試したシリーズ:

 Python in Excel(ExcelであるセルでPY関数を使うとPythonコードがかける)を使う(その1)scikit-learnを使ってアイリス(あやめ)の分類を様々な機械学習(k-最近傍法、ロジスティック回帰、ランダムフォレスト、SVM、ニューラルネットワーク)を試す。Python Editorも試す

Python in Excel(PY関数を使うとExcelでPythonコードがかける)を使う(その2)SciPyでローレンツ方程式をsolve_ivpのDOP853(Dormand&Prince 8次のルンゲクッタ法)で計算して、3Dプロットをする。Excel Labs(実験的なアドイン)のPython Editorも補完がきいて便利。

Python in Excel(PY関数を使うとExcelでPythonコードがかける)を使う(その3)20231017は素数なので、素数(素因数分解)カレンダーを、SymPyで素因数分解してデータ並び替え、Excelで積み上げ棒グラフにしてプロット。Pythonで積み上げ棒グラフは面倒なのでこれは楽。

Python in Excel(PY関数を使うとExcelでPythonコードがかける)を使う(その4) 何のライブラリが使えるかpkg_resourcesを使って調査。294個あった。numpy,scipy,scikit-learn,numba,mpmath,Pytourch,sympy,pandas,pillow,matplotlib,statsmodels,pywavelets,transformersなどは使える。

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その5) Excelでcsvファイルを読み込み、Pythonのscikit-learnとNumpyで主成分分析(PCA),特異値分解(SVD)を行いExcelでグラフにする。

立てこもりで有名になってしまった蕨市が、日本最小面積の市ということでデータを国土地理院のサイトからcsvでExcelに読み込み、Python in ExcelのPandasで解析&Seabornで図示。最大は高山市でした。ー Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その6)

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その7) データをcsvでExcelで読んで重回帰分析をstatsmodelsのOLSで行う。が、summaryがExcelのセル内でうまく表示できなくてハマる…summary().as_text()として、セルの書式を折り返して全体を表示を選ぶ。

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その8) 短時間でFFTを繰り返して時間vs.周波数のデータを描くスペクトログラムをExcelでCSVファイルを読んでSciPyで計算。Matlabの例題を使った。音声でよくやられるが最近のスペアナはこの機能持ってるの多いな。

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その9) statsmodelsのSARIMAX(SARIMA。季節性を考慮したARIMA)を使った時系列予測を行う。予測する時間がExcelのセルで簡単にマウスドラッグで作れるのでとても簡単。Excel予測ツールとも比較
Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その10) scikit-learnを使ってサポートベクターマシン(SVC)で手書き文字(数字)の認識を行う。高校の情報IIで習うことに衝撃を受けて…Excelの機能でセルに値に応じて色付けすることで数字を表現。

Python in Excel(PY関数を使うとExcelのセル内にPythonがかける)を使う(その11)多倍長精度計算のmpmath, gmpy2が使えるのでタッパーの自己言及式を描いてみる。セルに数字を書いて色付けするExcelの機能を使った。

2024年4月 3日 (水)

TypeScriptで複素数クラスを作って複素数の四則演算、exp、べき、logの計算ができるようにした。大昔にJavaScriptで作ったり、数値計算ライブラリmathjsを使ったりしたがもうちょっとお手軽なものが欲しかったので。

だいぶ昔にこれを書いたが、いまだによくアクセスがある。ただ全くJavaScriptの知識がないまま書いたのでいまいち。

Javascriptで複素数を扱うライブラリ

一方JavaScript/TypeScriptには数値計算ライブラリ math.jsというのがあってしばらく遊んでいた。最後につけているリンク参照。

これはこれで便利だが、複素数だけ使いたいというときには大げさ。

なので、今度はTypeScriptで複素数クラスを作ってみた。今回もほぼTypeScriptの知識はないのだが…

こんな感じのcomplex.tsを作って、

export class complex
{
    x : number;
    y : number;
    constructor(x : number, y : number) {
        this.x = x;
        this.y = y;
    }
    set Re(x : number) {
        this.x = x;
    }
    get Re() : number {
        return this.x;
    }
    set Im(y : number) {
        this.y = y;
    }
    get Im() : number {
        return this.y;
    }
    static add(a : complex, b : complex) : complex {
        return new complex(a.x + b.x, a.y + b.y);
    }
    static sub(a : complex, b : complex) : complex {
        return new complex(a.x - b.x, a.y - b.y);
    }
    static mul(a : complex, b : complex) : complex {
        return new complex(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x);
    }
    static div(a : complex, b : complex) : complex {
        const r2= b.x*b.x + b.y*b.y;
        return new complex((a.x*b.x+a.y*b.y)/r2, (-a.x*b.y+a.y*b.x)/r2);
    }
    static conj(a: complex) : complex {
        return new complex(a.x, -a.y);
    }
    static exp(a: complex) : complex  {
        return new complex(Math.exp(a.x)*Math.cos(a.y),Math.exp(a.x)*Math.sin(a.y));
    }
    static log(a: complex) : complex  {
        const r2= a.x*a.x + a.y*a.y;
        return new complex(0.5*Math.log(r2), Math.atan2(a.y,a.x));
    }
    static pow(a: complex, b: complex) : complex  {
        return complex.exp(complex.mul(complex.log(a),b));
    }
    static abs(a : complex) : number {
        return Math.sqrt(a.x*a.x+a.y*a.y);
    }
    static arg(a: complex) : number {
        return Math.atan2(a.y,a.x);
    }
    static toString(a : complex) : string {
        if (a.y < 0) {
            return a.x.toString()  + a.y.toString() + "i";
        } else {
            return a.x.toString() + "+" + a.y.toString() + "i";
        }
    }
}

 

これをこんな感じで使う。

import {complex} from './complex'

const a = new complex(1,2);
const b = new complex(3,4);
console.log("add : " + complex.toString(complex.add(a,b)));
console.log("sub : " + complex.toString(complex.sub(a,b)));
console.log("mul : " + complex.toString(complex.mul(a,b)));
console.log("div : " + complex.toString(complex.div(a,b)));
console.log("exp : " + complex.toString(complex.exp(a)));
console.log("log : " + complex.toString(complex.log(a)));
console.log("pow : " + complex.toString(complex.pow(a, b)));
console.log("conj: " + complex.toString(complex.conj(a)));
console.log("abs : " + complex.abs(a));
console.log("arg : " + complex.arg(a));
結果はこうなる。
add : 4+6i
sub : -2-2i
mul : -5+10i
div : 0.44+0.08i
exp : -1.1312043837568135+2.4717266720048188i
log : 0.8047189562170501+1.1071487177940904i
pow : 0.1290095940744669+0.03392409290517001i
conj: 1-2i
abs : 2.23606797749979
arg : 1.1071487177940904

[Done] exited with code=0 in 0.758 seconds
 

結構お手軽に計算できた。さてこれで何をやろうとしているかというと(続く)。 

<math.jsの事例>

JavaScriptの数値計算ライブラリmathjsを使う(1) まずは行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。このココログで直接計算できる機能も付けた。

JavaScriptの数値計算ライブラリmathjsを使う(2) 次は複素数演算。四則演算や平方根、べき乗、expなどが簡単にできる。このココログで直接計算できる簡易電卓を作ってみた。

JavaScriptの数値計算ライブラリmathjsを使う(3) Plotlyを併用して関数をグラフ表示する。ココログでもグラフ表示できるようになった。

JavaScriptの数値計算ライブラリmathjsを使う(4) 高速フーリエ変換(FFT)を計算してココログにplotlyでグラフ表示できるようにする。。

JavaScriptの数値計算ライブラリmathjsを使う(5) 複素行列の固有値・固有ベクトルを求める。ココログで計算できるようにした。

JavaScriptの数値計算ライブラリmathjsを使う(6) 特異値分解(SVD)、主成分分析(PCA)を計算してみる。このココログでも計算できるようにした。

JavaScriptの数値計算ライブラリmathjsを使う(7) マンデルブロ集合を描く。このココログでも計算して図示できるようにしてみた。

JavaScriptの数値計算ライブラリmathjsを使う(8) 4段4次のルンゲクッタ法でローレンツ方程式を計算。このココログでもPlotlyで3次元でぐりぐり動かせるようにしてみた。

JavaScriptの数値計算ライブラリmathjsを使う(9) 仏陀のお姿のフラクタル Buddhabrot(ブッダブロ)を描く。このココログでも計算できるようにしてみた。

JavaScriptの数値計算ライブラリmathjsを使う(10) リーマンゼータ関数(Riemann Zeta function)を計算、3次元化してPlotlyでぐりぐり動かす

今回のコードのVisual Studio Codeの画像:

Typescriptcomplex1 Typescriptcomplex2

2024年4月 2日 (火)

すぐコンサル的な人は問題と課題は違うというが、あれは誰が言い出したんだろうか。マナー講師みたいなルール。辞書的には同じ風で、たぶん英語ならIssueとTask(Challenge)のような感じで違うものをわざと同じような単語でごまかしている?…戦略と戦術も同じ匂いがする。

今日も問題と課題は違う、というのを言っている人がいたのを見た。

Microsoft Copilotに聞いてみたら、

Photo_20240402205202

そうそう、こんな感じで説明される。

でも辞書的には

Photo_20240402205201

問題は課題、課題は問題、と言っている…

これさも当たり前のように言われるけどどっかのコンサルがマナー講師みたいに始めたんだと思うが、誰が言い始めたんだろうか。

英語ではたぶん、問題はissueで課題はtaskとかchallengeのような気がする。

https://www.worldtalk.jp/blog/task-eng/

多分コンサルがお前たちは分かっていない、というような話をするために似たような言葉を持ってきたんじゃないかな。

戦略と戦術も同じ匂いがする…これもCopilotに聞いてみた。

3_20240402210101

これも英語ではStrategyとTacticsで明確に違うのを似たような名前を持ってきてこけおどしをしている感が半端ない。

2024年4月 1日 (月)

松屋で初めて聞く料理、マレーシア風ダブル牛肉煮込み~ルンダン~をいただく。スパイシーでお肉が柔らかくていいな。

シュクメルリとか松屋は聞いたことのない料理をどんどん出してくるな。今回はルンダン。せっかくなのでお肉ダブルで。

20240329-182609 20240329-182613

辛くはないがかなりスパイシーでこれはなかなか。お肉も柔らかくてこれは美味しい。

« 2024年3月 | トップページ | 2024年5月 »

最近の記事

最近のコメント

2024年6月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
フォト
無料ブログはココログ