- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上版
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料匯出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策語句
- MATLAB - if 語句
- MATLAB - if else 語句
- MATLAB - if…elseif else 語句
- MATLAB - 巢狀 if 語句
- MATLAB - switch 語句
- MATLAB - 巢狀 switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - for 迴圈
- MATLAB - while 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - break 語句
- MATLAB - continue 語句
- MATLAB - end 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - return 語句
- MATLAB - 無返回值函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - filter 函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序
- MATLAB - map 函式
- MATLAB - mean 函式
- MATLAB - end 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - try…catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 二維線圖
- MATLAB - 三維圖
- MATLAB - 格式化繪圖
- MATLAB - 對數座標軸圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製三維等值線圖
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 二維陣列插值
- MATLAB - 三維陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 二維逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者定義類
- MATLAB - 物件複製
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約旦消元法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 其他
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
MATLAB - 物件複製
在 MATLAB 中使用物件時,瞭解它們在複製操作中的行為至關重要。MATLAB 物件分為兩類:控制代碼物件和值物件。這兩種型別之間的區別會影響物件的副本如何管理以及對一個副本的更改如何影響其他副本。
值物件的行為類似於陣列或數值等基本資料型別,其中每個副本都是一個獨立的實體。對一個副本的更改不會影響任何其他副本。
另一方面,控制代碼物件透過引用進行操作。控制代碼物件的副本不會建立新的獨立例項;相反,它們引用相同的底層物件。因此,透過一個控制代碼引用進行的修改可以透過對同一物件的 所有其他引用可見。
瞭解這些行為對於在 MATLAB 中進行有效的程式設計至關重要,尤其是在管理複雜資料結構並確保程式碼按預期執行時。
讓我們更詳細地瞭解值物件。
值物件
MATLAB 中的值物件的操作方式類似於數字和陣列等基本資料型別。複製值物件時,副本是完全獨立的實體。對一個副本進行的任何修改都不會影響該物件的任何其他副本。這種行為確保每個副本都保持其狀態,不受對其他副本的更改的影響。
例如,考慮一個值物件 A。如果您建立 A 的副本 B,則 A 和 B 將作為單獨的例項存在。對 B 執行的任何操作都不會影響 A,反之亦然。
值物件示例
classdef ValueClass
properties
Property1
end
end
obj1 = ValueClass;
obj1.Property1 = 10;
obj2 = obj1; % Create a copy of obj1
obj2.Property1 = 20; % Modify obj2
% obj1 remains unchanged
disp(obj1.Property1); % Output: 10
disp(obj2.Property1); % Output: 20
控制代碼物件
另一方面,控制代碼物件的功能不同。控制代碼物件透過控制代碼變數引用,複製此變數不會建立新的獨立物件。相反,控制代碼變數的所有副本都指向相同的底層物件。因此,透過一個控制代碼變數進行的任何更改都會反映在引用同一物件的 所有其他控制代碼變數中。
例如,如果 H1 是一個控制代碼物件,而 H2 是 H1 的副本,則 H1 和 H2 都引用相同的物件。因此,對 H2 執行的操作在透過 H1 訪問物件時會立即可見。
控制代碼物件示例
classdef HandleClass < handle
properties
Property1
end
end
obj1 = HandleClass;
obj1.Property1 = 10;
obj2 = obj1; % Create a handle to obj1
obj2.Property1 = 20; % Modify obj2
% obj1 reflects the change
disp(obj1.Property1); % Output: 20
disp(obj2.Property1); % Output: 20
在 MATLAB 中使用 copyobj 複製物件
使用 copyobj 函式將物件從一個父物件複製到另一個父物件。新副本將在幾個方面與原件不同:
- Parent 屬性將設定為新的父物件。
- 複製物件的控制代碼將與原件不同。
- copyobj 不會複製原始物件的回撥屬性。
- 與原始物件關聯的任何應用程式資料都不會被複制。
因此,使用 == 和 isequal 比較原始控制代碼和新控制代碼將返回 false。
您可以將各種物件複製到新的父物件,或者將一個物件複製到多個新的父物件,前提是正確維護了父子關係。複製具有子物件的物件時,MATLAB 也會複製所有子物件。
語法
new_handle = copyobj(h,p)
copyobj 複製圖形物件並將它們分配給新的父物件。新的父物件必須適合於被複制的物件型別(例如,您只能將座標軸複製到圖形或面板)。該函式還複製父物件的所有子物件。
語法說明
new_handle = copyobj(h, p) 複製由 h 指定的一個或多個圖形物件,並將它們放在圖形物件 p 下。new_handle 是新建立的物件的控制代碼,或者對於多個複製的物件,是控制代碼陣列。
使用 copyobj 時,某些依賴於其原始上下文的屬性和物件不會被複制。例如,圖例和顏色條等元素會為複製的物件生成新的上下文選單,新的圖形將具有新的工具欄和選單。
以下是 copyobj 不復制的內容:
- 回撥函式 - 除非使用舊方法(傳統選項),否則事件觸發函式不會轉移。
- 應用程式資料 - 除非使用傳統選項,否則與物件關聯的任何額外資料都不會轉移。
- 上下文選單 - 圖例、顏色條和類似物件的預設上下文選單不會被複制。
- 工具欄和選單 - 圖形的預設工具欄和選單選項將被重新建立,而不是複製。
- 特殊座標軸 - 與 yyaxis 函式一起使用的座標軸不會被複制。
- 座標軸互動 - 與座標軸關聯的互動,例如縮放和平移,不會被複制。
- DataTipTemplate - 線、散點圖和曲面等物件上的自定義資料提示設定不會被轉移。
此外,您不能在一次 copyobj 呼叫中將同一個物件多次複製到同一個父物件。
MATLAB 會自動將 Parent 屬性更新為新的父物件,並將新的控制代碼分配給複製的物件。
使用 copyobj 的示例
我們擁有的程式碼是:
% Create a figure with some graphical objects
fig1 = figure('Name', 'Original Figure');
ax1 = axes('Parent', fig1);
plot(ax1, rand(10,1));
% Copy the figure to a new parent (another figure)
fig2 = figure('Name', 'Copied Figure');
newAx = copyobj(ax1, fig2);
% Update properties or callbacks as needed
set(newAx, 'Color', 'yellow');
在此示例中:
- 建立了一個帶有座標軸和繪圖的圖形 (fig1)。
- 使用 copyobj 將座標軸 (ax1) 複製到新的圖形 (fig2)。
- 修改複製的座標軸 (newAx)(例如,更改背景顏色),而原始圖形和座標軸保持不變。
在 matlab 命令視窗中執行程式碼後,我們將獲得以下輸出: