matlab筆記

顯示中文幫助的方法

預(yù)設(shè)→常規(guī)→幫助→在mathworks.com網(wǎng)站上(需要Internet連接)→語言(簡體中文)


/:右除。a/b表示矩陣a乘以矩陣b的逆。a/b == a * inv(b)

\:左除。a\b表示矩陣a的逆乘以b。 a\b == inv(a) * b

./:右除。a./b表示矩陣a中的每個(gè)元素除以矩陣b的對(duì)應(yīng)的元素。

.\:左除。a.\b表示矩陣b中的每個(gè)元素除以矩陣a的對(duì)應(yīng)的元素。

.*點(diǎn)乘不是矩陣的乘法,是對(duì)應(yīng)元素相乘。


1 MATLAB系統(tǒng)環(huán)境與設(shè)置

  • path函數(shù),可以查看搜索路徑包含的所有路徑。
  • cd返回當(dāng)前目錄。
  • userpath('路徑名')更改工作目錄。改好后用savepath保存路徑。
  • pathtool是界面工具,設(shè)置搜索路徑。

2 MATLAB的數(shù)據(jù)操作及語法

  • matlab變量區(qū)分大小寫,變量不聲明,拿來即用。
  • 回車表示一句語句結(jié)束,語句末尾有分號(hào),只執(zhí)行,不輸出在顯示欄。無分號(hào)則輸出執(zhí)行結(jié)果。
  • 一行不夠?qū)懙脑?,?..續(xù)行。
  • who顯示在工作空間中滯留的變量名,whos給出變量更詳細(xì)的信息。
  • clear命令清除工作空間中所有變量。clear a,清除變量a
  • 保存數(shù)據(jù)save [文件名] [變量名] [-append] [-ascii]
  • load [文件名] 載入變量文件
  • format數(shù)據(jù)輸出格式控制,只影響輸出格式,不影響計(jì)算和存儲(chǔ),默認(rèn)為short格式。
  • class()查看括號(hào)里變量的數(shù)據(jù)類型。

字符串

  • matlab中字符串使用單引號(hào)''括起來的。
  • double函數(shù)或abs函數(shù)可以獲取字符的ASCII值。
  • char(63)輸出ASCII碼為63代表的字符。
  • 字符串與數(shù)值間互換str2num, num2str
  • eval('t=1')執(zhí)行字符串中的語句,也就是t=1語句。
eval()函數(shù)一個(gè)很好的功能就是可以自動(dòng)生成一系列變量
注意eval()中拼接字符串外面要加中括號(hào)!
for x = 1:3
    eval(['a',num2str(x),' = 7'])
end
%% 相當(dāng)于執(zhí)行了下面三條語句
a1 = 7
a2 = 7
a3 = 7
  • 想要讓標(biāo)題也自動(dòng)編號(hào),要注意在字符串內(nèi)還想輸出單引號(hào)'的話,需要打兩個(gè)''
