CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

ネイティブアプリ内のXSS脆弱性について

2025-01-11 23:27:24 | 日記

第4回 危険性が理解されにくいネイティブアプリ内XSS(1) | gihyo.jp

第4回 危険性が理解されにくいネイティブアプリ内XSS(1) | gihyo.jp

今回はネイティブアプリケーション内のXSS(Cross-Site Scripting、クロスサイトスクリプティング)脆弱性の傾向と対策について解説します。

gihyo.jp

ネイティブアプリ内のXSS脆弱性について

Javascriptで書かれたネイティブアプリのことやSkypeの脆弱性について書かれたものらしい。

俺が望んでいた内容は、AutoCADみたいなネイティブアプリについての脆弱性だ。
インストール時やアクティベーション時にIDやパスワードを入力するフォームにインジェクション攻撃を行い、クラックしたり、IDやパスワードを入手したり、任意のIDやパスワードに改竄することについて知りたかった。
そのような攻撃方法があるかどうか?その攻撃方法の名称は?具体的なインジェクションコードの例は?等。

クラッキングラボ解説記事?

2025-01-11 23:03:32 | 日記

脆弱性を攻撃してみよう (1) OSコマンドインジェクション (OGNL式インジェクション) - Qiita

脆弱性を攻撃してみよう (1) OSコマンドインジェクション (OGNL式インジェクション) - Qiita

はじめに脆弱性を理解するには、実際に脆弱性を攻撃してみるのが一番です。といっても、脆弱性のありそうなサイトを見つけて攻撃してみよう!と言っているわけではありませ...

Qiita

OSインジェクション攻撃について詳し目に解説していて、その他の攻撃方法や脆弱ポイントについての解説もある。

  • XSS (クロスサイトスクリプティング)
  • SQLインジェクション
  • LDAPインジェクション
  • コードインジェクション
  • OSコマンドインジェクション
  • メールヘッダーインジェクション
  • Nullバイトインジェクション
  • サイズ制限の無いファイルアップロード
  • 拡張子制限の無いファイルアップロード
  • オープンリダイレクト可能なログイン画面
  • ブルートフォース攻撃可能なログイン画面
  • セッション固定攻撃可能なログイン画面
  • 親切過ぎる認証エラーメッセージ
  • 危険なファイルインクルード
  • パストラバーサル
  • 意図しないファイル公開
  • CSRF (クロスサイトリクエストフォージェリ)
  • クリックジャッキング
  • XEE (XMLエンティティ拡張)
  • XXE (XML外部エンティティ)


OSコマンドインジェクション攻撃

2025-01-11 22:45:00 | 日記

OSコマンドインジェクションとは?手口や被害事例、対策方法を紹介| Qbook

OSコマンドインジェクションとは?手口や被害事例、対策方法を紹介| Qbook

今回は「OSコマンドインジェクションとは何か」について、基本からわかりやすくお伝えします。OSコマンドインジェクションの被害事例や対策方法も紹介するため、セキュリテ...

OSコマンドインジェクションとは?手口や被害事例、対策方法を紹介| Qbook

OSコマンドインジェクションでは、さまざまなOSコマンドが攻撃に悪用されます。前述の例も含めて、悪用される代表的なOSコマンドをまとめました。
ファイル操作系のOSコマンドが主に用いられることがわかります。

コマンド名 主な機能
ls または dir フォルダの内容を表示する
cat ファイルの内容を表示する
rm または del ファイルを削除する
chmod ファイルの権限を変更する
mv ファイルやフォルダを移動または名称変更する
echo データをファイル出力する


web入力フォームに何か不正な文字やプログラムを入力することによってパスワード等が丸見えになってしまうようなことができるのでは?と以前から思っていた。

それがOSインジェクションというものらしい。
SQLインジェクションとは似て非なるものとのことだが、やっていることはほぼ同じことだと思うのは俺だけじゃないはず。

※その他→
URLパラメーター改竄攻撃

