日記(2025年4-6月)

  • 3月(下半期)
    なんか書くことないから、3月のことも書きます。
    なんか、東アジア、東南アジア圏に行ったり、国際線乗る時のセキュリティチェックで毎回英語や現地の言葉で話しかけられる。。。(そんなに外国人顔かな?なんか髪の毛明るいからちゃう?と思いたい。)でも、ポジティブに言えば、なんか割とディープなところに行っても場に馴染める(自由な時間に九龍のあたりの公園で、中国の将棋(象棋:シャオチー)ようの石のテーブル見たりやってるところ見ることできた。 そう思ったら、割とメリット?)
    鳥頭だからいつも忘れるんだけど、2進数で有限小数となるのはいつかって、有理数($q/p$:$10$進表示)ってpが2の冪乗だったらなるんだよね(同値)。。。
  • 4月(上半期)
    髪の毛を染め直したい。。。(4/4) (→ 染め直す(4/5))
    カービィのエアライドの新作が出るけど、お金がビミョいから、switch2は新作のそれ出るまで待とうかな。
    https://x.com/ymatsux_ac/status/1904062878560272462 この記事見て, Atcoderとか面白そうだなーって思って登録だけはした。。。なんかちらっと見たけど、ITストラジスト、ITサービスマネージャ、シス監査資格とかいいらしい。。 知らないけど。あとなんか、G検定とかいうのがあるらしい。(←なんか、これは一般的に使えそうだし、受けようかなーって気持ち。今のところ。)統計検定準1級
    もありかなーって気持ちノリだけど。https://dev.classmethod.jp/articles/how-to-pass-aws-certified-ai-ml/  AWSのAWS認定機械学習もおもろいかもしれない.git と和解したい。。。あれ、まあ、他人へのアクセスのしやすさとか、編集のしやすさとかメリットはわかるんだけど、めんどくさいから、今までgit hubのホームページから直接ぽーいってファイル更新しかしたことなかったから、受け入れることができてない(なんか他の人のファイルとか消しそうで怖い。多分 git mergeが怖いんだと思う。)Mac は homebrew っていう(ディストリビューション的なのが)便利らしい。
    地味に cd hogehoge からのtouch FUGAFUGA.txtみたいな感じでファイル作ったことなかったから、なんかほへーってなった。 あとは, cat でファイルない見るのと, vi FUGAFUGA.txt でviを開いて編集するみたいなそういうのちゃんと知った。(なんかMacのコマンドプロンプトいじる時の魔法の言葉です。https://ktksq.hatenablog.com/entry/mac-customize  )うちの分野で、なんか世の中で役に立ってることあるんですか?って言われた時に、工学の人にはまあカルマンフィルター(カルマンビュシーフィルター)やGPUのメモリの格納の仕方で(Z曲線)とか使われてますとか言ってたけど、
    なんか巡回セールスマン問題の話とかするのワンチャンありか?って最近思った。(これ まあ、でも曲線の一次元ハウスドルフ次元の評価してる話とかするの前提がだるそうだけど。)。まあ、そもそもフラクタル上の確率過程の構成を確率過程の収束の観点で考えてれば、まあ確率測度(確率分布)の収束のこととか使いますとか言えばいいんかなーとかまあ、なんか思った。(まあ、なんでもいいんだけど。)
    4/7 Java久々にやったらlong 型変数にクソデカ数字を入れるときにLつけなきゃいけないことを理解した。これは,
    PythonはGIL(Global Interpreter Lock)がかかるから”クソ!!!!”スレッド並列化で気持ちよくなれません。。。。スレッドが同時にメモリに触れないよう(触れるとメモリを管理してる参照カウントが壊れるらしい)にロックしてるってこと。。。。
    型が確定しないとメモリのサイズが決まらない。

    • レジスタ依存の困る点:
      • Cみたいにレジスタベースだと、CPUごとにレジスタ数や命令セットが違う。
        • x86: eax, ebxとか。
        • ARM: r0, r1とか。
        • MIPS: $t0, $t1とか。
      • 同じコードが別のCPUで動かなくなる。移植性が死ぬ。
      • 例: Cでmov eax, 2って書くと、ARMじゃ動かない。
    • JVMの解決策:
      • 仮想マシン(JVM)を作って、CPUの違いを吸収。
      • スタックベースで統一命令(iconst_2, iadd)を使う。
      • 各デバイスにJVMを実装すれば、バイトコードがどこでも動く。
    2. JVMを使うことにする
    JVMを採用した理由を深掘り:
    • スタックベースの利点:
      • レジスタ依存をなくして、抽象的なスタック操作で計算。
      • max_stackmax_localsでスタックサイズを管理。
      • プラットフォーム非依存で、70億デバイス対応。
    • 安全性:
      • レジスタ直撃だとポインタミスやメモリ破壊が起きやすい(Cの気持ちよさの代償)。
      • JVMはスタックで操作を制限して、不正を防ぐ。
      • JITの役割:
        • スタックベースのバイトコードを、実行時にデバイスごとのマシンコードに変換。
        • 例: iaddadd eax, ebx(x86用)。
      3. あらかじめのメモリ確保、型ガチガチくん
      JVMがスタックベースで動くための仕組み:
      • メモリ確保:
        • 起動時に-Xssでスレッドごとのスタックサイズを確保。
        • -Xms, -Xmxでヒープを確保。
        • .classファイルのmax_stack, max_localsでスタックフレームを計算。
        • あらかじめ決めておくことで、実行時の混乱を避ける。
      • 型ガチガチ:
        • 静的型付けで、コンパイル時に型を確定。
          • int a = 2 + “3”; → エラー。
        • 型が確定しないと、スタックサイズ(intは4バイト、longは8バイト)が決まらない。
        • 安全性も向上(型エラーは実行前に弾く)。

    JITとは: バイトコードをマシンコードに実行時コンパイル。JVMの速度を上げる。

一様収束せず各点収束するRiemann可積分関数の列の収束先の関数は、Riemann可積分なのかについて

タイトル通りです。
一様収束せず各点収束するRiemann可積分関数の列の収束先の関数は、Riemann可積分なのか? これは関数列が一様有界性を持っていても一般には成立しません。
例えば、リーマン可積分ではない物を考える典型的な方法として、(Jordan非可測な集合として有名な)太ったカントール集合を考えましょう(Smith-Volterra-Cantor集合だからSVCと呼ばれています)。
この集合は,

SVCの定義関数に収束させるような連続関数列を次のように作ります。(なんかDirichlet formのfinite energyの定理とか示す時にこういうappx. seq. 使ったような使わなかったような。) $g_n$を

$g_n(x)=Max(0,1-nd(x,C))$

を考えると、関数列$\{g_n\}_{n\in \N}$はSVCの定義関数になっていて一様有界な性質を持ちます。以上により、反例が作れました。

補足1: SVCがRiemann可積分出ないことの証明について、
閉疎集合の補集合は稠密な開集合、スミスーヴォルテラーカントール集合(SVC)は閉疎なことから、 SVCの各点は、SVC集合による定義関数の不連続点になってるはずで、SVCのルベーグ測度正からリーマン可積分性ではないと言えます。
(普通のCantor集合も閉疎ではあるが、ルベーグ測度が$0$なので、うまく反例にならない。←ハウスドルフ次元は1ではない( $\log 2 / \ log 3$ )ではあるけどね。)
勿論、ちゃんと上Riemann和、下Riemann和を計算してもわかるよ!

補足2: 完備距離空間において、f の連続点の集合が稠密であることと、f が高々 1 階級の関数(連続関数の各点収束極限として表される。)であることは、同値である(ベール)。https://w.wiki/DiA6
を使うと, 連続関数列

fn:XRf_n : X \to \mathbb{R}

が各点収束して、収束先

f:XRf : X \to \mathbb{R}

が有界である、つまりf(x)Mfor all xX.|f(x)| \leq M \quad \text{for all } x \in X.

さらに、連続関数 ϕ=arctan\phi = \arctanを合成する場合:fn(x)f(x)各点収束arctan(fn(x))arctan(f(x))各点収束

から、一様有界を持ってもダメなことがわかる.

 

f_n(x) \to f(x) \quad \text{各点収束} \Rightarrow \arctan(f_n(x)) \to \arctan(f(x)) \quad \text{各点収束}

ライフハック

    1. 実は都民か柏市民なら、東大の生協に入れる 初期費用2万4千円で、ずっと1割引で本買える。https://www.utcoop.or.jp/procedures/howtojoin/

都営バスと地下鉄がわかるサイト

https://tobus.jp/sp/blsys/navi

    英語教室 ベストティーチャーとベルリッツ良いらしい

卒業式(学位授与式)後に、移動することがある人はあらかじめ多めに学割証をGETしましょう。(卒業式の日超えると、動かなくなることがある。)

 

LeetCode Coding対策サイト

 

http://yuka.weblike.jp/wp-content/uploads/2025/03/triangle7.pdf

http://yuka.weblike.jp/wp-content/uploads/2025/03/triangle2.pdf

http://yuka.weblike.jp/wp-content/uploads/2025/03/triangle5.pdf

 

                1. *****
                  1. グーグルChromeとかで、

                グラフィック アクセラレーションが使用可能な場合は使用する をオフにすると何かが起きたり起きなかったりする・・・

              “ライフハック” の続きを読む

              Asymptote(3) : フラクタル(4) Diamond fractal

              Diamond fractal (see; http://www.ams.org/books/memo/0932/)

              settings.outformat="pdf";
              unitsize(10cm);
              
              pair[] vertex;
              vertex = new pair[3];
              vertex[0]=(0, 1);
              
              for(int j=1; j<3; ++j) {
              vertex[j]= rotate(120, (0,0))* vertex[j-1] ;
              
              }
              
              path a = vertex[0] -- vertex[1] -- vertex[2] --cycle;
              draw(a,dashed);
              /* dashed*/
              
              pair[] vertex_center;
              vertex_center = new pair[3];
              for(int j=0; j<3; ++j) {
              vertex_center[j]= (1- 0.333333333333333) * vertex[j];
              }
              dot(vertex_center);
              
              pair p = (vertex[0] + vertex[1] + vertex[2])/3;
              
              
              pair[] middle;
              middle = new pair[3];
              
              for(int j=0; j<3; ++j) {
              middle[j]= vertex[j]-p;
              }
              dot(middle);
              
              pair[] vertex_rot;
              vertex_rot = new pair[6];
              for(int j=0; j<6; ++j) {
              if(j<3){
              vertex_rot[j] =vertex[j];
              }else
              vertex_rot[j] = (3*p + vertex_rot[j-3])/4;
              }
              dot(middle);
              
              pair comp (pair a, pair b) {\
              return (dot(a, reflect((0,0),(1,0))*b),cross(reflect((0,0),(1,0))*a,b));
              }
              
              pair[] middle_center;
              middle_center = new pair[6];
              for(int j=0; j<6; ++j) {
              if(j<3){
              middle_center[j]= vertex_center[j];
              }else
              middle_center[j]= vertex_rot[j]+ scale(0.333333333333333)*scale(1/length(middle[j-3]))* comp(comp(middle[j-3],middle[j-3]),reflect((0,0),(1,0))*vertex_rot[j]);
              }
              dot(middle_center);
              
              path b = scale(0.33333333333)*a;
              /*path c = scale(-0.333333333333333)*scale(1/length(middle[j-3]))* comp(comp(middle[j-3],middle[j-3]),reflect((0,0),(1,0))*a); */
              
              
              path[] ver_path;
              ver_path = new path[6];
              ver_path[0] =shift(middle_center[0])*scale(0.33333333333)*a;
              for(int j=1; j<6; ++j) {
              if(j<3){
              ver_path[j] =rotate(120,(0,0))*ver_path[j-1];
              }else
              ver_path[j] = reflect(point(ver_path[j-3],1),point(ver_path[j-3],2))*ver_path[j-3];
              }
              draw(ver_path);
              
              path[][] contra;
              contra = new path[6][6];
              
              for(int j=0; j<6; ++j) {
              for(int i=0; i<6; ++i) {
              if(i<3){
              contra[i][j]= shift(middle_center[i])*scale(0.33333)* ver_path[j];
              }else{
              contra[i][j]= reflect(point(ver_path[i-3],1),point(ver_path[i-3],2))*contra[i-3][j];
              }
              draw(contra[i][j],dashed);
              }
              }
              
              path[][][] contra2;
              contra2 = new path[6][6][6];
              
              for(int k=0; k<6; ++k) {
              for(int j=0; j<6; ++j) {
              for(int i=0; i<6; ++i) {
              if(i<3){
              contra2[i][j][k]= shift(middle_center[i])*scale(0.33333)* contra[j][k];
              }else{
              contra2[i][j][k]= reflect(point(ver_path[i-3],1),point(ver_path[i-3],2))*contra2[i-3][j][k];
              }
              draw(contra2[i][j][k],dashed);
              }
              }
              }
              
              path[][][][] contra3;
              contra3 = new path[6][6][6][6];
              
              for(int l=0; l<6; ++l) {
              for(int k=0; k<6; ++k) {
              for(int j=0; j<6; ++j) {
              for(int i=0; i<6; ++i) {
              if(i<3){
              contra3[i][j][k][l]= shift(middle_center[i])*scale(0.33333)* contra2[j][k][l];
              }else{
              contra3[i][j][k][l]= reflect(point(ver_path[i-3],1),point(ver_path[i-3],2))*contra3[i-3][j][k][l];
              }
              draw(contra3[i][j][k][l],dashed);
              }
              }
              }
              }
              
              path[][][][][] contra4;
              contra4 = new path[6][6][6][6][6];
              
              for(int m=0; m<6; ++m) {
              for(int l=0; l<6; ++l) {
              for(int k=0; k<6; ++k) {
              for(int j=0; j<6; ++j) {
              for(int i=0; i<6; ++i) {
              if(i<3){
              contra4[i][j][k][l][m]= shift(middle_center[i])*scale(0.33333)* contra3[j][k][l][m];
              }else{
              contra4[i][j][k][l][m]= reflect(point(ver_path[i-3],1),point(ver_path[i-3],2))*contra4[i-3][j][k][l][m];
              }
              draw(contra4[i][j][k][l][m],dashed);
              }
              }
              }
              }
              }
              
              path[][][][][][] contra5;
              contra5 = new path[6][6][6][6][6][6];
              
              for(int n=0; n<6; ++n) {
              for(int m=0; m<6; ++m) {
              for(int l=0; l<6; ++l) {
              for(int k=0; k<6; ++k) {
              for(int j=0; j<6; ++j) {
              for(int i=0; i<6; ++i) {
              if(i<3){
              contra5[i][j][k][l][m][n]= shift(middle_center[i])*scale(0.33333)* contra4[j][k][l][m][n];
              }else{
              contra5[i][j][k][l][m][n]= reflect(point(ver_path[i-3],1),point(ver_path[i-3],2))*contra5[i-3][j][k][l][m][n];
              }
              draw(contra5[i][j][k][l][m][n]);
              }
              }
              }
              }
              }

              Asymptote(3) : フラクタル(3) Six Carpet

              Six Carpet

              settings.outformat="pdf";
              unitsize(10cm);
              pair p1=(0, -1), p2 = (0.8660254037844, -0.5), p3 =(0.8660254037844, 0.5), p4 = (0, 1), p5 = (-0.8660254037844, 0.5), p6 = (-0.8660254037844, -0.5) ;
              path a = p1 -- p2 -- p3 -- p4 -- p5 -- p6 --cycle;
              draw(a, dashed);
              /* draw(rotate(60)*a, purple);*/ /*Rotate 60degrees*/
              /* pair q_1 = (-0.321358865654623, -0.36561928865444946);*/
              
              path b= scale(0.25)*a;
              /* draw(b,red +dashed); */
              
              pair q1 = scale(0.75) * p1;
              draw(q1);
              path b1= shift(q1)*b;
              
              pair q2 = scale(0.75) * p2;
              draw(q2);
              path b2= shift(q2)*b;
              
              pair q3 = scale(0.75) * p3;
              draw(q3);
              path b3= shift(q3)*b;
              
              
              pair q4 = scale(0.75) * p4;
              draw(q4);
              path b4= shift(q4)*b;
              
              pair q5 = scale(0.75) * p5;
              draw(q5);
              path b5= shift(q5)*b;
              
              pair q6 = scale(0.75) * p6;
              draw(q6);
              path b6= shift(q6)*b;
              
              pair d1 = (-0.21650635094,-0.375);
              draw(d1);
              path e1= shift(d1)*b;
              
              pair d2 = (0.21650635094,-0.375);
              draw(d2);
              path e2= shift(d2)*b;
              
              pair d3 = (0.4330127018922,0);
              draw(d3);
              path e3= shift(d3)*b;
              
              pair d4 = (0.21650635094,0.375);
              draw(d4);
              path e4= shift(d4)*b;
              
              pair d5 = (-0.21650635094,0.375);
              draw(d5);
              path e5= shift(d5)*b;
              
              
              pair d6 = (-0.4330127018922,0);
              draw(d6);
              path e6= shift(d6)*b;
              
              path[] pre;
              pre = new path[12];
              
              path[] intersect= {b1, b2, b3, b4, b5,b6, e1, e2,e3, e4, e5, e6};
              pair[] fixedpoint = {p1, p2, p3, p4, p5,p6};
              pair[] col = {q1, q2, q3, q4, q5,q6, d1, d2, d3, d4, d5,d6};
              
              for(int j=0; j<12; ++j) {
              pre[j]= scale(0.25)* intersect[j];
              
              }
              /* draw(pre[j],red+dashed); */
              
              path[][] contra;
              contra = new path[12][12];
              
              for(int j=0; j<12; ++j) {
              for(int i=0; i<12; ++i) {
              contra[i][j]= shift(col[i])* pre[j];
              
              }
              }
              /* draw(contra[i][j],dashed);fill(contra[i][j]); */
              
              pen[] color = {paleblue, palegreen, paleyellow, palecyan,palered, palemagenta};
              color.cyclic=true;
              
              
              path[][][] contra_contra;
              contra_contra = new path[12][12][12];
              
              for(int k=0; k<12; ++k) {
              for(int j=0; j<12; ++j) {
              for(int i=0; i<12; ++i) {
              contra_contra[i][j][k] = shift(col[i])*scale(0.25)*contra[j][k] ;
              draw(contra_contra[i][j][k]);
              }
              }
              }
              /*draw(contra_contra[3][3][0],red); draw(contra_contra[i][j][k]); fill(contra_contra[i][j][k], color[j]);*/

              Asymptote(3) : フラクタル(2) Sierpinski Gasket

              Sierpinski GasketをAsymptoteでかいたソースコードを見かけないので置いておくことにしました.

               

              settings.outformat="pdf";
              unitsize(10cm);
              
              pair[] vertex;
              vertex = new pair[3];
              vertex[0]=(0,1);
              for(int j=1; j<3; ++j) {
              vertex[j]= rotate(120, (0,0))* vertex[j-1] ;
              
              }
              
              path a = vertex[0] -- vertex[1] -- vertex[2] --cycle;
              draw(a,dashed);
              /* dashed*/
              
              pair[] vertex_center;
              vertex_center = new pair[3];
              for(int j=0; j<3; ++j) {
              vertex_center[j]= (1- 0.5) * vertex[j];
              }
              dot(vertex_center);
              
              
              path b= scale(0.5)*a;
              /* draw(b,dashed); */
              
              
              path[] ver_path;
              ver_path = new path[3];
              
              for(int j=0; j<3; ++j) {
              ver_path[j]= shift(vertex_center[j])*b;
              draw(ver_path[j],dashed);
              }
              /* */
              
              path[] pre;
              pre = new path[3];
              
              for(int i=0; i<3; ++i){
              pre[i]= scale(0.5)*ver_path[i];
              }
              
              
              path[][] contra;
              contra = new path[3][3];
              
              for(int j=0; j<3; ++j) {
              for(int i=0; i<3; ++i) {
              contra[i][j]= shift(vertex_center[i])* pre[j];
              draw(contra[i][j],dashed);
              }
              }
              
              path[][][] contra_contra;
              contra_contra = new path[3][3][3];
              
              for(int j=0; j<3; ++j) {
              for(int i=0; i<3; ++i) {
              for(int k=0; k<3; ++k){
              contra_contra[i][j][k]= shift(vertex_center[i])*scale(0.5)* contra[j][k];
              draw(contra_contra[i][j][k],dashed);
              }
              }
              }
              
              path[][][][] contra_3;
              contra_3 = new path[3][3][3][3];
              
              for(int j=0; j<3; ++j) {
              for(int i=0; i<3; ++i) {
              for(int k=0; k<3; ++k){
              for(int l=0; l<3; ++l){
              contra_3[i][j][k][l]= shift(vertex_center[i])*scale(0.5)* contra_contra[j][k][l];
              draw(contra_3[i][j][k][l],dashed);
              }
              }
              }
              }
              
              path[][][][][] contra_4;
              contra_4 = new path[3][3][3][3][3];
              
              for(int j=0; j<3; ++j) {
              for(int i=0; i<3; ++i) {
              for(int k=0; k<3; ++k){
              for(int l=0; l<3; ++l){
              for(int m=0; m<3; ++m){
              contra_4[i][j][k][l][m]= shift(vertex_center[i])*scale(0.5)* contra_3[j][k][l][m];
              draw(contra_4[i][j][k][l][m],dashed);
              }
              }
              }
              }
              }
              
              path[][][][][][] contra_5;
              contra_5 = new path[3][3][3][3][3][3];
              
              for(int j=0; j<3; ++j) {
              for(int i=0; i<3; ++i) {
              for(int k=0; k<3; ++k){
              for(int l=0; l<3; ++l){
              for(int m=0; m<3; ++m){
              for(int n=0; n<3; ++n){
              contra_5[i][j][k][l][m][n]= shift(vertex_center[i])*scale(0.5)* contra_4[j][k][l][m][n];
              fill(contra_5[i][j][k][l][m][n],dashed);
              }
              }
              }
              }
              }
              }

              Gnuplot_pythonでフラクタル

              Rotated Sierpinski Gasket のソースコード

              参考( ↓はSierpinski Gasketのソースコードが載っている. ):

              https://qiita.com/okakatsuo/items/f2e79fc501ed9f799734

              https://qiita.com/physics303/items/5d4fb4708fe72ba48fb0

              # -*- coding: utf-8 -*-
              #sierpinskigasket.py
              import numpy as np
              
              
              # ベクトル回転関数
              # deg=Falseならばラジアンで角度を指定
              # deg=Trueならば度数単位で角度を指定
              def rotation_o(u, t, deg=False):
              
              # 度数単位の角度をラジアンに変換
              if deg == True:
              t = np.deg2rad(t)
              
              # 回転行列
              R = np.array([[np.cos(t), -np.sin(t)],
              [np.sin(t), np.cos(t)]])
              
              return np.dot(R, u)
              
              maxlevel = 8 #再帰の回数
              
              def gasket(x10, y10, x20, y20, x30, y30, level):
              if level == maxlevel:
              print(x10, y10)
              print(x20, y20, "\n")
              print(x20, y20)
              print(x30, y30, "\n")
              print(x30, y30)
              print(x10, y10, "\n")
              return
              else:
              x11, y11 = (x20+x30)/2.0, (y20+y30)/2.0
              x21, y21 = (x30+x10)/2.0, (y30+y10)/2.0
              x31, y31 = (x10+x20)/2.0, (y10+y20)/2.0
              
              x12, y12 = (4* x11 + 1* x21)/5, (4* y11 + 1* y21)/5
              x22, y22 = (4* x21 + 1* x31)/5, (4* y21 + 1* y31)/5
              x32, y32 = (4* x31 + 1* x11)/5, (4* y31 + 1* y11)/5
              # print(x12, y12)
              # print(0, 0, "\n")
              print(x12, y12)
              print(x22, y22, "\n")
              print(x12, y12)
              print(x32, y32, "\n")
              print(x22, y22)
              print(x32, y32, "\n")
              gasket(x10,y10, x31, y31, x21, y21, level + 1)
              gasket(x31,y31, x20, y20, x11, y11, level + 1)
              gasket(x21,y21, x11, y11, x30, y30, level + 1)
              
              gasket(x12,y12, x22, y22, x32, y32, level + 1)
              
              x10, y10, x20, y20, x30, y30, level = 0.0, 0.0, 1.0, 0.0, 0.5, 1.0, 0
              gasket(x10, y10, x20, y20, x30, y30, level)