for y = 1:2
   eval(['title(''test',num2str(y),''');']);
end

結(jié)構(gòu)體

  • 結(jié)構(gòu)體.成員名=表達(dá)式
  • issturct(a)判斷a是不是結(jié)構(gòu)體
  • fieldnames(a)返回a中所有成員的成員名,返回類型為字符串?dāng)?shù)組
  • isfield(a, 'x1')判斷x1是不是a結(jié)構(gòu)體中的成員。
  • rmfield刪除結(jié)構(gòu)體中某個(gè)成員。
  • getfield獲得結(jié)構(gòu)體中的某個(gè)成員

Cell(單元或元胞)

  • 用大括號(hào)創(chuàng)建
    • a = {1, 'str', [11 22 33 44]}
  • 取元胞內(nèi)容
    • 小括號(hào)()表示取出指定位置的元胞,還是個(gè)元胞,不能用于比較,否則很難找到錯(cuò)誤。
    • 花括號(hào) { } 取出的是元胞指定位置的內(nèi)容,可以拿來做比較,或者借助 isempty 判斷是否為空。eg:if(~isempty(tagcity{i,j}))
    • 假設(shè)a元胞的第二個(gè)元素為[]既空元素,那么isempty(a(2)) 返回0,是一個(gè)錯(cuò)誤的結(jié)果。只有寫isempty(a{2})才會(huì)返回1,得到正確的判斷。

3 MATLAB的矩陣操作

  • zeros函數(shù)建立0矩陣,幺矩陣ones函數(shù)建立元素全為1的矩陣。
  • 冒號(hào)表達(dá)式建立向量。
    • e1:e2:e3,其中e1位初始值,e2位步長,e3為結(jié)束
  • linspace(a, b, n)建立行向量,a和b分別為行向量的第一個(gè)和最后一個(gè)元素,n為總個(gè)數(shù),省略n則默認(rèn)是產(chǎn)生100個(gè)元素。

矩陣索引

  • A(2, 3)獲得A矩陣的第二行第三列的元素。
  • matlab矩陣存放是按列存的,先存完第一列,然后存第二列,也可以用單索引值索引。
  • find(A == 8)返回A矩陣中,值為8的元素的位置。
  • [m, n] = find(A == 8)返回的是行列索引的形式。
  • ind = find(A == 8)返回的是單值索引的形式。
  • 兩種索引值的轉(zhuǎn)換:ind = sub2ind(size(A), m, n)
  • [m, n] = ind2sub(size(A), 3)

重排矩陣

  • reshape(A, 9, 1)將A重新排列為9行1列的向量。轉(zhuǎn)換成列向量,也可以這樣H = A(:):這個(gè)執(zhí)行效率更高。
  • 矩陣轉(zhuǎn)置用一個(gè)單引號(hào)‘

矩陣拆分

  • 獲得矩陣中某行某列的部分內(nèi)容。
  • M = A(1, :)獲得A矩陣中第一行的所有內(nèi)容。
  • M = A(1, 1:2)獲得A矩陣的第一行中的第一列到第二列
  • M = A(1, 1:end)獲得A矩陣的第一行中的第一列到最后一列
  • M = A(1, 1:end - 1)獲得A矩陣的第一行中的第一列到倒數(shù)第二列
  • M = A([1 2], [1 2])獲得A矩陣中的第一行第一列,第一行第二列,第二行第一列,第二行第二列。
  • P = A(2:3, 1:3)和P = A([2 3], [1 2 3])效果一樣。

刪除矩陣元素

  • 若M是一個(gè)一維向量,M(2) = []刪除了M的第二個(gè)元素。
  • A(1, :) = []刪除A矩陣的第一行所有元素。
  • 上面方法可以看成索引矩陣的賦[]值操作。

擴(kuò)展矩陣

  • Q = repmat(A, 2, 2),將矩陣A看著一個(gè)大整體元素,然后復(fù)制成兩行兩列。

壓縮矩陣,去除重復(fù)元素

  • S = unique(R)去除R中重復(fù)的元素,但重新排序了。unique還有其他使用形式可查看help。
  • unique(R,'stable'),去重且不重新排序。

4 MATLAB矩陣處理基礎(chǔ)

特殊矩陣建立
矩陣和向量運(yùn)算
線性方程組求解
矩陣的相似化簡和分解
矩陣和向量的范數(shù)
矩陣分析

  • 單位矩陣函數(shù)eye

  • 隨機(jī)矩陣函數(shù)rand

  • 從0到10間均勻分布,s = 0 + (10 - 0) * rand(10,1)

  • 從a到b直接均勻分布的隨機(jī)數(shù)S = a + (b - a) * rand

  • randn產(chǎn)生均值為0,方差為1的隨機(jī)數(shù)。

  • 產(chǎn)生均值為u,方差為s的正態(tài)分布的隨機(jī)矩陣, y = u + sqrt(s)*randn

  • mean獲得序列的均值

  • std獲得序列的方差

  • 魔方矩陣用magic函數(shù)

  • Hilbert矩陣用hilb函數(shù),每個(gè)位置的元素為1/(i + j)

  • Toeplitz矩陣用toeplitz函數(shù)

  • 求矩陣A行列式的值det(A)

  • 如果行列式的值不為0 ,則可求矩陣的逆inv(A)

  • 復(fù)數(shù)可以直接用i或j表示

  • b的共軛可以用conj(b)函數(shù),如果是復(fù)數(shù)向量直接用轉(zhuǎn)置b'也表示共軛

  • 內(nèi)積運(yùn)算可用dot()函數(shù)

  • 若a,b為兩個(gè)同緯行向量,這三個(gè)等式結(jié)果一致:

  • s = sum(conj(b).*a)

  • s = a*b'

  • s = dot(b, a)

線性方程組的求解,也可以用左除運(yùn)算符,效率比較高。

A = [1, 2, 3; 1, 4, 9, 1 8 27];
b = [5, -2, 6]'
x = inv(A)*b
x = A\b    %%解出結(jié)果與上一行相同
  • 用jordan(A)獲得矩陣A的約旦標(biāo)準(zhǔn)型。

  • [V J] = jordan(A) 得到V為A的相似變換矩陣,J就是約旦標(biāo)準(zhǔn)型。

  • eig函數(shù)可以獲得矩陣的特征值。

  • [E D] = eig(A) 得到E為特征向量,D中主對(duì)角線為特征值其余為0。

  • 1范數(shù),2范數(shù),無窮范數(shù)以及f范數(shù),都統(tǒng)一使用norm函數(shù)。

norm(A, 1)      %1范數(shù)
norm(A, 2)      %2范數(shù)
norm(A, inf)    %無窮范數(shù)
norm(A, 'fro')  %f范數(shù)

矩陣分析:

  • MATLAB中函數(shù)的計(jì)算,比如求導(dǎo)數(shù),默認(rèn)是對(duì)每個(gè)元素求導(dǎo)。

    • 求導(dǎo)函數(shù)diff(A)
    • 求二階導(dǎo)數(shù)diff(A, 2)
  • 建立符號(hào)x,類似于代數(shù)。

    • syms x
  • 矩陣函數(shù),計(jì)算矩陣函數(shù)eA,sinA,cosA,使用funm函數(shù),使用方法如下:

S = funm(A, @fun);

A = [0 1; 0 -2];
expA = funm(A, @exp)
expA = expm(A)  %結(jié)果同上
sinA = funm(A, @sin)
cosA = funm(A, @cos)

5 MATLAB程序控制結(jié)構(gòu)

  • M文件分類:命令文件(Script File)、函數(shù)文件(Function File)。
  • 命令文件沒有輸入,沒有返回;命令文件可以對(duì)工作空間的變量操作,結(jié)果返回工作空間,而函數(shù)文件中的變量為局部變量,函數(shù)執(zhí)行完畢,變量被清除。

順序結(jié)構(gòu)

  • 用于順序結(jié)構(gòu)中的輸入和輸出(命令交互):
    • 數(shù)據(jù)輸入(input函數(shù))
    • 數(shù)據(jù)顯示(disp函數(shù))
    • 程序暫停(pause函數(shù)),設(shè)計(jì)界面動(dòng)畫時(shí)候經(jīng)常使用。

分支(選擇)結(jié)構(gòu)

  • y = cos(x(find(x < 10)));這樣寫沒有用分支結(jié)構(gòu),直接用了索引找到所有x向量中x值小于10的下標(biāo),然后對(duì)這些數(shù)據(jù)進(jìn)行求余弦操作。
x = input('x');
if x < 10
    y = log(x);
else
    y = cos(x);
end
%多分支if語句
c = input('input a character', 's');
if c >= 'A' & c <= 'Z'
    disp(char(abs(c) + abs('a') - abs('A')));
elseif c >= 'a' & c <= 'z'
    disp(char(abs(c) - abs('a') + abs('A')));
elseif c >= '0' & c <= '9'
    disp(c);
end
%switch分支,在1000不同價(jià)格范圍有不同的折扣rate
price = input('input price');
switch fix(price/100)
    case {0, 1}   %可以用單元結(jié)構(gòu)表示當(dāng)判斷條件為0或1的時(shí)候
        rate = 0;
    case {2, 3, 4}
        rate = .03;
    case {5, 6, 7, 8, 9}
        rate = .05;
    otherwise
        rate = .1; 
end
  • try是試探性的分支語句,也就是如果這條語句執(zhí)行有錯(cuò)誤,則不執(zhí)行,或者執(zhí)行其他的語句,提高了程序的容錯(cuò)性能。如果下面語句組1有錯(cuò)誤,則執(zhí)行語句組2。
try
    語句組1
catch           %可沒有
    語句組2    %可沒有
end
  • 比如需要?jiǎng)h除某個(gè)變量,但是不知道這個(gè)變量有沒有,如果直接使用clear或者delete命令,那么這個(gè)變量有的話可以,如果這個(gè)變量沒有呢,那么就出錯(cuò)了,程序就終止了,在一個(gè)大程序中,這樣是不利的。

循環(huán)結(jié)構(gòu)

  • for循環(huán)的常用語法如下,當(dāng)然也可以for 循環(huán)變量 = 矩陣,這樣每次循環(huán),矩陣的每一列就會(huì)進(jìn)入循環(huán)體一次。
for 循環(huán)變量 = 表達(dá)式1:表達(dá)式2:表達(dá)式3
    循環(huán)體
end
  • 注意循環(huán)變量自動(dòng)增加,在循環(huán)體內(nèi)不要對(duì)循環(huán)變量進(jìn)行賦值操作,否則結(jié)果不可預(yù)料。
  • matlab中的for循環(huán)中最好不使用i,j做循環(huán)變量。
% for循環(huán)
A = 1:100;
sumA = 0;
for k = 1:100
    sumA = sumA + A(k);
end
  • while循環(huán)
while 條件
    循環(huán)體
end
%while循環(huán),下面實(shí)現(xiàn)輸入字符再輸入回車?yán)^續(xù)執(zhí)行,直接輸入回車退出循環(huán)
while 1
    c = input('input a character', 's')
    if isempty(abs(c))  %isempty函數(shù)判斷是否為空,輸入回車也是空
        break;
    end 
end
  • matlab中要避免使用兩重以上循環(huán),否則效率很低。
  • 怎樣避免使用循環(huán)和提高循環(huán)效率?
    • ★有些可以通過matlab的矢量化語言,通過矩陣或者向量操作完成。
    • ★有些可以通過matlab提供的一些特殊工具箱函數(shù)完成。
    • ★預(yù)分配的使用,會(huì)大大增加循環(huán)效率。

6 MATLAB的編輯器和程序調(diào)試

函數(shù)文件

function [輸出形參] = 函數(shù)名([輸入形參])
[注釋說明]     %用help或lookfor查看函數(shù)幫助即顯示這部分內(nèi)容
函數(shù)體
  • 通常函數(shù)文件名和函數(shù)名一致,如果不一致,忽略函數(shù)名,調(diào)用時(shí)使用函數(shù)文件名。
  • 選中多行內(nèi)容可以用Ctrl+R注釋,用Ctrl+T取消注釋。

函數(shù)參數(shù)可調(diào)標(biāo)識(shí)變量

nargin
nargout
varargin
varargout

  • 可以完成傳遞參數(shù)的可調(diào)功能,類似于其它高級(jí)語言中的函數(shù)重載和多態(tài)。
  • 前兩者為輸入輸出參數(shù)個(gè)數(shù),后兩個(gè)可以代表未知的輸入輸出變量。
function re = add_multi(a, b, c, d)
%輸入?yún)?shù)可調(diào)的函數(shù)范例
if nargin == 4
    re = a + b + c + d;
elseif nargin == 3
    re = a + b + c;
elseif nargin == 2
    re = a + b;
else
    error('wrong');
end
function [a, b] = add_mu(c, d, e, f)
%輸出參數(shù)可調(diào)范例
if nargout == 2
    a = c + d + e + f;
    b = c * d * e * f;
else
    a = c + d + e + f;
end
function re = add_var(a, b, varargin)
%輸入?yún)?shù)個(gè)數(shù)未知范例
if nargin == 2
    re = a + b;
elseif nargin == 3    
    c = varargin{1}; %用元胞數(shù)組來操作
    re = a + b + c;
else
    re = a + b;
    for k = 1:(nargin-2)
    re = re + varargin{k};
    end
end
  • error(nargchk(2, 4, nargin)),檢測參數(shù)輸入范圍最小兩個(gè),最大4個(gè),如果不是這個(gè)范圍則輸出錯(cuò)誤信息。
  • 關(guān)于varargout的用法可以參考工具箱函數(shù),輸入edit pburg可以看。

全局變量

  • 使用global聲明,可以提供不同的M文件訪問同一個(gè)變量。在每個(gè)文件中都要聲明。

調(diào)試

  • >>執(zhí)行狀態(tài),K>>調(diào)試狀態(tài)

7 MATLAB繪圖功能(1) 二維高層繪圖操作

  • 基本函數(shù)plot

  • 二維繪圖的輔助操作:

    • 標(biāo)注(圖形名稱,坐標(biāo)軸名稱,曲線標(biāo)注,圖例)
    • 坐標(biāo)軸控制
    • 圖形保持(同一坐標(biāo)軸繪制多個(gè)圖形)
    • 窗口分割(同一個(gè)窗口有多個(gè)坐標(biāo)軸)
  • plot(x, y)基本要求:x和y為相同長度的向量,但也有特殊用法:

    • x為向量,y為矩陣,其中一維與x長度相同,則繪制多條不同顏色的曲線(顏色確定涉及到底層繪圖操作)
    • x和y為同維矩陣,以對(duì)應(yīng)列繪制不同色彩的曲線
    • 若plot只有一個(gè)參數(shù),若x為實(shí)數(shù)向量,則繪制折線圖;若為復(fù)數(shù)向量,則以實(shí)部和虛部為橫縱坐標(biāo)繪圖
    • 多個(gè)輸入?yún)?shù)
    • 曲線選項(xiàng)
% 基本繪圖操作,繪制一個(gè)正弦函數(shù)
x = 0:0.01:2*pi;
y = sin(x);
plot(x, y);
% y是矩陣的情況
y1 = sin(x);
y2 = cos(x);
z = [y1; y2];
plot(x, z);

%兩個(gè)參數(shù)都是矩陣
x1 = 0:0.01:2*pi;
x2 = -pi:0.01:pi;
x = [x1; x2];
y1 = cos(x1);
y2 = sin(x2);
y = [y1; y2];
plot(x, y);

% 上面是使用了每列進(jìn)行繪圖,這樣繪制了很多條曲線。
% 如果想要使用每一行來繪圖,
% 那么需要將x和y進(jìn)行轉(zhuǎn)置,
% 就繪制了一條從0到2π的余弦,
% 一條從-π到π的正弦
x1 = 0:0.01:2*pi;
x2 = -pi:0.01:pi;
x = [x1; x2]';
y1 = cos(x1);
y2 = sin(x2);
y = [y1; y2]';
plot(x, y);

% plot只有一個(gè)參數(shù)
x = linspace(0, 2*pi, 200);
y = sin(x);
plot(y);   %繪出正弦
y2 = cos(x);
y3 = y + i*y2;
plot(y3);  %繪出一個(gè)橢圓,坐標(biāo)軸控制axis equal命令可變成一個(gè)圓
% plot只有多個(gè)參數(shù)
x1 = linspace(0, 2*pi, 200);
x2 = linspace(0, 2*pi, 100);
y1 = cos(x1);
y2 = sin(x2);
plot(x1, y1, x2, y2);  %不同長度的曲線同時(shí)繪制
% plot含有的曲線選項(xiàng)
plot(x, y, 'k');   %r紅色,k黑色,g綠色,y黃色,m品紅,b藍(lán)色
plot(x, y, '*');   %用'*'來繪圖,是離散的圖。同理.是點(diǎn),'p'是五角星,'<' ,'>'是三角星,'--'虛線,'-.'是線和點(diǎn),':'很小的虛線
plot(x, y, 'r*');  %顏色和線型的結(jié)合
%圖形標(biāo)注
plot(x , y);
xlabel('x');
ylabel('y');
title('正弦');
text(2, 0.3, 'y = sin(x)');  %在某個(gè)位置顯示字符串
legend('cos', 'sin');  %繪制圖例
  • matlab中可以用LaTex字符,字符串'x_2'顯示出來是x2

坐標(biāo)軸控制

  • axis equal
  • axis square
  • axis auto
  • axis off
  • axis on
  • axis([xmin xmax ymin ymax])
  • xlim([xmin xmax])
  • ylim([ymin ymax])

圖形保持

  • hold on
  • 關(guān)閉圖形保持hold off

窗口分割

%窗口分割
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = tan(x);
y4 = exp(x);
subplot(2, 2, 1)  %將窗口分成兩行兩列4格,繪制第一格
plot(x, y1);
subplot(222)  %繪制第二格
plot(x, y2);
subplot(223)
plot(x, y3);
subplot(224)
plot(x, y4);

8 MATLAB繪圖功能(2) 二維底層繪圖修飾

  • matlab把構(gòu)成圖形的各個(gè)基本要素稱為圖形對(duì)象,產(chǎn)生每一個(gè)圖形對(duì)象時(shí),matlab會(huì)自動(dòng)分配一個(gè)唯一的值用于表示這個(gè)對(duì)象,稱為句柄。
  • 對(duì)象間基本關(guān)系:計(jì)算機(jī)屏幕 → 圖形窗口 → (用戶菜單,用戶控件,坐標(biāo)軸)
  • 坐標(biāo)軸 → (曲線,曲面,文字,圖像,光源,區(qū)域,方框)
  • line函數(shù)普通用法和plot相同 h = line([-pi:0.01:pi], sin([-pi:0.01:pi]));
hl = line('XData', [-pi:0.01:pi], 'YData', sin([-pi:0.01:pi]),...
    'LineWidth', 1, 'LineStyle', ':', 'Color', 'r');
hl = line('XData', [-pi:0.01:pi], 'YData', sin([-pi:0.01:pi]),...
    'LineWidth', 1, 'LineStyle', ':', 'Color', 'r');
set(hl, 'LineWidth', 2, 'Marker', 'p', 'MarkerSize', 15);
  • text對(duì)象返回一個(gè)句柄后。也可以用set來更改設(shè)置。修飾屬性: Color,String, FontSize,Rotation。

底層坐標(biāo)軸控制

  • axes對(duì)象和axes函數(shù)
  • 修飾:
    • Box屬性,
    • GridLineStyle屬性,網(wǎng)格的線型,默認(rèn)是虛線
    • Position屬性
    • Units屬性,當(dāng)該屬性為normalized時(shí),子窗口隨父窗口變化而變化。
    • XLabel、YLabel和ZLabel屬性
    • Xlim、Ylim和Zlim屬性
ha = axes;
get(ha)   %獲得坐標(biāo)軸屬性
hf = figure;
ha = axes('Parent', hf, 'Unit', 'normalized', 'Position', [.1 .1 .6 .5]);

9 MATLAB Notebook使用簡介

  • 方便matlab代碼直接移到word,方便寫文檔。
  • 在Notebook中,需要運(yùn)行的代碼部分要設(shè)置為“輸入單元”,使用綠色加粗Courier New字體顯示;
  • 定義輸入單元,可以使用Notebook菜單,或者組合鍵“Alt+D”;
  • 定義輸入單元之后,選擇Notebook菜單中的“Evaluate Cell”或者組合鍵“Ctrl+Enter”執(zhí)行單元,輸出直接在相應(yīng)輸入單元之后顯示,使用藍(lán)色Courier New字體顯示。
  • 自動(dòng)初始化單元可以在打開Notebook時(shí)自動(dòng)執(zhí)行,這樣可以快速恢復(fù)所需要的工作空間。
  • 定義方式:選擇需要定義的單元,選擇Notebook菜單中的“Define AutoInit Cell”。
  • 定義為自動(dòng)初始化的單元使用藍(lán)色加粗Courier New字體顯示

10 MATLAB符號(hào)運(yùn)算

  • 符號(hào)計(jì)算基礎(chǔ)
    • 符號(hào)常量和符號(hào)變量
    • 符號(hào)四則運(yùn)算
    • 符號(hào)表達(dá)式的化簡
    • 符號(hào)矩陣運(yùn)算
  • 符號(hào)函數(shù)
    • 極限
    • 微分
    • 積分
  • 符號(hào)級(jí)數(shù)
  • 符號(hào)方程求解
    • 代數(shù)方程
    • 微分方程
a = sym('a');  %符號(hào)變量
syms a;        %同上
c = sym('3');  %符號(hào)常量
f1 = '3 * x + 4';
class(f1)      %得到類型為char
 
syms x
f2 = 3 * x + 4;
class(f2)      %得到類型為sym
 
f3 = sym('3 * y + 4');
class(f3)      %得到類型為sym
 
f4 = f1 + f2;   %得到f4 = 6*x + 8
class(f4)       %得到類型為sym
  • 符號(hào)四則運(yùn)算有 + - * / ^

符號(hào)表達(dá)式化簡

  • simplify
  • simple用了很多規(guī)則來化簡,都列了出來,包含simplify

符號(hào)表達(dá)式與數(shù)值的轉(zhuǎn)化用

  • sym 數(shù)值轉(zhuǎn)化為符號(hào)
  • eval 將符號(hào)變量轉(zhuǎn)化為數(shù)值變量

符號(hào)表達(dá)式的分解展開合并

  • factor因式分解
  • expand因式展開
  • collect合并同類項(xiàng)
syms a b x y;
f1 = a^3 - b^3;
factor(f1)    %得到[ a - b, a^2 + a*b + b^2]
f2 = (3*x^2 + 8*y^2)*(-x^2 + 3*y);
expand(f2)    %得到- 3*x^4 - 8*x^2*y^2 + 9*x^2*y + 24*y^3
f3 = 3*x^2 + 4*x^2 + 5*x^2*y;
collect(f3)   %得到(5*y + 7)*x^2

符號(hào)矩陣

  • 構(gòu)建方式與數(shù)值矩陣一致
  • 轉(zhuǎn)置和行列式:transpose determ
  • 其它使用在數(shù)值矩陣中的函數(shù)也可以直接用于符號(hào)矩陣
  • 注意:
    • 用transpose(A)的轉(zhuǎn)置相當(dāng)于AT
    • 直接使用單引號(hào)‘的轉(zhuǎn)置相當(dāng)于A的共軛轉(zhuǎn)置,即AH

符號(hào)函數(shù)

  • 用符號(hào)函數(shù)計(jì)算得到的結(jié)果類型是sym,如果還需要數(shù)值用eval轉(zhuǎn)換一下!
syms x
f1 = x^3 - 9;
subs(f1, 3)  %用3來代替原來f1中符號(hào)的位置來計(jì)算
 
y = (sin(x + a) - sin(x - a)) / x;
limit(y, 0)  %求極限,當(dāng)x趨于零時(shí),y的值
 
y2 = sqrt(1 + exp(x));
diff(y2)     %求解差分
diff(y2, 2)  %求解2階導(dǎo)數(shù)
diff(y2, 3)  %求解3階導(dǎo)數(shù)
 
y3 = (3 - x^2)^3;
int(y3)     %求解不定積分
 
y4 = abs(1 - x);
int(y4, 1, 2)  %求解定積分

符號(hào)級(jí)數(shù)

  • 符號(hào)級(jí)數(shù)求和symsum,泰勒級(jí)數(shù)taylor
syms n
f = 1/n^2;
s1 = symsum(f, n, 1, inf)  %4個(gè)參數(shù)意義依次是:第一是通項(xiàng),第二個(gè)規(guī)定哪個(gè)參數(shù)作為求和變量,第三第四參數(shù)表示在求和范圍
% 泰勒展開
syms x
y = (1 + x + x^2)/(1 - x + x^2);
taylor(y,'order',6)

符號(hào)方程求解

  • 符號(hào)代數(shù)方程和方程組solve
  • 符號(hào)常微分方程dsolve,其中D3y表示與的三階導(dǎo)數(shù),Dy表示y的一階導(dǎo)數(shù)。
% 方程組,可用=號(hào)形式,也可移項(xiàng)到等號(hào)同意一邊,表示等于0
[x y] = solve('1/x^3 + 1/y^3 = 28', '1/x + 1/y -4', 'x, y')
% 微分方程
dsolve('Dy - (x^2 + y^2)/x^2/2', 'x')

參考《MATLAB基礎(chǔ)視頻》 作者:lskyp

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容