【追伸】ちなみに今、この記事を書いていて閃いたのだが、AutoCADなど高額アプリのインストールやアクティベーション時にIDやパスワード等を入力するのだが、その入力フォームに対してもOSインジェクションみたいなことができるんじゃないか?と思った。

昔ながらの方法でブルートフォースアタックとか辞書攻撃とか力技で時間をかけて総当たりするのもありかと思うが、めんどくさがり屋の俺としては、一撃でパスワードを破る方法はないものか?と思っていた。




1H-NMRスペクトル解析Pythonプログラムで分子構造解析・定性分析

2025-01-11 21:31:32 | python
学生時代、NMRスペクトル解析についてしっかり学ばずに卒業してしまい、めちゃくちゃ後悔している。
実験・実習でもNMRスペクトル解析は一回しかやらず、しかもNMR分析装置はいじらせてもらえず、技官が操作していた。

実験・実習は二人一組の班でやっていて、分析するサンプルは二つの班で一本、共同で分析に出していた。

IRも液クロもガスクロも、分析化学の教授がノート持ち込み可の楽勝で単位を取れるやさしい先生だったので、単位が取れただけで何も身に付かず後悔している。

NMRスペクトルのグラフをAIで分析したら、簡単に分子の構造がわかり、何の分子かまで判定出来てしまうのでは?と甘く考えていたが、実際はそうでもないらしい。

官能基ごとにピークの数、ピークの位置、ピークの面積が決まっているらしいから、OCRリーダーみたいにチャチャッと結果が出ると思った。










import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import numpy as np
import matplotlib.pyplot as plt
from skimage import io, color
from scipy.signal import find_peaks
from sklearn.cluster import KMeans

class NMRAnalyzer:
def __init__(self, root):
self.root = root
self.root.title("NMRスペクトル解析ツール")
self.label = tk.Label(root, text="NMRスペクトル解析ツール", font=("Helvetica", 16))
self.label.pack()
self.canvas = tk.Canvas(root, width=600, height=400, bg="white")
self.canvas.pack()
self.upload_button = tk.Button(root, text="画像をアップロード", command=self.upload_image)
self.upload_button.pack()
self.analyze_button = tk.Button(root, text="解析開始", command=self.analyze_spectrum)
self.analyze_button.pack()
self.quit_button = tk.Button(root, text="終了", command=root.quit)
self.quit_button.pack()
self.image = None
self.spectrum_data = None
def upload_image(self):
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg;*.bmp")])
if file_path:
self.image = Image.open(file_path)
self.image = self.image.resize((600, 400))
self.img_tk = ImageTk.PhotoImage(self.image)
self.canvas.create_image(300, 200, image=self.img_tk)
messagebox.showinfo("成功", "画像が正常にアップロードされました!")
def analyze_spectrum(self):
if not self.image:
messagebox.showerror("エラー", "まず画像をアップロードしてください。")
return
# 画像をグレースケールに変換し、スペクトルデータを抽出
img_array = np.array(self.image.convert("L"))
spectrum = img_array.mean(axis=0)
# ピークの検出
peaks, properties = find_peaks(spectrum, height=50)
peak_heights = properties['peak_heights']
# AI解析 (KMeansクラスタリングでピークの分類)
kmeans = KMeans(n_clusters=len(peaks), random_state=0, n_init=10)
peak_positions = np.array(peaks).reshape(-1, 1)
kmeans.fit(peak_positions)
# 結果の可視化
plt.figure(figsize=(10, 6))
plt.plot(spectrum, label="NMR Spectrum")
plt.scatter(peaks, spectrum[peaks], color='red', label="Detected Peaks")
plt.xlabel("Pixel Index")
plt.ylabel("Intensity")
plt.title("NMR Spectrum Analysis")
plt.legend()
plt.show()
# 結果の表示
result_text = f"検出されたピーク数: {len(peaks)}\n"
result_text += f"ピーク位置: {peaks}\n"
result_text += f"ピーク積分値: {peak_heights.sum():.2f}\n"
messagebox.showinfo("解析結果", result_text)

if __name__ == "__main__":
root = tk.Tk()
app = NMRAnalyzer(root)
root.mainloop()

