hooked on mechatronics

いつまで経っても初心者

MATLABの最適化関数(fmincon)の高速化Tips

はじめに

この記事は MATLAB/Simulink Advent Calendar 2023 のシリーズ2の 3 日目の記事です .

はじめまして,hook(@hookedonmas)といいます.某機械メーカーで自動化に関する研究開発をしている社会人一年目です. どうぞよろしくお願いします. 今回は,2年前に書いて下書きとして眠っていたものを,せっかくの機会なので掘り出してきました.

続きを読む

33000円のメモリ8GB中華PCを買ってUbuntu環境を作った

laptop PC

Amazoにて3万3千円で「CHUWI GemiBook Pro」を購入しました。
スペックは以下の様なもので、3万3千円とは思えないスペックです。
サーバに ssh 接続してコーディングするために買いましたが、今のところかなり快適で、買って正解でした。
こちらで詳しくレビューされています。

CPU: Intel Celeron N5100
メモリ: LPDDR4X 8GB
OS: Windows 11 容量: 256GB SSD

ポート: USB-A 3.0 x 1, type-C 3.0 x 1, Micro SD x 1
配列: US配列
重量: 1.5kg
ディスプレイ: 14 inch
解像度: 2160x1440

調べていると、オーディオ入出力関連でうまくいかないケースをいくつか見かけましたが、
それ以外は特に問題なさそうです。

OS

元々 WIndows 11 がインストールされていましたが、WIndows だと動きが重いので、
Ubuntu フレーバの中でも最も軽快に動作する「Lubuntu」をインストールしました。
主に以下のサイトを参考にしました。

www.kkaneko.jp

日本語切り替え設定

US配列なので、デフォルトでは日本語切り替えができませんが、
以下のサイトに従って Fcitx を使えば日本語を入力することができるようになりました。

neos21.net

ブラウザ

ブラウザを Vivaldi などの軽量なものにするのも検討しましたが、とりあえずChromeを使っています。
タブを10個くらい開いて作業しても、サクサク動いています。
この記事もこのパソコンを使って書いていますが、30万円くらいのメインPCと正直変わりません。

実際に使った感想

Chrome を開いて調べながら Visual Studio Codessh 接続してコードを書いていますが、
特に重いと感じることはないです。

ローカルで重い処理をするにはスペックが足りないかもしれませんが、
調べものだけする場合や ssh でサーバに接続して開発する分には十分だと思います。

各確率分布に従う確率変数の4次までのモーメントとその計算方法およびプログラム

各確率分布に従う確率変数の4次までのモーメント

二項分布 B(n,p)

次数 モーメントE[Xn] 中心モーメントE[(X-E[X])n]
1次
2次
3次
4次

ポアソン分布

次数 モーメントE[Xn] 中心モーメントE[(X-E[X])n]
1次
2次
3次
4次

正規分布

次数 モーメントE[Xn] 中心モーメントE[(X-E[X])n]
1次
2次
3次
4次

ガンマ分布

次数 モーメントE[Xn] 中心モーメントE[(X-E[X])n]
1次
2次
3次
4次

n次モーメントの計算方法

 n 次モーメントは,確率変数  X積率母関数  M_X(t)=E[e^{tX}] n微分 t=0 を代入した値である(参考:積率母関数).
また, n 次の中心モーメントは

により, 1,\cdots,n 次モーメントから計算できる(二項定理).

プログラムによる計算

以上の計算方法を,MATLABのSymbolic Math Toolboxによって計算します.pythonのSymPyなどでも同様に計算できると思います.
以下はポアソン分布を例として用います.ポアソン分布の積率母関数  M_X(t)

であることを用いています.

他の分布についても,「変数の定義」と「積率母関数の定義」の部分を変更するだけで,モーメントを計算することができます.

%% 定義・初期化
% 変数の定義
t = sym('t');
la = sym('lambda');

% 求めるモーメントの次数の最大
n = 4;

% モーメントと中心モーメントを格納する変数の初期化
M_list = sym('M_list', [n, 1]);
central_M_list = sym('center_M_list', [n, 1]);

% 積率母関数の定義
syms M(t)
M(t) = exp(la*(exp(t)-1));

%% モーメント・中心モーメントの計算
for order = 1:n

    % order次モーメントの計算
    M_list(order) = subs(diff(M, order), t, 0);

    % order次の中心モーメントの計算
    if order == 1

        central_M_list(order) = M_list(1);

    else 

        % シグマ計算
        sum = 0;

        for k = 0 : order-1
    
            sum = sum + (-1)^k * nchoosek(order, k) * M_list(order - k) * M_list(1)^k;
    
        end

        sum = sum + (-1)^order * M_list(1)^order;
    
        % 結果を格納
        central_M_list(order) = sum;

    end

end

%% 結果の表示
disp("Moment")
disp(simplify(M_list))
disp("Central moment")
disp(simplify(central_M_list))

英語が苦手でも画像生成AIで思い通りの絵を出力するコツ

はじめに

翻訳サイトを使っても,思い通りの絵を出力できていない方は多いのではないでしょうか.
おそらく原因は"英語力"だけではなく,想像を言語に変換するための"語彙力"が足りていないことだと思います.
かく言う私もそのうちの一人ですが,上手く出力できている人の英語に共通する,
「AIが理解しやすい文型」と「絵を思い通りに描画するための語彙」があったので共有します.

midjourneyを念頭に置いていますが,他のツールに対しても考え方は同じです.

AIが理解しやすい文型

以下の文型に従います.

A/An [絵の種類] of [対象] in/under/at [場所・雰囲気] in [画風]

どうしても英語が苦手だと形容詞や名詞を羅列してしまいますが,
こちらの文型では文が構造化されているので,AIが理解しやすいのだと思います(『理科系のための英文作法―文章をなめらかにつなぐ四つの法則』を参照).

絵を思い通りに描画するための語彙

必要に応じて,DeepLやGoogle翻訳であなたの欲しい単語を調べてください.
以下は,「より詳しく描写できるように語彙を与えること」と「インスピレーションを促すこと」を目的とします.
こちらにも体系化こそされていませんが,便利な英単語をパワーワードとして紹介されています.

絵の種類

「絵の種類」は以下の形で書かれます.

[形容詞] + [名詞]

名詞

よく使うものを以下に示します.

  • anime(アニメ)
  • painting(絵画)
  • photograph(写真)
  • oil painting(油彩画)
  • watercolor painting (水彩画)
  • sticker(ステッカー)
  • sculpture(彫刻)
  • black and white ink sketch (白黒のインクスケッチ)
  • pencil Sketch(鉛筆画)

他には,こちらに沢山記述されています.

形容詞

  • simple(シンプルな)
  • detailed(細かい)
  • 4k(解像度が4kということ)
  • simple yet detailed(シンプルでありながら緻密な)
  • modern(現代の)

他には,cyberpunk(サイバーパンク風の), surreal(非現実的な), ancient(古代の), futuristic(未来派の), retro(レトロな), realistic(リアルな), dreamlike(夢のような), funk art(ファンク・アート), pop art(ポップアートの), vaporwave(ヴェイパーウェイヴの), psychedelic(サイケデリックサイケデリック), abstract(抽象的な), impressionistic(印象派の), minimalistic(最小限主義的な)などがあります.
知らない単語でも試してみると,面白い結果になったりします.

対象

これに関しては,おそらく思い描いているものがあると思いますので,DeepLなどで調べてもらうのがいいと思います.
ただし,思い描いている対象を,AIと伝言ゲームをするようなイメージで詳しく描写して,翻訳することを意識してください.
例えば,かわいいパンダのイラストを想像して "panda" と入力しても,リアルなパンダが出力されます.
この場合,単純に "cute panda" とするだけでも,出力結果はかなり変わってきます.

場所・雰囲気

こちらも,おそらく思い描いているものがあると思います.念のため,よく用いられるものを以下に示します.

  • under the sea(海の中で)
  • in the sky(空の下で)
  • in the dark(暗闇の中で)

画風

こちらが,midjorneyの面白さの一つでもあります.
以下の "..." に,好みの芸術家・漫画(家)・アニメ・ゲーム・映画(監督)などを埋めてください.

  • in the style of …
  • in … style
  • by …

例を示します.

他のコツ

最後に今回紹介したもの以外に,個人的に面白い,便利だと思ったコツやアイデアを紹介します.

積極的に検索する

先人に学ぶのは,どのシチュエーションでも重要です.
一度出力したい対象について検索してから,文を作ると少ない試行回数で思い通りの絵を出力できます.

写真加工アプリを使う

出来上がった写真の明るさや色合いを変えるために,写真加工・編集アプリを使うと便利です.
ハードルが高そうですが,私はiPhoneの機能を使って加工しています.
私は完全な素人ですが,直感的に色合いを変更でき,非常に便利です.

顔交換アプリ(ディープフェイク)を使う

世界的に有名でない限り,特定の人の肖像画を出力してもらうのは難しいですが,
一旦別の人で出力しておいて,顔交換アプリで顔を置き換えるというアイデアです.
画風が現実的でないと難しいかもしれませんが,試してみると面白いです.

/imagine にパラメータを与える

--s や --uplight,--noがあまり使われていない割に面白く便利です.

参考サイト

日本語

英単語や/imagineオプションについて紹介されています.こちらも読んでみることをお勧めします.

note.com

使い方を詳しく説明されています.

trpg-japan.com

英語

たくさんの情報量を含んでいます.主に肖像画に焦点を当てていますが,とても勉強になります.

www.betchashesews.com

midjourney公式のTipsです.

github.com

midjourney公式のためになるリンク集です.

github.com