MATLAB Copilotに相談しながら工学問題を設計してみた
こんにちは。私は MathWorks Korea の Angelo と申します。普段は大学教授、研究者、学生が授業や研究で MATLABとSimulink をよりよく使えるように技術支援する業務を担当しています。今日は、学生の評価過程で教育者に役立つ内容をご紹介します。特に、最近の教育分野で実用的なツールとして位置づけられている生成 AI を利用して、MATLAB コードを活用した工学問題を設計する方法を学びましょう。
評価のための問題や課題を作る過程の難しさ
授業を設計する際、概念説明と同様に重要なのはまさに「評価」です。その上、評価用の問題や課題を作るのは思ったより簡単ではありません。時間がかかり、試行錯誤も多いです。ほとんどの教育者は、どの学生を対象とするのか、どのトピックを扱うのか、どのデータを使用するのかについての大まかなイメージはありますが、それを実際の問題として実装する過程では予想以上に悩む必要があります。最近では、生成 AI を活用して問題を作ろうとする試みが多くなってきましたが、理想の形の問題に作り上げるためのプロンプトを考えるのは容易ではありません。
一方、工学教育では 学生が論理的な流れを正しく理解しているか を評価することが重要です。プログラムを活用した問題は、この点で大きな利点があります。ロジックがひとつでも抜けると、流れが途切れて期待する結果が得られにくいため、学生が問題解決プロセスをどれだけ正確に理解したかが明確に示されます。このような目的の場合、MATLAB は良い選択です。高水準言語のため、学生は複雑な文法にとらわれず、問題の本質と論理に集中することができます。
今日紹介する方法は、単に決まったプロンプトを書く方法ではありません。MATLAB Copilot を利用すれば、生成 AI と「相談」するように会話しながら、教育者が頭の中に描いた大まかなイメージをますます具体化することができます。その過程で、よく整理された MATLAB コードを含む問題まで自動的に作成されるので、試行錯誤を減らし、はるかに効率的に問題を設計することができます。下の図からわかるように、AI が皆さんに質問し、皆さんはその質問に答えながら一緒にイメージを描いていきます。

MATLAB Copilot とは?
MATLAB Copilot は、MathWorks が MATLAB R2025a と同時に公開した生成 AI ベースのツールです。この製品は MATLAB ワークフローをサポートし、MATLAB 関連情報に基づいた回答を提供します。今日は Copilot Chat 機能を使って問題設計に取り組んでみましょう。 最近、MATLAB CopilotはGPT-5 miniエンジンを搭載することになり、Copilot Chat はさらに拡張されたコンテキストウィンドウを持つようになり、長い会話が可能になりました。
MATLAB Copilot と問題作成の相談をする
私が紹介したいアプローチは、単純な「プロンプトエンジニアリング」とは少し異なります。 核心は「相談」です。頭の中にあるユニークなアイデアを Copilot と話し合い、具体化する過程です。MATLAB を起動し、下の図に示す Copilot チャットボタンを押すと、MATLAB Copilot Chat を開始できます。

今日の内容では、以下のプロンプトが鍵となります。
「あなたは AI の専門家です。私はあなたの助言をお願いしたいです。MathWorks (mathworks.com)の事例を参考に、学生が学習に使える教材と演習を作ろうと思います。 MathWorks の例は、さまざまなドメインとユースケースをカバーしています。 AI を活用してこのような仕事をするにはどうすればいいですか? 演習作成の方向性を決めるために、必要な質問をしてください。 一つずつ質問をして、考えが十分に整理できたと感じたら、問題を作成してください。」
冒頭で「あなたは AI 専門家です」から始めているのは、多くの LLM が複数の専門モジュールの統合体で構成されているためです。GPT の内部で AI 関連モジュールを使ってほしいと明示的に要請しているのです。
今回、私は機械学習の Support Vector Machine (SVM) というアルゴリズムを利用した基礎問題を学部2、3年生対象に作成したいと思います。 実際のデータよりは簡単に分類できる人工データセットを活用してみようというのが目標ですが、それ以外には具体的な計画はない状況だと仮定しながら、MATLAB Copilot の案内に従ってみましょう。
下の図のように、まず最初に質問されたのは対象学生に関してです。 私は学部2、3年生の MATLAB についての知識を持っている初心者だと答えてみます。

次の質問では、より具体的なトピックについて聞かれました。これに対しては、機械学習の SVM を中心に、データ分析と可視化、そして MATLAB から提供される関数をうまく活用することを目標にしたいと回答します。

この回答の後、『私は1つの問題だけを作ろうとし、20分ほどで解ける問題にしたい』と追加しました。次に、MATLAB Copilot は生徒に具体的にどんな活動をさせたいかについて聞いてきました。ここまで見てきて気付かれたかと思いますが、MATLAB Copilot はさまざまなオプションを提示してきてくれます。最初に考えられなかったオプションをさらに検討してみることにも役立ちます。ここでは、単純な分類器を学習してテストすることを目指していると回答します。

次に、どのデータセットを使うか聞いてきました。ここでは,できる限りに単純な問題を作成しようとしているので、人工的なデータセットを活用してみることにします。

いいですね。
これで、MATLAB Copilot は十分な情報を収集したと判断したみたいです。その結果、課題と配点、そして MATLAB コードを生成しました。まずは、下図の赤い矢印で示しているボタンを押してコードをコピーし、MATLAB で実行してみて期待どおりに動作することを確認してみましょう。

実際に生成されたコードは以下の通りでした。
% synthetic_svm_exercise.m
rng(1); % 再現性
nPerClass = 100;
% クラス1:平均[1,1]、共分散0.3 * I
mu1 = [1 1];
Sigma1 = 0.3 * eye(2);
X1 = mvnrnd(mu1, Sigma1, nPerClass);
% クラス2:平均[3,2]、共分散0.5 * I
mu2 = [3 2];
Sigma2 = 0.5 * eye(2);
X2 = mvnrnd(mu2, Sigma2, nPerClass);
% データとラベル
X = [X1; X2];
Y = [zeros(nPerClass,1); ones(nPerClass,1)]; % 0/1 ラベル
% 可視化: 散布図
figure(‘Name’,‘Scatter’);
gscatter(X(:,1), X(:,2), Y, ‘rb’, ‘o^’);
xlabel(‘Feature 1’); ylabel(‘Feature 2’);
title(‘Class scatter plot’);
legend(‘Class 0’,‘Class 1’,‘Location’,‘best’);
% 可視化: ヒストグラム(各特徴量ごとにクラス比較)
figure(‘Name’,‘Histograms’);
subplot(2,1,1);
histogram(X(Y==0,1), ‘FaceColor’,‘r’, ‘FaceAlpha’,0.5); hold on;
histogram(X(Y==1,1), ‘FaceColor’,‘b’, ‘FaceAlpha’,0.5); hold off;
xlabel(‘Feature 1’); ylabel(‘Count’); title(‘Histogram of Feature 1’);
legend(‘Class 0’,‘Class 1’);
subplot(2,1,2);
histogram(X(Y==0,2), ‘FaceColor’,‘r’, ‘FaceAlpha’,0.5); hold on;
histogram(X(Y==1,2), ‘FaceColor’,‘b’, ‘FaceAlpha’,0.5); hold off;
xlabel(‘Feature 2’); ylabel(‘Count’); title(‘Histogram of Feature 2’);
legend(‘Class 0’,‘Class 1’);
% トレーニング/検証分割
cv = cvpartition(Y, ‘HoldOut’, 0.3);
Xtrain = X(training(cv), :);
Ytrain = Y(training(cv), :);
Xtest = X(test(cv), :);
Ytest = Y(test(cv), :);
% 標準化(トレーニングデータの平均と標準偏差で)
mu = mean(Xtrain);
sigma = std(Xtrain);
XtrainZ = (Xtrain – mu) ./ sigma;
XtestZ = (Xtest – mu) ./ sigma;
% SVM 学習(線形カーネル)
SVMModel = fitcsvm(XtrainZ, Ytrain, ‘KernelFunction’,‘linear’, ‘Standardize’,false);
% 予測と評価
Ypred = predict(SVMModel, XtestZ);
C = confusionmat(Ytest, Ypred);
acc = mean(Ypred == Ytest);
fprintf(‘Confusion Matrix:\n’);
disp(C);
fprintf(‘Accuracy: %.2f%%\n’, acc*100);
% 混同行列の可視化
figure(‘Name’,‘ConfusionMatrix’);
confusionchart(C, {‘Class 0’,‘Class 1’});
title(sprintf(‘SVM Confusion Matrix (Accuracy %.1f%%)’, acc*100));
% オプション: 2D 決定境界の描画
d = 0.02;
[x1Grid, x2Grid] = meshgrid(min(XtrainZ(:,1))-1:d:max(XtrainZ(:,1))+1, …
min(XtrainZ(:,2))-1:d:max(XtrainZ(:,2))+1);
xGrid = [x1Grid(:), x2Grid(:)];
[~, score] = predict(SVMModel, xGrid);
scoreGrid = reshape(score(:,2), size(x1Grid)); % 正クラスのスコア
figure(‘Name’,‘Decision Boundary’);
contourf(x1Grid, x2Grid, scoreGrid, [-Inf 0 Inf], ‘LineColor’,‘k’, ‘LineWidth’,1);
alpha(0.2); hold on;
gscatter(XtrainZ(:,1), XtrainZ(:,2), Ytrain, ‘rb’, ‘o^’);
xlabel(‘Feature 1 (z)’); ylabel(‘Feature 2 (z)’);
title(‘Decision boundary and training data’);
legend(‘Decision regions’,‘Class 0’,‘Class 1’,‘Location’,‘best’);
最終的に下記の4つの図が出力されましたね。人工データを利用して、簡単に分離されるデータセットが要求通りに活用されたようです。コードを見ると、MATLAB で提供されている fitcsvm 関数がリクエスト通りに活用されていることがわかりますね。求めていたものに限りなく近づいたようです。

