MATLAB安裝參考:抖音-記錄美好生活
MATLAB基礎知識學習參考:【1小時Matlab速成教程-嗶哩嗶哩】 https://b23.tv/CnvHtO3
第1部分:變量定義和基本運算?
生成矩陣:
% 生成矩陣% 直接法% ,表示行 ;表示列 a = [1,2,3;4,5,6;7,8,9];% 冒號一維矩陣 a = 開始:步長:結束,步長為1可省略b = 1:1:10; % 1,2,...10b = 1:10; % 與上一個等價% 函數生成% linspace(開始,結束,元素個數),等差生成指定元素數的一維矩陣,省略個數則生成100個c = linspace(0,10,5); % 在0和10之間生成等間距的5個元素% 特殊矩陣% eye(維數)單位陣 4*4e = eye(4); % zeros(維數)全零陣 1*4z = zeros(1,4);% ones(維數)全1陣 4*1 o = ones(4,1);% rand(維數)0~1分布隨機陣 r = rand(4); % randn(維數)0均值Gaussian分布隨機陣 rn = randn(4);
矩陣運算:
% 矩陣運算% diag(行向量,主對角線上方第k條斜線)用行向量生成對角陣diag_a = diag(a,1);% tril(矩陣,主對角線上方第k條斜線)生成矩陣的下三角陣,triu上三角陣 tril_a = tril(a,1);% 加、減、乘、乘方(矩陣運算)a*a% 點運算% a.*b , a./b , a.\b , a.^b 對應元素的*,/,\,^運算% 點乘運算保證矩陣維數相等a.*a% 逆矩陣% 偽逆矩陣,當a不是方陣,求廣義逆矩陣;當a是可逆方陣,結果與逆矩陣相同% 直接通過MatLab得到線性方程的解pinv(a) % 特征值,特征向量[v,D] = eig(a); % 輸出v為特征向量,D為特征值對角陣% *行列式det(a)% *秩rank(a)% *伴隨compan(b)
矩陣的修改:
在Matlab中矩陣存儲一般是列優先的
% 矩陣的修改%部分替換chg_a = a;chg_a(2,3) = 4; % (行,列)元素替換chg_a(1,:) = [2,2,2]; % (行,:)替換行,為[]刪除該行chg_a(:,1) = []; % (:,列)替換列,為[]刪除該列% 轉置T_a = a';% 指定維數拼接c1_a = cat(1,a,a); % 垂直拼接c2_a = cat(2,a,a); % 水平拼接% *變維rs_a = reshape(a,1,9); % 元素個數不變,矩陣變為m*n
信息獲取:
常用len_a來獲取行和列中的最大值
% 信息獲取% 矩陣的行列數[row_a, col_a] = size(a); % [行數,列數]% 行列中最大的len_a = length(a);
多維數組:
cat在matlab中是常用的一種拼接方式,這里cat中的”3“指的是按三維將兩個矩陣進行拼接
% 多維數組% 創建% 直接法mul_1(:,:,1) = [1,2,3;2,3,4];mul_1(:,:,2) = [3,4,5;4,5,6];% *擴展法mul_2 = [1,2,3;2,3,4];mul_2(:,:,2) = [3,4,5;4,5,6]; % 若不賦值第一頁,第一頁全為0% cat法mul_31 = [1,2,3;2,3,4];mul_32 = [3,4,5;4,5,6];mul_3 = cat(3,mul_31,mul_32); % 把a1a2按照“3”維連接
字符串:
字符串在matlab中并不常用,但后續的__2__函數中可能會將字符串轉化為其他形式,或將其他形式轉化為字符串的形式
% *字符串% 創建str0 = 'hello world'; % 單引號引起str1 = 'I''m a student'; % 字符串中單引號寫兩遍str3 = ['I''''a' 'student']; % 方括號鏈接多字符串str4 = strcat(str0, str1); % strcat連接字符串函數str5 = strvcat(str0, str1); % strvcat連接產生多行字符串str6 = double(str0); % 取str0的ASCII值,也可用abs函數str7 = char(str6); % 把ASCII轉為字符串% 操作% 比較strcmp(str0, str1); % 相等為1,不等為0strncmp(str0, str1, 3); % 比較前3個是否相等(n)strcmpi(str0, str1); % 忽略大小寫比較(i)strncmpi(str0, str1, 3); % 忽略大小寫比較前3個是否相等% 查找替換strfind(str0, str1); % 在str0找到str1的位置strmatch(str1, str0); % 在str0字符串數組中找到str1開頭的行數strtok(str0); % 截取str0第一個分隔符(空格,tab,回車)前的部分strrep(str0, str1, str2); % 在str0中用str2替換str1% 其他upper(str0); % 轉大寫,lower轉小寫strjust(str0, 'right'); % 將str0右對齊,left左對齊,center中間對齊strtrim(str0); % 刪除str0開頭結尾空格eval(str0); % 將str0作為代碼執行
?轉換:
% ___2___ ?--> 如num2str,將數字轉字符串; dec2hex,將十進制轉十六進制
%轉換str_b = num2str(b);% abs,double取ASCII碼;char把ASCII轉字符串abs_str = abs('aAaA');
第2部分:程序結構
程序控制:
continue: 跳過當次循環剩下語句,進入下一循環
break :跳出當前循環
return :跳出程序并返回
與其他語言相類似,matlab中也包含選擇結構和循環結構這樣普通的程序控制結構,與python的表示形式類似,需要用縮進來表示程序的執行步驟,但是不需要像python一樣使用冒號”:“
%%
a = 5;
x = [1, 2]; y =[3, 4];%%
% 選擇結構%if-elseif-else-endif a>0disp(x);elseif a==0disp(a);elsedisp(a-1);end% switch-case-otherwise-endswitch acase 0disp(a);case 1disp(a+1);otherwisedisp('aaa');end% try-catchtryz = x*y;catchz = x.*y; % 若try出錯,則執行enddisp(z);%%
% 循環結構% for 循環變量=初值:步長:終值 - endfor i=0:1:10 % 步長為負,則初值大于終值disp(i); % 循環體內不可對循環變量做修改end% while-endwhile a>2disp(a);a = a-1;end
?m文件:
% m文件% 腳本文件:沒有輸入輸出參數,執行后變量結果返回工作空間,可直接運行% 以下是腳本文件,文件名假設為exp.m% **********************************************clearr = 5;s = pi*r*r;p = 2*pi*r;disp(s)disp(p)% **********************************************% 以下是調用% **********************************************exp% **********************************************% 函數文件:以function開頭,有輸入輸出,變量為局部變量不返回工作空間,需要調用% 以下是函數文件% **********************************************function [s, p] = circ(r) % 文件命名應與函數名一致,系統找文件名circ.m% CIRC 計算圓面積和周長 % 簡單說明% 參數:輸入參數r:圓半徑;輸出參數s:圓面積,p:周長 % 詳細說明s = pi*r*r;p = 2*pi*r;end%**********************************************% 以下是調用%**********************************************[a, b] = circ(5); % 返回為多個參數時,若寫a = circ(5)則保留第一個返回值%**********************************************% *以下是帶子函數的函數文件% **********************************************function y = key(w) % 主函數放第一個,函數名為keyif w==0y = type0(w); % 調用子函數type0elsey = type1(w);endendfunction y0 = type0(a) % 子函數,各子函數之間順序無所謂y0 = a+1;endfunction y1 = type1(a)y1 = a+4;end% **********************************************% *函數輸入輸出參數可以不定% nargin:輸入參數個數,nargout:輸出參數個數% varargin:輸入參數內容的元胞數組,varargout:輸出參數% 以下是函數文件% **********************************************function varargout = idk(varargin)x = length(varargin);varargout{1} = x;varargout{2} = x+1;end% **********************************************
?第3部分:圖像繪制
二維曲線繪制:
線性圖形設計:
顏色: b藍 g綠 r紅 c青 m紫 y黃 k黑 w白
線:-實線 :點線 --虛線 -.點畫線
點:.實點 o圓圈 x叉 +十字 *星號 s方塊 d鉆石 v下三角 ^上三角 <左三角 >右三角 p五角星 h六角星
%%
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);%%
% 二維曲線繪制% 基本函數% plot(y)% y為向量% 縱坐標為y的值;橫坐標自動為元素序號(角標+1),此處為1~9plot(y1); % y為矩陣figure; % 開啟新繪圖窗口,下一次繪圖在新窗口y = [y1', y2'];plot(y); % 當y為矩陣,按每一列畫出曲線,顏色自動區分% plot(x, y)% xy為向量plot(x, y1); % 先繪制曲線% plot(x1, y1, x2, y2...)plot(x, y1, x, y2); % 在同一個窗口同一坐標軸繪制多條曲線% 線性圖形格式設置% 線形顏色數據點plot(x, y1, 'b:o'); % 藍色 點線 圓圈% 坐標軸plot(x, y1);axis([-1*pi, 3*pi, -1.5, 1.5]); % 規定橫縱坐標范圍% 圖形修飾% 標題標簽title('a title'); % 圖像標題xlabel('this is x'); % x軸標記,同理還有ylabel,zlabel% 圖例設置legend'hahaha', 'location', 'best'); % str的順序與繪圖順序一致; 'best'指圖例位置最佳化,還有其他位置% 圖形保持plot(x, y1);hold on; % 在原有窗口y1曲線上增加繪制下一個圖形plot(x, y2); % y2在同一窗口內被繪制 hold off;% 分割繪制subplot(2, 2, 1); % 分割成2x2區域,在第一塊區域繪制下一個圖形plot(x, y1); % y1被繪制在4塊區域的第一塊subplot(2, 2, 2); % 分割方法相同,區域改變plot(x, y2); % y2在第二塊區域%%
二維特殊圖形繪制:
%*二維特殊圖形繪制% 柱狀圖bar(x, y, width, '參數'); % x橫坐標向量,m個元素; y為向量時,每個x畫一豎條共m條,矩陣mxn時,每個x畫n條;% width寬度默認0.8,超過1各條會重疊;% 參數有grouped分組式,stacked堆棧式; 默認grouped% bar垂直柱狀圖,barh水平柱狀圖,bar3三維柱狀圖,barh3水平三維柱狀圖(三維多一個參數detached, 且為默認)% 餅形圖pie(x, explode, 'lable'); % x為向量顯示每個元素占總和百分比, 為矩陣顯示每個元素占所有總和百分比% explode向量與x同長度,為1表示該元素被分離突出顯示,默認全0不分離% pie3繪制三維餅圖% 直方圖hist(y, n); % y為向量,把橫坐標分為n段繪制hist(y, x); % x為向量,用于指定每段中間值, 若取N = hist(y, x), N為每段元素個數% 離散數據圖stairs(x, y, 'b-o'); % 階梯圖,參數同plotstem(x, y, 'fill'); % 火柴桿圖,參數fill是填充火柴桿,或定義線形candle(HI, LO, CL, OP); % 蠟燭圖:HI為最高價格向量,LO為最低價格向量,CL為收盤價格向量,OP為開盤價格向量% 向量圖compass(u, v, 'b-o'); % 羅盤圖橫坐標u縱坐標vcompass(Z, 'b-o'); % 羅盤圖復向量Zfeather(u, v, 'b-o'); % 羽毛圖橫坐標u縱坐標vfeather(Z, 'b-o'); % 羽毛圖復向量Zquiver(x, y, u, v); % 以(x, y)為起點(u, v)為終點向量場圖% 極坐標圖% polar(theta, rho, 'b-o'); % 極角theta, 半徑rhotheta = -pi:0.01:pi;rho = sin(theta);polar(theta, rho, 'b')% 對數坐標圖semilogx(x1, y1, 'b-o'); % 把x軸對數刻度表示, semilogy是y軸對數刻度表示,loglog是兩個坐標都用對數表示% 雙縱坐標plotyy(x1, y1, x2, y2, 'fun1', 'fun2'); % fun規定了兩條條線的繪制方式,如plot,semilogx,semilogy,loglog,stem等% 函數繪圖f = 'sin(2*x)';ezplot(f, [0, 2*pi]); % 繪制f并規定橫坐標范圍,也有[xmin, xmax, ymin, ymax]x = '2*cos(t)';y = '4*sin(t)';ezplot(x, y); % 繪制x(t),y(t)在[0, 2*pi]圖像, 也可以在最后用[tmin, tmax]規定t的范圍
?三維曲線曲面繪制:
% 三維曲線曲面繪制% 三維曲線x = 0:0.1:2*pi;y = sin(x); z = cos(x);plot3(x, y, z, 'b-*');% 三維曲面% 三維網格x = -5:0.1:5; % 規定了x軸采樣點,也規定了x軸范圍y = -4:0.1:4; % 規定了y軸采樣點,也規定了y軸范圍[X, Y] = meshgrid(x, y); % 得到了xoy面網格點Z = X.^2+Y.^2;mesh(X, Y, Z) % XY是meshgrid得到的網格點,Z是網格頂點,c是用色矩陣可省略% 三維表面圖x = -5:0.1:5; y = -4:0.1:4;[X, Y] = meshgrid(x, y);Z = X.^2+Y.^2; % 以上部分同上surf(X, Y, Z) % 與上一個類似
第4部分:多項式
多項式:
多項式創建時自動按照系數向量,按x降冪排列,最右邊是常數,若所給數字為[1,2,3,4],則生成的多項式為,最后一項為常數
%%
% 多項式% 創建p = [1, 2, 3, 4]; % 系數向量,按x降冪排列,最右邊是常數f1 = poly2str(p, 'x'); % 生成好看的字符串 f1 = x^3 + 2 x^2 + 3 x + 4,不被認可的運算式f2 = poly2sym(p); % 生成可用的符號函數 f2 = x^3 + 2*x^2 + 3*x + 4% 求值x = 4;y1 = polyval(p, x); % 代入求值;若x1為矩陣,則對每個值單獨求值% 求根r = roots(p); % p同上,由系數求根,結果為根植矩陣p0 = poly(r); % 由根求系數,結果為系數矩陣%%
數據插值:
% 數據插值% 一維插值%yi = interp1(X, Y, xi, 'method')X = [-3, -1, 0, 1, 3];Y = [9, 1, 0, 1, 9]; % XY為已知點橫縱坐標向量y2 = interp1(X, Y, 2); % 差值預估在x=2的y的值,x不能超過已知范圍(此處x<3)y2m = interp1(X, Y, 2, 'spline'); % 用spline方法(三次樣條)差值預估在x=2的y的值% 二維插值%zi = interp1(X, Y, Z, xi, yi,'method')
數據統計:
%%
X = [2, 3, 9, 15, 6, 7, 4];
A = [1, 7, 2; 9, 5, 3; 8, 4 ,6];
B = [1, 7, 3; 9, 5, 3; 8, 4 ,6];% 數據統計% 矩陣最大最小值y = max(X); % 求矩陣X的最大值,min最小值[y, k] = max(X); % 求最大值,k為該值的角標[y, k] = max(A, [], 2); % A是矩陣,'2'時返回y每一行最大元素構成的列向量,k元素所在列;'1'時與上述相同% 均值和中值y = mean(X); % 均值y = median(X); % 中值y = mean(A, 2); % '2'時返回y每一行均值構成的列向量;'1'時與上述相同y = median(A, 2); % '2'時返回y每一行中值構成的列向量;'1'時與上述相同% 排序Y = sort(A, 1, 'ascend'); % sort(矩陣, dim, 'method')dim為1按列排序,2按行排序;ascend升序,descend降序[Y, I] = sort(A, 1, 'ascend'); % I保留了元素之前在A的位置% 求和求積累加累乘y = sum(X); % 求和y = prod(X); % 求積y = cumsum(X); % 累加y = cumprod(X); % 累乘
數值計算:
% *數值計算% 最(極)值%多元函數在給定初值附近找最小值點x = fminsearch(fun, x0);% 函數零點x = fzero(fun, x0); % 在給定初值x0附近找零點
第5部分:符號函數
符號對象創建:
%%
% 符號對象創建% sym函數p = sin(pi/3);P = sym(p, 'r'); % 用數值p創建符號常量P;'d'浮點數'f'有理分式的浮點數'e'有理數和誤差'r'有理數% syms函數syms x; % 聲明符號變量f = 7*x^2 + 2*x+9; % 創建符號函數% 符號對象精度轉換digits; % 顯示當前用于計算的精度digits(16); % 將計算精度改為16位,降低精度有時可以加快程序運算速度或減少空間占用a16 = vpa(sqrt(2)); % vpa括起的運算使sqrt(2)運算按照規定的精度執行a8 = vpa(sqrt(2), 8); % 在vpa內控制精度,離開這一步精度恢復
符號運算:
+加-減*乘/除外
?'轉置 ; ==相等 ; ~=不等?
sin, cos, tan; asin, acos, atan 三角反三角
sinh, cosh, tanh; asinh, acosh, atanh 雙曲反雙曲
conj復數共軛;real復數實部;imag復數虛部;abs復數模;angle復數幅角
diag矩陣對角;triu矩陣上三角;tril矩陣下三角;inv逆矩陣;det行列式;rank秩;poly特征多項式;
expm矩陣指數函數;eig矩陣特征值和特征向量;svd奇異值分解;
符號多項式函數運算:
%%
% 符號多項式函數運算% *符號表達形式與相互轉化% 多項式展開整理g = expand(f); % 展開h = collect(g); % 整理(默認按x整理)h1 = collect(f, x); % 按x整理(降冪排列)% 因式分解展開質因數fac = factor(h); % 因式分解factor(12); % 對12分解質因數% 符號多項式向量形式與計算syms a b c;n = [a, b, c];roots(n); % 求符號多項式ax^2+bx+c的根n = [1, 2, 3];roots(n); % 求符號多項式帶入a=1, b=2, c=3的根% *反函數fi = finverse(f, x); % 對f中的變量x求反函數%%
?符號微積分:
% 符號微積分% 函數的極限和級數運算% 常量a,b% 極限limit(f, x, 4); % 求f(x), x->4limit(f, 4); % 默認變量->4limit(f); % 默認變量->0limit(f, x, 4, 'right'); % 求f(x), x->4+, 'left' x->4-% *基本級數運算% 求和symsum(s, x, 3, 5); % 計算表達式s變量x從3到5的級數和,或symsum(s, x, [a b])或symsum(s, x, [a;b])symsum(s, 3, 5); % 計算s默認變量從3到5的級數和symsum(s); % 計算s默認變量從0到n-1的級數和% 一維泰勒展開taylor(f, x, 4); % f在x=4處展開為五階泰勒級數taylor(f, x); % f在x=0處展開為五階泰勒級數taylor(f); % f在默認變量=0處展開為五階泰勒級數% 符號微分% 單變量求導(單變量偏導)n = 1; % 常量nfn = diff(f, x, n); % f對x的n階導f1 = diff(f, x); % f對x的1階導diff(f, n); % f對默認變量的n階導diff(f); % 默認變量1階導% 多元偏導fxy = diff(f, x, y); % 先求x偏導,再求y偏導fxyz = diff(f, x, y, z); % 先求x偏導,再求y偏導,再求z偏導% 符號積分% 積分命令int(f, x, 1, 2); % 函數f變量x在1~2區間定積分int(f, 1, 2); % 函數f默認變量在ab區間定積分int(f, x); % 函數f變量x不定積分int(f); % 函數f默認變量不定積分% 傅里葉,拉普拉斯,Z變換%%
?符號方程求解:
% *符號方程求解% 符號代數方程% 一元方程eqn1 = a*x==b;S = solve(eqn1); % 返回eqn符號解% 多元方程組eqn21 = x-y==a;eqn22 = 2*x+y==b;[Sx, Sy] = solve(eqn21, eqn22, x, y); % [Svar1,...SvarN]=solve(eqn1,...eqnM, var1,...varN),MN不一定相等[Sxn, Syn] = solve(eqn21, eqn22, x, y,'ReturnCondition', true); % 加上參數ReturnCondition可返回通解及解的條件% 非線性fsolveX = fsolve(fun, X0, optimset(option)); % fun函數.m文件名;X0求根初值;option選項如('Display','off')不顯示中間結果等
其他參數(參數加上true生效):
IgnoreProperty,忽略變量定義時一些假設
IgnoreAnalyticConstraints,忽略分析限制;
MaxDegree,大于3解顯性解;
PrincipleValue,僅主值
Real,僅實數解