提示詞、範本與下載
先下載教材,在自己的 MATLAB 環境完成執行。程式輸出、截圖與報告數字請互相核對。
下載教材
- 完整 MATLAB 公開教材包 1.7:完整教學、四支
.m、提示詞、起始骨架、Markdown 與 PDF 報告範本。 - 153 張合成參考圖庫:原教材 Python 產物,含 108 張 Train、45 張 Test 與 manifest;不是本次 MATLAB 的執行結果。
- 下載校驗碼
公開包保留學習內容,排除編輯用原始驗證紀錄。MATLAB 程式會自行產生感測 CSV、色塊圖及幾何圖庫,不必先放入輸入資料。
可編輯報告範本
三題需求與合成教材對照
這份對照表把已核對的老師要求、助教實作方式與合成案例範圍分開記錄。三個案例用於課前練習,資料內容維持虛構,作業內容請依老師提供的正式題目完成。
案例一:表格分類
| 項目 | 已核對的老師要求 | 合成教材做法 |
|---|---|---|
| 資料切分 | 80% Train Set、20% Test Set | 虛構設備感測資料依標籤分層切成 80/20 |
| 成績解讀 | 90% 為目標值 | 教材照實呈現 accuracy、混淆矩陣與正類召回率 |
| PDF 內容 | 分析邏輯、特徵選取、程式碼截圖、測試結果 | CASE1_REPORT_TEMPLATE.md 與 PDF 範本依四節排列 |
| 程式與附加檔案 | PDF 四節屬老師要求 | 獨立 .m、CSV、JSON、檢核程式與教材 ZIP 屬助教實作方式 |
合成案例使用 temperatureC、vibrationMmS、currentA 預測正常或需檢查,避開正式題目資料。模型選擇與安全路徑檢核屬助教為初學者設計的實作方式。
案例二:影像分割與面積
| 項目 | 已核對的老師要求 | 合成教材做法 |
|---|---|---|
| 輪廓顏色 | 紅色外輪廓 | 疊圖使用 RGB [255 0 0] |
| 比例 | 每個像素為 1 mm × 1 mm | pixelSizeMm = 1.0,面積平方毫米等於原始元件像素數 |
| 面積來源 | 量測目標區域 | 從原始分割元件計算 pixelArea,輪廓像素另列 |
| PDF 內容 | 執行結果、處理程序、程式碼 | CASE2_REPORT_TEMPLATE.md 與 PDF 範本依三節排列 |
| 程式與附加檔案 | PDF 三節屬老師要求 | 獨立 .m、PNG、JSON、檢核程式與教材 ZIP 屬助教實作方式 |
合成案例使用紙面不規則柔和紅色色塊與藍色干擾塊,避開正式題目的影像內容。
案例三:圖庫分類
已核對的資料範圍共有三組 ZIP,合計 234 張影像:
- 魚類:Train 46、Test 10。
- 馬與驢:Train 80、Test 20。
- 場地:Train 64、Test 14。
水果壓縮檔與老師另外提供的題目圖片位於目前已核對範圍之外。教材因此維持圓形、三角形、方形的合成圖庫,模擬「既有 Train Set/Test Set 資料夾、讀圖、抽特徵、訓練、獨立測試」流程,並保留目前 108 張 Train、45 張 Test 的教材規模。
已核對的報告內容為「執行結果、處理程序、程式碼」。CASE3_REPORT_TEMPLATE.md 依這三節排列。PDF 格式、獨立 .m、manifest、PNG、JSON、檢核程式與教材 ZIP 均標示為助教實作方式。案例三目前未設定特定正確率門檻,也不把 80/20 套用到既有 Train/Test 資料夾。
閱讀與執行原則
- 三份逐段教材以最終
.m的實際行號與 SHA-256 為準;每段保留完整程式片段,段內涵蓋每個非空行。 - GPT/Claude 負責產生或解釋文字;MATLAB Desktop/Online 的真實輸出才是執行依據。
- MATLAB 執行結果、截圖與報告數值由同學在自己的授權環境產生並保存。
- 教材的報告 PDF 是可編輯內容範本;案例一依要求填入程式碼截圖,案例二、三則填入程式碼,採截圖呈現時請保持文字清楚。
MATLAB 分階段提示詞與暫測
每次把目前完整的 .m 檔和一個階段提示詞貼給 GPT/Claude。請模型只修改指定區塊、保留既有函式名稱,並把新增的局部函式放在主要函式之後。完成一個階段後,請在 MATLAB Desktop 或 MATLAB Online 的 Command Window 執行暫測命令,再把真實輸出貼回對話。
所有階段統一採這個輸出格式:每段先說目的,列出完整程式區塊與原始行號範圍,再逐行解釋符號、參數、資料尺寸與用途。程式更新後,請依最終來源重新核對分段與原始行號。
案例一
階段一:合成、寫入與讀回資料
目標:建立五欄虛構感測 table,寫成 CSV 後用 readtable 讀回。
提示詞:
延續案例一骨架。請在主函式加入固定
rng(20261021,'twister'),產生 240 筆deviceID, temperatureC, vibrationMmS, currentA, label,寫到專案內synthetic_sensor_data.csv並讀回;新增ensureSafeOutput局部函式放在檔案末端。資料請限定為本案例的虛構設備感測資料,程式使用 base MATLAB。每個含程式內容的行加台灣繁體中文行尾註解。
本階段必要摘要欄位:outputDir, rowCount。
暫測:執行 s = case1_sensor_classifier_matlab;,再確認 isfile(fullfile(s.outputDir,'synthetic_sensor_data.csv'))。本階段摘要需暫時保留 outputDir 與 rowCount。
階段二:分層切分與 Train-only 標準化
目標:新增 stratifiedSplit,先切分再只用 Train 計算 means 與 scales。
提示詞:
保留階段一。新增局部函式
stratifiedSplit(labels,testRatio,seed);在主函式用 20% 分層保留測試,形成 80% Train Set 與 20% Test Set,保存trainRatio, testRatio, trainIDs, testIDs, standardizerMeans, standardizerScales。請先完成資料切分,再只用 Train Set 估計前處理參數;分層切分請以 base MATLAB 自行實作。
本階段必要摘要欄位:保留 outputDir, rowCount,新增 trainCount, testCount, trainRatio, testRatio, trainIDs, testIDs, standardizerMeans, standardizerScales。
暫測:執行 s = case1_sensor_classifier_matlab;,再執行 intersect(string(s.trainIDs),string(s.testIDs));應為空。
階段三:簡單分類與混淆矩陣
目標:加入自行實作羅吉斯分類器、機率、逐筆預測與二乘二混淆矩陣。
提示詞:
保留前兩階段。新增
trainLogistic、predictProbability、binaryConfusion;只用 Train 訓練,Test 專門用於評估。摘要保存混淆矩陣、accuracy、positiveRecall,並註明機率是校準前模型估計,真實風險需另行評估。
本階段必要摘要欄位:保留前兩階段欄位,新增 confusionMatrix, accuracy, positiveRecall, probabilityNote。
暫測:執行 s = case1_sensor_classifier_matlab; disp(s.confusionMatrix); disp(s.positiveRecall);,確認矩陣總和等於 s.testCount。
階段四:固定輸出與錯誤處理
目標:輸出逐筆 CSV、JSON,保留安全路徑與可辨識錯誤。
提示詞:
將案例一整理為最終
case1_sensor_classifier_matlab.m介面。輸出synthetic_sensor_data.csv、test_predictions.csv、summary.json;新增writeJson。請保留現有資料,並以Tutorial:UnsafeOutput阻擋專案外路徑。
本階段必要摘要欄位:保留前三階段全部欄位,並將同一份摘要寫入 summary.json。
暫測:重新執行兩次 case1_sensor_classifier_matlab;固定種子摘要應一致。
案例二
階段一:合成紙面影像
目標:以矩陣、meshgrid、inpolygon 建立米白背景、紅色不規則色塊與藍色干擾塊。
提示詞:
延續案例二骨架。只用 base MATLAB 建立 320×240 RGB PNG;新增
paintMask與ensureSafeOutput局部函式。輸出固定為synthetic_paper_blocks.png。每個含程式內容的行加繁中行尾註解。
本階段必要摘要欄位:outputDir。
暫測:執行 s = case2_image_measure_matlab; size(imread(fullfile(s.outputDir,'synthetic_paper_blocks.png'))),應為 240 320 3;本階段暫時在摘要保留 outputDir。
階段二:門檻與最大連通元件
目標:以紅色通道至少 170、紅色優勢至少 55 分割,並自行實作四方向連通搜尋。
提示詞:
保留階段一。新增 base MATLAB 局部函式
largestComponent(mask),自行完成最大連通元件搜尋。空分割以Tutorial:EmptySegmentation停止。摘要暫存pixelArea。
本階段必要摘要欄位:保留 outputDir,新增 redThreshold, dominanceMargin, pixelArea。
暫測:執行 s = case2_image_measure_matlab; assert(s.pixelArea > 0);。
階段三:輪廓與比例換算
目標:自行抽取四方向輪廓,以整個元件像素數換算平方毫米。
提示詞:
新增
contourPixels(component)。設定pixelSizeMm=1.0,計算areaSquareMm=pixelArea*pixelSizeMm^2。分開保存contourPixelCount;面積請使用原始分割元件的像素數,並在疊圖用[255 0 0]純紅色標出外輪廓。
本階段必要摘要欄位:保留前兩階段欄位,新增 pixelSizeMm, contourPixelCount, areaSquareMm, areaNote。
暫測:執行 s = case2_image_measure_matlab; assert(s.pixelSizeMm==1.0); assert(s.contourPixelCount < s.pixelArea); assert(abs(s.areaSquareMm-s.pixelArea)<1e-10);。
階段四:影像與 JSON 產物
目標:保存遮罩、輪廓疊圖與可稽核參數。
提示詞:
完成最終案例二介面,輸出原圖、
segmentation_mask.png、contour_overlay.png、measurement.json;新增writeJson。採影像處理流程完成本案例。
本階段必要摘要欄位:保留前三階段全部欄位,新增 conversionFormula,並寫入 measurement.json。
暫測:重跑兩次並比較 pixelArea;固定合成結果應一致。
案例三
階段一:建立中性路徑圖庫
目標:先洗牌標籤,再分配中性流水檔名;Train 與 Test 使用不同固定種子。
提示詞:
延續案例三骨架。新增
buildSplit、drawShape、polygonPoints、pixelSignature、ensureSafeOutput。所有類別使用同尺寸、背景、前景;影像放在images/train與images/test,標籤集中寫在 manifest。共享精確像素簽章集合,重複就重畫,最多 50 次。主函式在本階段建立、寫入並讀回兩份 manifest;讀取 CSV 時明確指定'Delimiter',','、'TextType','string'、'VariableNamingRule','preserve',讓路徑中的斜線保持為欄位內容。回傳下列必要摘要欄位;特徵與模型函式將在後續階段加入。
本階段必要摘要欄位:outputDir, seedTrain, seedTest, labels, trainCount, testCount, trainUniquePixelCount, testUniquePixelCount, trainTestPixelOverlap。
暫測:執行 s = case3_shape_classifier_matlab; assert(s.trainCount==108); assert(s.testCount==45); assert(s.trainUniquePixelCount==s.trainCount); assert(s.testUniquePixelCount==s.testCount); assert(isempty(s.trainTestPixelOverlap));。
階段二:讀圖與特徵
目標:從實際 PNG 抽取 fillRatio, circularity, areaRatio。
提示詞:
保留階段一。新增
resolvePaths與extractFeatures;以前景平均亮度小於 128 判定圖形,自行計算四方向邊界長度。缺圖與空前景須有固定錯誤識別碼。主函式抽取 Train 與 Test 特徵,模型訓練安排在下一階段。
本階段必要摘要欄位:保留階段一欄位,新增 features, featurePreview;featurePreview 保存前三筆實際 Train 特徵。
暫測:執行 s = case3_shape_classifier_matlab; disp(s.features); disp(s.featurePreview); assert(all(isfinite(s.featurePreview),'all'));。本階段直接檢查已產生的特徵摘要;evaluation.json 將在第四階段建立。
階段三:Train-only 前處理與三近鄰
目標:只用 Train 特徵擬合標準化,Test 只做獨立評估。
提示詞:
新增自行實作的
predictKnn與multiclassConfusion。摘要保存 Train 平均值、標準差、混淆矩陣與 accuracy。平手時依標籤文字固定排序。
本階段必要摘要欄位:保留前兩階段欄位,新增 standardizerMeans, standardizerScales, confusionMatrix, accuracy。
暫測:執行 s = case3_shape_classifier_matlab; assert(sum(s.confusionMatrix,'all')==s.testCount);。
階段四:洩漏檢查、輸出與限制
目標:從實際 manifest 與 PNG 重算路徑和像素交集,保存逐張預測與限制。
提示詞:
完成最終案例三介面。路徑或像素交集包含項目時停止;輸出兩份 manifest、影像、
test_predictions.csv、evaluation.json。限制必須寫明:本範例呈現合成簡單圖形的結果,真實照片與其他合成規則捷徑需另行評估。
本階段必要摘要欄位:保留前三階段全部欄位,新增 trainTestPathOverlap, limitation,並寫入 evaluation.json。
暫測:執行 run_matlab_tests;以 MATLAB 實際輸出作為執行依據。
MATLAB 起始骨架
先建立對應檔名,再貼入骨架。執行骨架會顯示準備完成。接著依 MATLAB_STAGE_PROMPTS.md 逐步用正式資料流程取代 disp。局部輔助函式放在主要函式的 end 之後,並沿用教材指定的函式名稱。
三個骨架後續會依固定設定展開:案例一採 80% Train Set 與 20% Test Set;案例二採 1 mm × 1 mm/像素並畫純紅色外輪廓;案例三保留獨立 Train Set/Test Set。完成程式後,請從最終來源重新產生逐段教材,讓流程分段與段內行號持續一致。
case1_sensor_classifier_matlab.m
function summary = case1_sensor_classifier_matlab(outputDir) % 定義案例一主函式。
projectRoot = fileparts(mfilename('fullpath')); % 由本檔位置取得固定專案根目錄。
if nargin < 1 % 呼叫者省略輸出位置時套用預設值。
outputDir = fullfile(projectRoot,'matlab_artifacts','case1'); % 使用專案內預設路徑。
end % 結束預設路徑條件。
summary = struct; % 建立暫時摘要結構。
summary.outputDir = outputDir; % 保存暫時輸出位置供檢查。
disp('案例一骨架準備完成'); % 顯示骨架可執行訊息。
end % 結束案例一骨架主函式。
case2_image_measure_matlab.m
function summary = case2_image_measure_matlab(outputDir) % 定義案例二主函式。
projectRoot = fileparts(mfilename('fullpath')); % 由本檔位置取得固定專案根目錄。
if nargin < 1 % 呼叫者省略輸出位置時套用預設值。
outputDir = fullfile(projectRoot,'matlab_artifacts','case2'); % 使用專案內預設路徑。
end % 結束預設路徑條件。
summary = struct; % 建立暫時摘要結構。
summary.outputDir = outputDir; % 保存暫時輸出位置供檢查。
disp('案例二骨架準備完成'); % 顯示骨架可執行訊息。
end % 結束案例二骨架主函式。
case3_shape_classifier_matlab.m
function summary = case3_shape_classifier_matlab(outputDir) % 定義案例三主函式。
projectRoot = fileparts(mfilename('fullpath')); % 由本檔位置取得固定專案根目錄。
if nargin < 1 % 呼叫者省略輸出位置時套用預設值。
outputDir = fullfile(projectRoot,'matlab_artifacts','case3'); % 使用專案內預設路徑。
end % 結束預設路徑條件。
summary = struct; % 建立暫時摘要結構。
summary.outputDir = outputDir; % 保存暫時輸出位置供檢查。
disp('案例三骨架準備完成'); % 顯示骨架可執行訊息。
end % 結束案例三骨架主函式。
在 Command Window 分別輸入三個函式名稱。看到骨架準備完成後,再進入第一階段。這項檢查確認函式檔可被找到與呼叫;案例演算法將在後續階段逐步完成與驗證。