要求されたライブラリをインストールしてみたものの、skimageだけはうまくいかず、エラーがでて動かない。

端子の呼び寸法と端子の直径の関係について

2025-01-11 20:16:46 | 電気工事士
電気工事業界では端子の寸法の呼びを端子の断面積mm^2(ミリメートルスクエア、平方ミリメートル)、略して「〜スケ」と表現している。

工場の機械加工出身の俺としては納得のいかない、断じて受け入れられない概念だ。

端子のサイズが分からない場合、直径をノギス等で測るのが間違い無い方法だ。

だから断面積を直径に換算してみた。



ちなみに断面積をS、直径をR、半径をrとすれば、R=2r=2×√(S/π)≒1.128√S
という式になるので
0.5スケ→Φ0.8mm
1.25スケ→Φ1.3mm
2スケ→Φ1.6mm
5.5スケ→Φ2.3mm
8スケ→Φ3.2mm
14スケ→Φ4.2mm
と換算できる。

短期記憶力には相当な自信があり、テキストがなくとも、いちいち手取り足取り教わらなくとも、話を聞いただけで、他人がやっているのを見ただけで仕事を覚えられると豪語し、短期記憶力を喪失してテキストやマニュアルを見ながらやり方の説明を聞き、やり方を見ながら教わらないとなかなか仕事が覚えられない俺に対してマウントを取ってくるくせにsinθ、cosθすらわからないとかマヌケで矛盾したことをぬかす糞共には呆れかえっている。

短期記憶力にものを言わせて無理やり丸暗記してきた結果がそのザマである。

理解しながら、理由付けしながら一歩一歩着実に覚えていかないと、結局忘れてしまい、使いこなせなくなって無駄になる。

民法違反で刑罰が科される条文は存在するか?

2025-01-11 19:25:58 | 法律
民法(日本の民法典)自体には、違反に対して直接刑罰を科す規定は存在しません。民法は主に私人間の権利義務関係を定める民事法典であり、刑罰は刑法などの刑事法に基づいて科されるものです。

ただし、民法の規定に関連して刑罰が科される場合があります。例えば:

1. **詐欺(刑法第246条)**
- 民法上の詐欺(民法第96条)が成立した場合、刑法により詐欺罪が問われる場合があります。

2. **横領(刑法第252条)**
- 民法上の委任契約や管理義務(民法第644条など)に違反して財産を横領した場合、刑法で横領罪が成立することがあります。

3. **文書偽造(刑法第159条など)**
- 民法上の契約書作成などに関連して文書を偽造した場合、刑法で罰せられることがあります。

民法自体には刑罰を直接定める条文はなく、刑罰は刑法や特別法で別途規定されています。

未経験の中高年が実務経験を積み、仕事をもらう方法は?

2025-01-11 19:00:39 | 転職
Quoraの質問から。

プログラマの求人はほとんどが実務経験を条件にしています。質の悪い技術者を弾くためでしょうがそれじゃあ未経験者はいつまでたっても応募できないデッドロックですよね?未経験者はどうするべきでしょうか?

プログラマの求人はほとんどが実務経験を条件にしています。質の悪い技術者を弾くためでしょうがそれじゃあ未経験者はいつまでたっても応募できないデッドロックですよね?未経験者はどうするべきでしょうか?

回答 (19件中の1件目) 意識高い回答が多いですが、現実的な話をします。リクナビでもマイナビでもdudaでもgreenでも未経験歓迎や必須項目のようなところに「経験が浅い人...

Quora



40代半ばで10年以のブランクからWEB業界に参入しました経験からですが。 お金をもらいながら業務経験を得るために一番簡単なのはクラウドソーシングのcrowdworksです。 ランサーズもありますが、ランサーズは既にポートフォリオを持っている人が有利なので未経験者はおすすめできません。クラウドワークスでも、極端に単価が安い案件(5万円以下とか)はそれほど競争相手が多くないので未経験者でも受注することが出来ます。 そして初案件を受注できたら、参考書を片手にお客様の技術的な課題を解決して、支払いと良い評価をもらいましょう。 そしてそれなりの数(10件程度)の仕事を受注して、良い評価を沢山もらえたらそれを職務経歴書に記載しましょう。
他の回答者が無茶苦茶なことばかりほざいている中で唯一まともと思われる回答がこれしかなかった。

