matlab について
数値解析スクリプトを書く人向けの、MATLABとGNU Octaveの科学計算スキルです。行列、データ処理、作図、統計、シミュレーションを扱い、両環境の使い方と差異も説明します。
主な機能
- 01行列と配列の演算
- 02線形代数と数値計算法
- 03作図と可視化
- 04データの入出力
- 05統計とデータ分析
- 06MATLABとOctaveのガイド
活用シーン
- 01実験データの分析
- 02数値シミュレーションの実行
- 03データファイルの一括処理
- 04信号や科学的結果の作図
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ crazymsn/ academic-skills --skill matlabインストール後、Claude Code で/matlabを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/data-import-export.mdexecuting-scripts.mdgraphics-visualization.mdmathematics.mdmatrices-arrays.mdoctave-compatibility.mdprogramming.mdpython-integration.md詳細
MATLAB/Octave 科学技術計算
MATLAB は、行列演算と科学技術計算に最適化された数値計算環境です。GNU Octave は、MATLAB との高い互換性を持つ、無料のオープンソース代替製品です。
クイックスタート
MATLAB スクリプトの実行:
# MATLAB (commercial)
matlab -nodisplay -nosplash -r "run('script.m'); exit;"
# GNU Octave (free, open-source)
octave script.m
GNU Octave のインストール:
# macOS
brew install octave
# Ubuntu/Debian
sudo apt install octave
# Windows - download from https://octave.org/download
主な機能
1. 行列演算
MATLAB は、基本的に行列と配列を中心に動作します。
% Create matrices
A = [1 2 3; 4 5 6; 7 8 9]; % 3x3 matrix
v = 1:10; % Row vector 1 to 10
v = linspace(0, 1, 100); % 100 points from 0 to 1
% Special matrices
I = eye(3); % Identity matrix
Z = zeros(3, 4); % 3x4 zero matrix
O = ones(2, 3); % 2x3 ones matrix
R = rand(3, 3); % Random uniform
N = randn(3, 3); % Random normal
% Matrix operations
B = A'; % Transpose
C = A * B; % Matrix multiplication
D = A .* B; % Element-wise multiplication
E = A \ b; % Solve linear system Ax = b
F = inv(A); % Matrix inverse
行列演算の全容については、references/matrices-arrays.md を参照してください。
2. 線形代数
% Eigenvalues and eigenvectors
[V, D] = eig(A); % V: eigenvectors, D: diagonal eigenvalues
% Singular value decomposition
[U, S, V] = svd(A);
% Matrix decompositions
[L, U] = lu(A); % LU decomposition
[Q, R] = qr(A); % QR decomposition
R = chol(A); % Cholesky (symmetric positive definite)
% Solve linear systems
x = A \ b; % Preferred method
x = linsolve(A, b); % With options
x = inv(A) * b; % Less efficient
線形代数の詳細については、references/mathematics.md を参照してください。
3. プロットと可視化
% 2D Plots
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y, 'b-', 'LineWidth', 2);
xlabel('x'); ylabel('sin(x)');
title('Sine Wave');
grid on;
% Multiple plots
hold on;
plot(x, cos(x), 'r--');
legend('sin', 'cos');
hold off;
% 3D Surface
[X, Y] = meshgrid(-2:0.1:2, -2:0.1:2);
Z = X.^2 + Y.^2;
surf(X, Y, Z);
colorbar;
% Save figures
saveas(gcf, 'plot.png');
print('-dpdf', 'plot.pdf');
可視化の詳細なガイドについては、references/graphics-visualization.md を参照してください。
4. データのインポート/エクスポート
% Read tabular data
T = readtable('data.csv');
M = readmatrix('data.csv');
% Write data
writetable(T, 'output.csv');
writematrix(M, 'output.csv');
% MAT files (MATLAB native)
save('data.mat', 'A', 'B', 'C'); % Save variables
load('data.mat'); % Load all
S = load('data.mat', 'A'); % Load specific
% Images
img = imread('image.png');
imwrite(img, 'output.jpg');
I/O の詳細なガイドについては、references/data-import-export.md を参照してください。
5. 制御フローと関数
% Conditionals
if x > 0
disp('positive');
elseif x < 0
disp('negative');
else
disp('zero');
end
% Loops
for i = 1:10
disp(i);
end
while x > 0
x = x - 1;
end
% Functions (in separate .m file or same file)
function y = myfunction(x, n)
y = x.^n;
end
% Anonymous functions
f = @(x) x.^2 + 2*x + 1;
result = f(5); % 36
プログラミングの詳細なガイドについては、references/programming.md を参照してください。
6. 統計とデータ分析
% Descriptive statistics
m = mean(data);
s = std(data);
v = var(data);
med = median(data);
[minVal, minIdx] = min(data);
[maxVal, maxIdx] = max(data);
% Correlation
R = corrcoef(X, Y);
C = cov(X, Y);
% Linear regression
p = polyfit(x, y, 1); % Linear fit
y_fit = polyval(p, x);
% Moving statistics
y_smooth = movmean(y, 5); % 5-point moving average
統計のリファレンスについては、references/mathematics.md を参照してください。
7. 微分方程式
% ODE solving
% dy/dt = -2y, y(0) = 1
f = @(t, y) -2*y;
[t, y] = ode45(f, [0 5], 1);
plot(t, y);
% Higher-order: y'' + 2y' + y = 0
% Convert to system: y1' = y2, y2' = -2*y2 - y1
f = @(t, y) [y(2); -2*y(2) - y(1)];
[t, y] = ode45(f, [0 10], [1; 0]);
ODE ソルバーのガイドについては、references/mathematics.md を参照してください。
8. 信号処理
% FFT
Y = fft(signal);
f = (0:length(Y)-1) * fs / length(Y);
plot(f, abs(Y));
% Filtering
b = fir1(50, 0.3); % FIR filter design
y_filtered = filter(b, 1, signal);
% Convolution
y = conv(x, h, 'same');
信号処理については、references/mathematics.md を参照してください。
よく使われるパターン
パターン 1:データ分析パイプライン
% Load data
data = readtable('experiment.csv');
% Clean data
data = rmmissing(data); % Remove missing values
% Analyze
grouped = groupsummary(data, 'Category', 'mean', 'Value');
% Visualize
figure;
bar(grouped.Category, grouped.mean_Value);
xlabel('Category'); ylabel('Mean Value');
title('Results by Category');
% Save
writetable(grouped, 'results.csv');
saveas(gcf, 'results.png');
パターン 2:数値シミュレーション
% Parameters
L = 1; N = 100; T = 10; dt = 0.01;
x = linspace(0, L, N);
dx = x(2) - x(1);
% Initial condition
u = sin(pi * x);
% Time stepping (heat equation)
for t = 0:dt:T
u_new = u;
for i = 2:N-1
u_new(i) = u(i) + dt/(dx^2) * (u(i+1) - 2*u(i) + u(i-1));
end
u = u_new;
end
plot(x, u);
パターン 3:バッチ処理
% Process multiple files
files = dir('data/*.csv');
results = cell(length(files), 1);
for i = 1:length(files)
data = readtable(fullfile(files(i).folder, files(i).name));
results{i} = analyze(data); % Custom analysis function
end
% Combine results
all_results = vertcat(results{:});
リファレンスファイル
- matrices-arrays.md - 行列の作成、インデックス付け、操作、演算
- mathematics.md - 線形代数、微積分、ODE、最適化、統計
- graphics-visualization.md - 2D/3D プロット、カスタマイズ、エクスポート
- data-import-export.md - ファイル I/O、テーブル、データ形式
- programming.md - 関数、スクリプト、制御フロー、OOP
- python-integration.md - MATLAB から Python を呼び出す方法と、その逆の方法
- octave-compatibility.md - MATLAB と GNU Octave の違い
- executing-scripts.md - 生成したスクリプトの実行とテスト
GNU Octave との互換性
GNU Octave は MATLAB との高い互換性を備えています。ほとんどのスクリプトは変更せずに動作します。主な違いは次のとおりです。
- コメントには
#または%を使用します(MATLAB では%のみ) - Octave では
++、--、+=演算子を使用できます - 一部のツールボックス関数は Octave では使用できません
- Octave のパッケージには
pkg loadを使用します
互換性の詳細なガイドについては、references/octave-compatibility.md を参照してください。
ベストプラクティス
-
演算をベクトル化する - 可能な場合はループを避けます。
% Slow for i = 1:1000 y(i) = sin(x(i)); end % Fast y = sin(x); -
配列を事前割り当てする - ループ内で配列を拡張しないようにします。
% Slow for i = 1:1000 y(i) = i^2; end % Fast y = zeros(1, 1000); for i = 1:1000 y(i) = i^2; end -
適切なデータ型を使用する - 混在するデータにはテーブルを、数値データには行列を使用します。
% Numeric data M = readmatrix('numbers.csv'); % Mixed data with headers T = readtable('mixed.csv'); -
コメントとドキュメントを追加する - 関数のヘルプを使用します。
function y = myfunction(x) %MYFUNCTION Brief description % Y = MYFUNCTION(X) detailed description % % Example: % y = myfunction(5); y = x.^2; end
追加リソース
- MATLAB のドキュメント:https://www.mathworks.com/help/matlab/
- GNU Octave マニュアル:https://docs.octave.org/latest/
- MATLAB Onramp(無料コース):https://www.mathworks.com/learn/tutorials/matlab-onramp.html
- File Exchange:https://www.mathworks.com/matlabcentral/fileexchange/