さて私は、このような課題と配点の形式よりも、問題の説明と学習者が入力できるテンプレート、そして正解で使えるリファレンスコードのような形式を求めていました。因みに、MATLAB Copilot は基本的に MATLAB についての質問だけを受け取るので、すべてのリクエストに対して答えられるわけではありません。時々、MATLAB Copilot は以下のように答えます。(スマートだとは思いますが…)
『そのリクエストには応答できません。MATLAB に関するその他の質問には喜んでお答えします。』
したがって、出力された MATLAB コードに基づいて、MATLAB Grader で活用する問題の説明、学習者用のテンプレート、およびリファレンスコードが必要であることを伝えます。MATLAB Grader は MathWorks が提供する MATLAB コードの課題評価のための問題出題および自動採点プラットフォームであるため、MATLAB Copilot は喜んでお手伝いします。

学習者用のテンプレートは以下のように作成されました。ここから,難易度調整のためにコードの一部を空欄などに置換して穴埋め形式にすることも可能です。
% student_solution.m
rng(1); % 再現性
nPerClass = 100;
% — BEGIN: データ生成(編集不要) —
% クラス1: 平均 [1,1], 共分散 0.3*I
mu1 = [1 1];
Sigma1 = 0.3 * eye(2);
X1 = mvnrnd(mu1, Sigma1, nPerClass);
% クラス2: 平均 [3,2], 共分散 0.5*I
mu2 = [3 2];
Sigma2 = 0.5 * eye(2);
X2 = mvnrnd(mu2, Sigma2, nPerClass);
% データとラベル
X = [X1; X2];
Y = [zeros(nPerClass,1); ones(nPerClass,1)]; % 0/1ラベル
% — END: データ生成 —
% 可視化(任意): 散布図 / ヒストグラム
% (編集可) 例: gscatter(X(:,1), X(:,2), Y);
% — BEGIN: データ分割・前処理・学習(ここを完成させる) —
% 1) 訓練/検証分割(HoldOut = 0.3 を使用)
% 2) 訓練データの平均・標準偏差で標準化(zスコア)
% 3) 線形SVMを fitcsvm で学習(’KernelFunction’,’linear’、’Standardize’,false)
% 4) 検証データを予測して混同行列 C と精度 acc を計算
%
% ここにコードを追加してください。
% — END: データ分割・前処理・学習 —
% ヒント(短く)
%
% cvpartition(Y,’HoldOut’,0.3)、training(cv)、test(cv) を使う。
% 標準化は mu = mean(Xtrain); sigma = std(Xtrain); で行い、それを使って訓練・検証双方を変換する。
% predict の返り値で confusionmat と mean(Ypred == Ytest) を計算する。
以下は、MATLAB Copilot が作成した採点用の模範解答です。サポートベクターマシンを学習し、学習済みモデルを使って予測と評価を行う標準的な手順に忠実に従っていることが確認できます。
% reference_solution.m
rng(1);
nPerClass = 100;
mu1 = [1 1];
Sigma1 = 0.3 * eye(2);
X1 = mvnrnd(mu1, Sigma1, nPerClass);
mu2 = [3 2];
Sigma2 = 0.5 * eye(2);
X2 = mvnrnd(mu2, Sigma2, nPerClass);
X = [X1; X2];
Y = [zeros(nPerClass,1); ones(nPerClass,1)];
% トレーニング/検証分割
cv = cvpartition(Y, ‘HoldOut’, 0.3);
Xtrain = X(training(cv), :);
Ytrain = Y(training(cv), :);
Xtest = X(test(cv), :);
Ytest = Y(test(cv), :);
% 標準化(トレーニングデータの統計量を使用)
mu = mean(Xtrain, 1);
sigma = std(Xtrain, 0, 1);
XtrainZ = (Xtrain – mu) ./ sigma;
XtestZ = (Xtest – mu) ./ sigma;
% 線形SVM学習
SVMModel = fitcsvm(XtrainZ, Ytrain, ‘KernelFunction’,‘linear’, ‘Standardize’,false);
% 予測と評価
Ypred = predict(SVMModel, XtestZ);
C = confusionmat(Ytest, Ypred);
acc = mean(Ypred == Ytest);
% (任意)可視化コード(評価には不要)
% figure; gscatter(XtrainZ(:,1), XtrainZ(:,2), Ytrain, ‘rb’, ‘o^’);
% figure; confusionchart(C, {‘Class 0′,’Class 1’});


まとめ
教育者にとって、MATLAB Copilot は単なるコード生成ツールではなく、アイデアを具体化し、評価問題を効率的に設計するための頼れる存在です。
特に、問題制作過程で最も時間を消費する アイデアの整理 → コードの実装 → 可視化 → 評価ロジック設計 を、MATLAB Copilot との対話で迅速に完了できる点は大きな利点です。
今回の例で示したように、MATLAB Copilot は
- 学習者レベルに合った問題構造を提案し、
- MATLAB Grader と連携可能なテンプレートとリファレンスコードを自動生成し、
- 視覚化と評価まで含めた完成度の高い結果を提供します。
MATLAB Copilot を使えば、問題作成プロセスが簡素化され、アイデアをすばやくコードに変換できます。
皆さんは MATLAB Copilot をどのように活用していますか?コメントで教えてください。
- Category:
- chatGPT,
- Distance learning,
- MATLAB Grader,
- 授業利用,
- 機能と使い方,
- 生成AI


Comments
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.