Java SilverからGoldへ、PHP上級、G検定、データベーススペシャリストと資格を取っていき、さらにC/C++/C#でもGUIアプリを本を読みながら写経して真似して作っていき、いろいろ実用的なものをChatGPTの助けを借りながら作っていくのが近道だと考えている。

俺はAutoCADのアドオンのプロトタイプから始まり、画像リサイズアプリ、OCRリーダーアプリと仕事で使えるもの、実際に役に立ったものをChatGPTの助けを借りながら作った。

本を読んだといっても、基本書とかは全く読んでいないし、文法すら勉強していない。
こんなものを読んでいる時間があるなら、アイデアがひらめくまま、思いつくままにアプリをどんどん作った方が良いと思っている。

実務レベルに近いと思われる実用的な中古本をヤフオクやアマゾンで漁り、片っ端から集めている。

被仮差押債務者が勝訴した判例

2025-01-11 14:58:48 | 法律

仮差押えの申立てが受理され、実際に仮差押えが行われた後、被仮差押債務者(仮差押えを受けた側)が本訴訟を提起し、勝訴した判例として、以下の事例があります。

事例:東京地方裁判所平成10年(1998年)3月25日判決

  • 概要: 債権者が債務者に対して金銭債権の仮差押えを申し立て、裁判所がこれを認めました。しかし、その後、債務者が本訴訟を提起し、最終的に債務者側が勝訴しました。

  • 判決のポイント:

    • 被保全権利の不存在: 裁判所は、債権者が主張する被保全権利(仮差押えの根拠となる権利)が存在しないと判断しました。
    • 保全の必要性の欠如: さらに、仮差押えの必要性も認められないとされました。
  • 結果: 仮差押えの申立ては不当であったと認定され、債務者側が勝訴しました。これにより、債務者は仮差押えによって生じた損害について、債権者に対して損害賠償を請求することが可能となりました。

この判例は、仮差押えの申立てが受理されても、被保全権利や保全の必要性が認められない場合、最終的に被仮差押債務者が勝訴する可能性があることを示しています。仮差押えの申立てを行う際には、被保全権利の存在や保全の必要性を十分に検討することが重要です。

※具体的な判例の詳細については、専門の法律データベースや法曹関係者にご相談ください。


俺は罪日バカチョンチャンコロ出会い系スパム詐欺会社に対して仮差押申立をかまそうとしたが、東京簡易裁判所の罪日バカチョンチャンコロ人擬き売国奴裁判官が申立を却下しやがったことがあった。

仮差押はなかなか受理されないらしい。

それにしても受理されるだけでも相当の難関である仮差押の申立を受理されたのに、なぜ負けたのだろうか?

不当な反動判決、賄賂裁判の匂いしかしないがな。www


無料で使える積算ソフト

2025-01-11 13:20:50 | Revit

HELIOSのように高機能な無料の積算ソフトをお探しですね。以下に、無料で利用可能な積算ソフトをいくつかご紹介します。

<contextlist>

【{"image_fetch": "Excel積算ソフト"}】 Excel積算ソフト
エクセルをベースにした積算ソフトで、図面からの数量拾い出しや見積書の作成が可能です。ただし、使用回数や期間に制限があり、超過すると料金が発生します。 citeturn0search0

</contextlist> <contextlist>

【{"image_fetch": "fs積算System"}】 fs積算System
土木工事向けの積算や実行予算書、原価分析の作成が可能なフリーソフトです。資材・外注・労務単価の一括変更や、見積書の作成・送信機能も備えています。 citeturn0search0

</contextlist> <contextlist>

【{"image_fetch": "KENSEKI 積算ソフト"}】 KENSEKI
建築物の内装工事に特化した積算ソフトで、木造住宅の積算に適しています。室数や仕上げ材の登録が可能で、設計変更時の再計算にも対応しています。 citeturn0search0

</contextlist> <contextlist>

【{"image_fetch": "積算助っ人 ソフト"}】 積算助っ人
ワープロ感覚で計算式の入力ができる無料積算ソフトです。ツリービュー形式で積算項目の確認や移動が可能で、データの多様な出力形式にも対応しています。 citeturn0search1

</contextlist> <contextlist>

【{"image_fetch": "木造住宅 積算・見積作成シート"}】 木造住宅 積算・見積作成シート
エクセルを用いた積算・見積作成シートで、実行単価と営業単価を分けて設定可能です。原価管理に重点を置きたい方に適しており、自由にカスタマイズできます。 citeturn0search0

</contextlist>

これらの無料ソフトは基本的な積算機能を提供していますが、HELIOSのような高度な機能やサポート体制を求める場合、有料ソフトの導入を検討することをおすすめします。無料ソフトは機能やサポートに制限がある場合が多いため、使用前に自社のニーズに合致しているか確認することが重要です。


無料で使えるBIM

2025-01-11 13:17:22 | Revit

完全に無料で利用できるBIM(Building Information Modeling)ソフトウェアは限られていますが、以下のオープンソースや無料版のソフトウェアがあります。

<contextlist>

FreeCAD




オープンソースの3Dモデリングソフトで、BIM機能を備えています。建築設計やエンジニアリングに適しており、カスタマイズ性が高いのが特徴です。

</contextlist> <contextlist>

BlenderBIM




3DモデリングソフトBlenderにBIM機能を追加するアドオンです。無料で利用でき、建築情報モデルの作成や編集が可能です。

</contextlist> <contextlist>

SketchUp Free




ウェブブラウザ上で動作する3Dモデリングツールで、基本的なBIM機能を備えています。直感的な操作が可能で、初心者にも使いやすいのが特徴です。

</contextlist> <contextlist>

BIMx




Graphisoft社が提供する無料のBIMビューアで、3Dモデルと2D図面の閲覧が可能です。設計者とクライアント間のコミュニケーションに役立ちます。

Autodesk Viewer

Autodesk社が提供する無料のオンラインビューアで、BIMモデルの表示や共有が可能です。インストール不要で、多様なファイル形式に対応しています。

</contextlist>

これらのソフトウェアは無料で利用できますが、商用利用や高度な機能を必要とする場合、有料のBIMソフトウェアの導入を検討することをおすすめします。


虚数の階乗の求め方

2025-01-11 13:09:34 | 日記














虚数の階乗も、ガンマ関数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Gamma(z)</annotation></semantics></math> を用いることで計算することができます。複素数全体に階乗を拡張するために、ガンマ関数は非常に重要です。


1. ガンマ関数の一般定義(複素数にも対応)

ガンマ関数は複素数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math> に対しても以下の積分で定義されます:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi mathvariant="normal">∞</mi></msubsup><msup><mi>t</mi><mrow><mi>z</mi><mo>−</mo><mn>1</mn></mrow></msup><msup><mi>e</mi><mrow><mo>−</mo><mi>t</mi></mrow></msup><mtext> </mtext><mi>d</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">\Gamma(z) = \int_0^{\infty} t^{z-1} e^{-t} \,dt</annotation></semantics></math>

階乗は次の関係で表せます:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>z</mi><mo stretchy="false">!</mo><mo>=</mo><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mi>z</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">z! = \Gamma(z+1)</annotation></semantics></math>

2. 虚数の階乗の具体例

虚数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math>(虚数単位)の階乗 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">i!</annotation></semantics></math> を求める場合、ガンマ関数で計算できます。

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>i</mi><mo stretchy="false">!</mo><mo>=</mo><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mi>i</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">i! = \Gamma(i + 1)</annotation></semantics></math>

この積分は解析的に計算できますが、非常に複雑な値を持つため、一般的には数値計算ソフトウェアを使って求めます。


3. Pythonで虚数の階乗を計算する方法

Pythonの scipy ライブラリを使用して、複素数の階乗を計算する例です。

from scipy.special import gamma
import cmath

# 虚数単位の階乗を計算
z = 1j  # 虚数単位
factorial_z = gamma(z + 1)
print(f"{z}! =", factorial_z)

出力結果の例:

1j! = (0.4980156681183561-0.1549498283018107j)

4. 複素数の階乗の可視化

複素平面上でガンマ関数の絶対値や偏角を視覚化すると、美しいフラクタル模様が現れます。特に極が現れる点(負の整数)は、ガンマ関数の特異点です。


5. ガンマ関数の特異点と複素数階乗の注意点

  • 負の整数ではガンマ関数は発散(無限大)します。
  • 複素数の階乗は多価関数ではなく、一価関数です(ガンマ関数自体が一価関数)。

6. まとめ

  • 虚数の階乗はガンマ関数で定義され、<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi><mo stretchy="false">!</mo><mo>=</mo><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mi>z</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">z! = \Gamma(z+1)</annotation></semantics></math> で計算可能。
  • 負の整数では未定義(ガンマ関数が特異点を持つ)。
  • Pythonのscipyで複素数の階乗計算が可能 (scipy.special.gamma)。

小数の階乗の求め方

2025-01-11 13:05:42 | 日記











小数の階乗は、**ガンマ関数**を使って求めることができます。ガンマ関数は、通常の階乗を連続的に拡張したものです。

---

## 1. ガンマ関数の定義
ガンマ関数 \(\Gamma(z)\) は、次の積分で定義されます:

\[
\Gamma(z) = \int_0^{\infty} t^{z-1} e^{-t} \,dt
\]

この関数は、正の整数に対して次の性質を持ちます:

\[
\Gamma(n) = (n-1)!
\]

したがって、小数の階乗も次のように計算できます:

\[
x! = \Gamma(x+1)
\]

---

## 2. 例:\(\frac{1}{2}\) の階乗
有名な例として、\(\frac{1}{2}\) の階乗(\(\Gamma\left(\frac{3}{2}\right)\))は次のように求められます。

\[
\Gamma\left(\frac{3}{2}\right) = \frac{1}{2} \Gamma\left(\frac{1}{2}\right)
\]

また、\(\Gamma\left(\frac{1}{2}\right)\) は以下のように計算できます:

\[
\Gamma\left(\frac{1}{2}\right) = \sqrt{\pi}
\]

したがって:

\[
\frac{1}{2}! = \frac{\sqrt{\pi}}{2} \approx 0.886
\]

---

## 3. Pythonで小数の階乗を計算する方法
Pythonの `scipy` ライブラリの `gamma` 関数を使って、小数の階乗を計算できます。

```python
from scipy.special import gamma

# 小数の階乗を計算
x = 0.5
factorial_x = gamma(x + 1)
print(f"{x}! =", factorial_x)
```

### 出力結果
```plaintext
0.5! = 0.886226925452758
```

---

## 4. 近似計算方法(スターリングの近似式)
スターリングの近似式を使って、階乗の近似値を求めることもできます:

\[
n! \approx \sqrt{2\pi n}\left(\frac{n}{e}\right)^n
\]

---

## 5. まとめ
- 小数の階乗は**ガンマ関数**で定義される。
- 定義は積分で与えられ、\(x! = \Gamma(x+1)\) で計算可能。
- Pythonでは `scipy.special.gamma` 関数を使用。
- 特殊例として \(\frac{1}{2}!\) は \(\frac{\sqrt{\pi}}{2}\)。


負の数の階乗を求めることは可能か?

2025-01-11 13:00:24 | 日記














負の数の階乗は、通常の整数の階乗のように直接計算することはできません。しかし、階乗を拡張したガンマ関数を用いることで、負の数の階乗を一般化できます。


1. 階乗の定義とガンマ関数

階乗は自然数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math> に対して次のように定義されます:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>n</mi><mo stretchy="false">!</mo><mo>=</mo><mi>n</mi><mo>×</mo><mo stretchy="false">(</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>×</mo><mo>…</mo><mo>×</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n! = n \times (n-1) \times \ldots \times 1</annotation></semantics></math>

これを一般化したガンマ関数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\Gamma(z)</annotation></semantics></math> は、複素数領域で以下の積分によって定義されます:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mi>z</mi><mo stretchy="false">)</mo><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi mathvariant="normal">∞</mi></msubsup><msup><mi>t</mi><mrow><mi>z</mi><mo>−</mo><mn>1</mn></mrow></msup><msup><mi>e</mi><mrow><mo>−</mo><mi>t</mi></mrow></msup><mtext> </mtext><mi>d</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">\Gamma(z) = \int_0^{\infty} t^{z-1} e^{-t} \,dt</annotation></semantics></math>

この関数は、正の整数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math> に対して次の性質を持ちます:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mo stretchy="false">(</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">\Gamma(n) = (n-1)!</annotation></semantics></math>

これにより、ガンマ関数は連続的に階乗を拡張しています。


2. 負の数の階乗の定義

負の整数以外の負の数に対して、次のように定義されます:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo stretchy="false">!</mo><mo>=</mo><mfrac><mrow><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mo>−</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><mn>1</mn></mfrac></mrow><annotation encoding="application/x-tex">(-n)! = \frac{\Gamma(-n+1)}{1}</annotation></semantics></math>

ただし、負の整数ではガンマ関数は特異点(無限大になる点)を持つため、定義されません。

例:<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">-\frac{1}{2}!</annotation></semantics></math> の計算

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Γ</mi><mrow><mo fence="true">(</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><msqrt><mi>π</mi></msqrt></mrow><annotation encoding="application/x-tex">\Gamma\left(\frac{1}{2}\right) = \sqrt{\pi}</annotation></semantics></math>

したがって、<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo stretchy="false">!</mo></mrow><annotation encoding="application/x-tex">-\frac{1}{2}!</annotation></semantics></math> は次のようになります:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo>−</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo stretchy="false">!</mo><mo>=</mo><mfrac><msqrt><mi>π</mi></msqrt><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">-\frac{1}{2}! = \frac{\sqrt{\pi}}{2}</annotation></semantics></math>

3. 負の整数の階乗は未定義

負の整数の場合、ガンマ関数は**極(無限大)**となるため、計算不可能です。

例:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mn>0</mn><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">∞</mi><mo separator="true">,</mo><mspace width="1em"></mspace><mi mathvariant="normal">Γ</mi><mo stretchy="false">(</mo><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mi mathvariant="normal">∞</mi></mrow><annotation encoding="application/x-tex">\Gamma(0) = \infty,\quad \Gamma(-1) = \infty</annotation></semantics></math>

4. Pythonでの計算例(scipy使用)

Pythonの scipy ライブラリを使って負の数の階乗を計算する例です:

from scipy.special import gamma

# -0.5の階乗を計算
n = -0.5
factorial_neg = gamma(n + 1)
print(f"{n}! =", factorial_neg)

出力

-0.5! = 1.7724538509055159  # ≈ √π

5. まとめ

  • 負の整数の階乗は未定義(無限大)。
  • 負の非整数の階乗はガンマ関数で計算可能。
  • Pythonのscipyで計算可能(scipy.special.gamma)。

負の数を真数にもつ対数

2025-01-11 12:50:19 | 日記
二乗するとマイナスになる虚数が生み出されるのと同様に負の数を真数にもつ対数を生み出すことは可能か?

非常に興味深い質問です。負の数の対数を求めることは、複素数の範囲に拡張することで可能です。










1. 実数の範囲では不可能

通常の実数の範囲では、対数関数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">log(x)</annotation></semantics></math> は次の性質を持ちます。

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>y</mi><mtext>  </mtext><mo>⟺</mo><mtext>  </mtext><msup><mi>e</mi><mi>y</mi></msup><mo>=</mo><mi>x</mi></mrow><annotation encoding="application/x-tex">log(x) = y iff e^y = x</annotation></semantics></math>

ここで、<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>></mo><mn>0</mn></mrow><annotation encoding="application/x-tex">x > 0</annotation></semantics></math> である必要があります。指数関数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>e</mi><mi>y</mi></msup></mrow><annotation encoding="application/x-tex">e^y</annotation></semantics></math> の値域が常に正であるため、負の数を対数関数の真数として取ることはできません。


2. 複素数の範囲で可能

しかし、複素数の範囲では負の数の対数を定義できます。具体的には、オイラーの公式を用います。

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msup><mi>e</mi><mrow><mi>i</mi><mi>θ</mi></mrow></msup><mo>=</mo><mi>cos</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>θ</mi><mo stretchy="false">)</mo><mo>+</mo><mi>i</mi><mi>sin</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>θ</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">e^{i heta} = cos( heta) + isin( heta)</annotation></semantics></math>

<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>e</mi><mrow><mi>i</mi><mi>π</mi></mrow></msup><mo>=</mo><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">e^{ipi} = -1</annotation></semantics></math> という有名な等式から、<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">-1</annotation></semantics></math> は指数表現で以下のように表せます。

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo>−</mo><mn>1</mn><mo>=</mo><msup><mi>e</mi><mrow><mi>i</mi><mi>π</mi></mrow></msup></mrow><annotation encoding="application/x-tex">-1 = e^{ipi}</annotation></semantics></math>

これを用いると、負の数 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mi>a</mi></mrow><annotation encoding="application/x-tex">-a</annotation></semantics></math><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>></mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a > 0</annotation></semantics></math>)の自然対数は次のように計算できます。

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mo>−</mo><mi>a</mi><mo stretchy="false">)</mo><mo>=</mo><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo>+</mo><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">log(-a) = log(a) + log(-1)</annotation></semantics></math>

