最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

[忤旭]《MATLAB》Simulink自動(dòng)更改參數(shù)示例

2021-03-16 16:03 作者:忤旭v  | 我要投稿

  大家好,我是忤旭!

  今天分享的是關(guān)于MATLAB仿真中利用腳本和回調(diào)函數(shù)來實(shí)現(xiàn)一鍵多次仿真,并且每次仿真都自動(dòng)修改參數(shù)。需要注意的文中腳本只針對(duì)每次仿真數(shù)據(jù)是定值的模型,如果要保存時(shí)變數(shù)據(jù)請(qǐng)自行修改腳本。

修改當(dāng)前工作文件夾

  進(jìn)入MATLAB后,先將當(dāng)前工作文件夾切換到你想要的文件夾。

新建腳本文件

腳本編寫

  完整的腳本,在文章的最后會(huì)進(jìn)行代碼分析。

仿真模型搭建

  搭建你的仿真模型,這里只是舉個(gè)例子。

  設(shè)置直流電源的參數(shù)為變量inp,后續(xù)每次仿真都修改它的值。

設(shè)置回調(diào)函數(shù)

  通過設(shè)置回調(diào)函數(shù)來建立Simulink模塊與MABLAB工作空間的聯(lián)系。

  我選擇預(yù)加載函數(shù)來建立橋梁,并在預(yù)加載函數(shù)中定義了MATLAB工作空間中的變量inp,也就是模型每次加載時(shí)都會(huì)創(chuàng)建一個(gè)inp的工作空間變量,同時(shí)直流電源的參數(shù)由這個(gè)變量決定。

記錄數(shù)據(jù)到MATLAB工作空間

  為了保存每次仿真的數(shù)據(jù),必須將每次仿真的數(shù)據(jù)記錄到MATLAB工作空間以寫入Excel。右鍵信號(hào)線并選擇Log Selected Signals以將這條信條線的數(shù)據(jù)記錄到MATLAB工作空間。

  需要注意的是哪條信條線先進(jìn)行記錄根據(jù)你自己而定,比如這張圖里我選擇先記錄電流,再記錄電壓,這將與最后仿真結(jié)果中數(shù)據(jù)的順序有關(guān)。

腳本運(yùn)行

  運(yùn)行腳本后,等待一段時(shí)間,這與你設(shè)置的仿真次數(shù)有關(guān),當(dāng)腳本運(yùn)行完畢后你就會(huì)得到圖中保存了所有你記錄的信號(hào)線的data.xlsx,右邊的simOut是單次仿真的數(shù)據(jù),下面會(huì)講解如何在simOut中找到你要的數(shù)據(jù)。

單次仿真數(shù)據(jù)保存的地方

  注意觀察圖中右框中顯示的內(nèi)容,是否是你想要的數(shù)據(jù)順序,如果不是請(qǐng)重新返回模型修正記錄順序。

  這就是你記錄的第1條信號(hào)線的單次仿真數(shù)據(jù),紅框中是數(shù)據(jù)地址,在最后加上數(shù)據(jù)索引就可以得到一個(gè)具體數(shù)值了。比如圖中第1個(gè)數(shù)值1需要使用.Data(1,1)來進(jìn)行索引,而這一列的數(shù)值你可以使用.Data(:,1)來索引。

查看所有仿真數(shù)據(jù)保存的Excel文件

  可以從圖中看到第1列數(shù)據(jù)為記錄的電流,第2列數(shù)據(jù)為記錄的電壓,與預(yù)期的數(shù)據(jù)順序符合。

代碼分析

model = 'Test';? ? ? ? ? ? ? ? ? ? ?%仿真模型名稱,不用加.slx后綴

定義存放模型名的變量,根據(jù)你模型名字進(jìn)行修改。

inp = 1;? ? ? ? ? ? ? ? ? ? ? ? ? ? %變量初始化

定義仿真模型中每次要改變的參數(shù),你也可以定義好幾個(gè)。

inp_series = 1:1:10;? ? ? ? ? ? ? ? %設(shè)置變量的數(shù)組

定義一個(gè)數(shù)組,用來存放參數(shù)準(zhǔn)備更改的值,比如1:1:10就是inp將從1仿真到10,每次步長(zhǎng)為1。


Excel_name = 'data.xlsx';? ? ? ? ? ?%保存數(shù)據(jù)的Excel文件名