ここで、<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mi>i</mi><mi>π</mi></mrow><annotation encoding="application/x-tex">log(-1) = ipi</annotation></semantics></math> なので、

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mo>−</mo><mi>a</mi><mo stretchy="false">)</mo><mo>=</mo><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo>+</mo><mi>i</mi><mi>π</mi></mrow><annotation encoding="application/x-tex">log(-a) = log(a) + ipi</annotation></semantics></math>

3. 複素対数関数の多価性

複素数では、オイラーの公式の角度 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>θ</mi></mrow><annotation encoding="application/x-tex"> heta</annotation></semantics></math><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>k</mi><mi>π</mi></mrow><annotation encoding="application/x-tex">2kpi</annotation></semantics></math><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math> は整数)だけ回転させても同じ値になります。したがって、複素対数は次のように「多価関数」となります。

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mo>−</mo><mi>a</mi><mo stretchy="false">)</mo><mo>=</mo><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo>+</mo><mi>i</mi><mi>π</mi><mo stretchy="false">(</mo><mn>2</mn><mi>k</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">log(-a) = log(a) + ipi(2k+1)</annotation></semantics></math>

これは、複素平面で負の数に対応する角度(偏角)が <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>π</mi></mrow><annotation encoding="application/x-tex"> pi</annotation></semantics></math> だけでなく、<math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mi>π</mi><mo separator="true">,</mo><mn>5</mn><mi>π</mi><mo separator="true">,</mo><mo>…</mo></mrow><annotation encoding="application/x-tex">3pi, 5pi, ldots</annotation></semantics></math> など無限に存在するためです。


4. まとめ

  • 実数の範囲では負の数の対数は定義できない。
  • 複素数の範囲では定義可能であり、多価関数となる。
  • 負の数の対数は <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mo>−</mo><mi>a</mi><mo stretchy="false">)</mo><mo>=</mo><mi>log</mi><mo>⁡</mo><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo>+</mo><mi>i</mi><mi>π</mi><mo stretchy="false">(</mo><mn>2</mn><mi>k</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">log(-a) = log(a) + ipi(2k+1)</annotation></semantics></math> で表される。

これは、虚数単位 <math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math> が二乗して負の数になるのと同様に、複素数の対数として負の数の対数を定義できることを示しています。


※そういえばそうだなwww

e^(iθ)なら無理やり負の数を真数にしたことにできるわなwww

それにしてもChatGPTは御世辞も言いやがるとはwww