定義存放Excel名字的變量,你可以改名。

head1 = "1";? ? ? ? ? ? ? ? ? ? ? ? %數(shù)據(jù)1的頭

定義數(shù)據(jù)1的頭,也就是一列數(shù)據(jù)的名字。

head2 = "2";? ? ? ? ? ? ? ? ? ? ? ? %數(shù)據(jù)2的頭

定義數(shù)據(jù)2的頭,也就是一列數(shù)據(jù)的名字。

Excel_data_head = [head1, head2];? ?%存放數(shù)據(jù)頭的變量

定義存放數(shù)據(jù)頭的變量,你可以按你需要增加或減少數(shù)據(jù)頭。


%%

open_system(model);

打開Simulink模塊。

load_system(model);

加載model仿真模型。


for i = 1:1:length(inp_series)

循環(huán)參數(shù)數(shù)組。

? ? inp = inp_series(i);

????從參數(shù)數(shù)組中取一個(gè)新參數(shù)賦給參數(shù)inp。

? ? simOut = sim(model);

????對(duì)model仿真模型開始仿真。

? ??

? ? if exist(Excel_name, 'file')==0

????判斷當(dāng)前工作文件夾中是否存在名為Excel_name的Excel。

? ? ? ? disp('no Excel file');

????????如果不存在就打印不存在Excel文件。

? ? ? ? Excel_data_head_position = strcat(['A', '1', ':', char('A' + length(Excel_data_head) - 1), '1']);

????????根據(jù)定義的數(shù)據(jù)頭變量長(zhǎng)度來創(chuàng)建數(shù)據(jù)頭位置變量。

? ? ? ? xlswrite(Excel_name, Excel_data_head, 'sheet1', Excel_data_head_position);

????????根據(jù)數(shù)據(jù)頭位置變量將數(shù)據(jù)頭變量寫入名為Excel_name的Excel文件中。

? ? ? ? disp('Excel has been created');

????????打印Excel已經(jīng)創(chuàng)建。

? ? end

? ? load = xlsread(Excel_name, 'sheet1');

????加載名為Excel_name的Excel文件的sheet1工作表。

? ? [m, n] = size(load);

????計(jì)算Excel的形狀并賦值給m和n。

? ? m = m + 1;

????行數(shù)加1。

? ? write_position = strcat(['A', num2str(m), ':', char('A' + length(Excel_data_head) - 1), num2str(m)]);

????根據(jù)當(dāng)前行數(shù)和數(shù)據(jù)頭變量長(zhǎng)度來定義數(shù)據(jù)位置變量。

? ? data = [];

????定義數(shù)據(jù)變量為一維數(shù)組。

? ? for j = 1:1:length(Excel_data_head)

????根據(jù)數(shù)據(jù)頭長(zhǎng)度進(jìn)行循環(huán)。

? ? ? ? data = [data simOut.logsout{j}.Values.Data(1:1)];

????????從仿真數(shù)據(jù)中依次取得信號(hào)線數(shù)據(jù),并存放進(jìn)數(shù)據(jù)變量中。需要注意雖然文中(1:1)與(1,1)等價(jià),但單個(gè)數(shù)據(jù)索引應(yīng)使用(1,1),列向量數(shù)據(jù)索引應(yīng)使用(:,1)。

? ? end

? ? result = xlswrite(Excel_name, data, 'sheet1', write_position);

????根據(jù)將數(shù)據(jù)data寫入名為Excel_name的Excel的sheet1的write_position位置。

end

喜歡這篇文章就點(diǎn)贊吧~



[忤旭]《MATLAB》Simulink自動(dòng)更改參數(shù)示例的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
三原县| 翁源县| 太原市| 乌拉特后旗| 泸水县| 乌兰县| 东乡| 华坪县| 九寨沟县| 罗定市| 上高县| 体育| 弥勒县| 泸水县| 富锦市| 沂水县| 蛟河市| 温宿县| 五指山市| 宣恩县| 新沂市| 牟定县| 从化市| 巴林右旗| 博湖县| 汝城县| 交城县| 合川市| 瓦房店市| 宜宾市| 友谊县| 惠水县| 泰来县| 肃宁县| 衡阳市| 阿图什市| 临颍县| 通渭县| 吉林省| 阿尔山市| 年辖:市辖区|