Matlab學習筆記(五)

複習

一些問題

1.使用時ode45等數值命令求解常微分方程應該注意哪些問題?
[t,x]=ode45(‘f’, [t0,tf], x0, options)

function y=f(t,x)
……

t:自變量值
x:函數值
ode45:運用組合的4/5階龍格-庫塔-芬格爾算法
‘f’:由待解方程寫成的m-文件名
ts:ts[t0, tf], 爲自變量的初值和終值
x0:函數的初值
options:用於設定誤差限(缺省時設定的相對誤差爲10^-3,絕對誤差10^-6

2.代數方程(組)求根命令有哪些?使用時應該注意哪些問題?
solve、fzero、fsolve
solve不起作用時,選擇fsolve,fzero慎用,使用條件比較苛刻

3.請解釋以下三個命令的含義:
poly2sym(c), polyval(p,a), root(c)
poly2sym(c):把係數數組轉換爲符號多項式
polyval(p,a):求多項式函數p(x)在點a的值
roots(c):多項式函數p(x)=0時所有根(複數根)

多項式函數在點a的值:polyval(p, a)

例:p(x)=3x47x3+2x2+x+1p(x)=3x^4-7x^3+2x^2+x+1,計算p(2.5)和p(3)的值

c = [3, -7, 2, 1, 1]; xi = [2.5, 3];
y1 = polyval(c, xi)
% 結果
y1 = 23.8125   76.0000

注意:

% 可以這樣寫
syms x
f = 3*x^4 - 7*x^3 + 2*x^2 + x + 1;
c = sym2poly(f) % 相對於poly2sym

多項式求根:roots

例:求方程 2x3+x2+4x+5=02x^3+x^2+4x+5=0 的所有根

c = [2 1 4 5]
roots(c) % 可以直接這樣寫 roots([2 1 4 5])
% 結果
ans = 0.2500 + 1.5612i
      0.2500 - 1.5612i
     -1.0000 + 0.0000i

注意:MATLAB按慣例規定,多項式是行向量,根是列向量
思考:已知多項式的根,如何求解多項式?

pp = poly(ans)
% 結果
pp = 1.0000    0.5000    2.0000    2.5000

主要內容(大概)

目錄

多項式的四則運算
有理式的分解與合併(難點)
矩陣的生成與結構變換、矩陣的基本運算

多項式的四則運算

1.多項式的和與差:poly_add

c = poly_add(a, b); % 求兩個多項式的和
c = poly_add(a, -b); % 兩個多項式的差

注意:多項式的和差也可以利用向量加法計算。當兩個多項式階次不同,低階的多項式必須用首零填補,使其與高階多項式有同樣的階次。
例:

a =[1  6  20  50  75  84  64];  b=[2 6 12 20];
c = a + [0 0 0 b]
% 結果
c = 1     6    20    52    81    96    84

2.兩個多項式的乘積:conv

m階多項式與n階多項式的乘積是m+n階的多項式
a=conv(c,b);%多項式相乘,返回係數向量

例:

a=[2,-5,6,-1,9]; b=[3,-90,-18];
c=conv(a,b)
% 結果
c = 6  -195   432  -453   9  -792  -162

關於卷積(conv)的說明
在這裏插入圖片描述
將上述的a和b如上圖放置,就可以計算出第一個值 23 = 6,就是c中6的答案來源
在這裏插入圖片描述
下面這一行,向左平移一格,計算方式:-5
3 + 2*-90 = -195,也就是第二個值
在這裏插入圖片描述
相同的操作,計算方式:63 + (-5)(-90) + 2*(-18) = 432
在這裏插入圖片描述
以此類推,最後一位,就是 9*(-18) = -162

3.兩個多項式的商:deconv

[q, r]=deconv(b,c);%兩個多項式相除,
% 返回商的係數vector(q)和餘數係數vector(r)

注意: 從向量運算的角度看, 反捲積deconv是卷積conv的逆運算. 上式等價於b=conv(q,c)+r, 其中r可以看成誤差。

% 卷積
a=[2,-5,6,-1,9]; b=[3,-90,-18];
c=conv(a,b)
% 結果
c = 6  -195   432  -453   9  -792  -162
% 反捲積
[q,r]=deconv(c,b)
% 結果
q = 2    -5     6    -1     9
r = 0     0     0     0     0     0     0

有理式的分解與合併(難點)

collect(f); %對符號多項式f進行合併同類項
expand(f);%對符號多項式f進行展開
horner(f);%對符號多項式f進行嵌套分解
factor(f);%對符號多項式f進行因式分解
[a,b,r]=residue(p,q); %返回將p(x)/q(x)分解爲最簡式之和
[p,q]=residue(a,b,r); %返回將簡單分式之和合併爲有理分式
format rat; % 寫出分數的精確值的形式

1.有理函數分解預備知識

有理函數:兩個多項式的商表示的函數
P(x)Q(x)=a0xn+a1xx1+...+anb0xm+b1xm1+...+bm\frac{P(x)}{Q(x)}=\frac{a_0x^n+a_1x^{x-1}+...+a_n}{b_0x^m+b_1x^{m-1}+...+b_m}
(1)n<m,真分式 (2)n >= m,假分式

有理函數的分解步驟:
有理函數 = 多項式 + 【真分式 ----> 分解爲若干最簡分式之和】

例:x3+x+1x2+1=x+1x2+1\frac{x^3+x+1}{x^2+1}=x+\frac{1}{x^2+1}

[m, n] = deconv([1 0 1 1], [1 0 1])
% 結果
m = 1     0 %相當於 x
n = 0     0     0     1 % 相當於 1

x3+x+1x2+1=x(1)\frac{x^3+x+1}{x^2+1}=x(餘1),就可理解爲 x3+x+1=x(x2+1)+1x^3+x+1=x(x^2+1)+1 【理解爲一般的除法形式】,最後兩邊同除以 x2+1x^2+1 即可以可到上面的結果

2.分母無重根:[a, b, r] = residue(B, A)

表達式如下:
B(x)A(x)=a(1)xb(1)+a(2)xb(2)+...+a(n)xb(n)+r(x)\frac{B(x)}{A(x)}=\frac{a(1)}{x-b(1)}+\frac{a(2)}{x-b(2)}+...+\frac{a(n)}{x-b(n)}+r(x)
例:

clear
B=[1 0 1];A=[1 -6 11 -6];
[a,b,r]=residue(B,A)
% 結果
a = 5.0000
   -5.0000
    1.0000
b = 3.0000
    2.0000
    1.0000
r = [] % 餘項爲0

最後可以寫成:x2+1x36x2+11x6=5x3+5x2+1x1\frac{x^2+1}{x^3-6x^2+11x-6}=\frac{5}{x-3}+\frac{-5}{x-2}+\frac{1}{x-1}

例:x3+x+1x2+1=x+1x2+1\frac{x^3+x+1}{x^2+1}=x+\frac{1}{x^2+1},之前的例子可以使用這個方法計算

format rat; %分數表示
[q, r, t] = residue([1 0 1 1], [1 0 1])
% 結果
q = 0        -    1/2i    
    0        +    1/2i    
r = 0        +    1i      
    0        -    1i      
t = 1              0    

最後可以寫成:0.5ixi+0.5ix+i+x\frac{-0.5i}{x-i}+\frac{0.5i}{x+i}+x,通分整理既可得到結果

3.分母的根是是m重根:[a, b, r]=residue(B, A)

若b(j)是多項式A(x)的m重根,則分解後含有重根的項寫成:
a(j)xb(j)+a(j+1)(xb(j))2+...+a(j+m1)(xb(j))2\frac{a(j)}{x-b(j)}+\frac{a(j+1)}{(x-b(j))^2}+...+\frac{a(j+m-1)}{(x-b(j))^2}
例:f(x)=x2+1;g(x)=(x+1)2(x1)f(x)=x^2+1;g(x)=(x+1)^2(x-1),求 f(x)g(x)\frac{f(x)}{g(x)}.

clear; format rat; %結果以分數形式展示
syms x
g = (x+1)^2*(x-1); % 寫出g的表達式
g = expand(g); % 對g(x)展開
A = sym2poly(g); % 收集g(x)的係數
[a, b, r] = residue([1 0 1], A) % 分解最簡式
% 結果
a = 1/2     
    -1       
    1/2     
b = -1       
    -1       
    1       
r = []

最終結果可以寫成:f(x)g(x)=12x+1+1(x+1)2+12x1\frac{f(x)}{g(x)}=\frac{\frac{1}{2}}{x+1}+\frac{-1}{(x+1)^2}+\frac{\frac{1}{2}}{x-1}

4.分母含 (x2+px+q)k(x^2+px+q)^kp24q&lt;0p^2-4q&lt;0

[a, b, r] = residue(B, A)x2+px+q=0=&gt;a,bx^2+px+q=0=&gt;a,b以複數根形式展示

例:將 x5(x2+x+1)2\frac{x^5}{(x^2+x+1)^2} 分解爲最簡分式之和

clear
syms x
g = sym2poly(x^5)
f = sym2poly((x^2+x+1)^2);
[a, b, r] = residue(g, f)
% 結果
a =    1/2      - 1351/1080i 
       1/6      +  390/1351i 
       1/2      + 1351/1080i 
       1/6      -  390/1351i 
       
b =   -1/2      + 1170/1351i 
      -1/2      + 1170/1351i 
      -1/2      - 1170/1351i 
      -1/2      - 1170/1351i 
      
r =    1             -2    

矩陣的生成與結構變換、矩陣的基本運算

運算 意義
加法A+B 兩矩陣相加;數與矩陣相加;
減法A-B 兩矩陣相減;數與矩陣相減;
乘法A*B 兩矩陣相減;數與矩陣相乘;
點乘A.*B 兩矩陣對應元素相乘;
除法A\B和A/B 分別表示inv(B)B和Ainv(B);(注意:反斜槓\表示左除)
點除A./B 兩矩陣對應元素分別相除;數a除以矩陣b中每個元素;
乘冪A^n 矩陣的冪;數的冪;
點乘冪A.^n 矩陣每個元素的冪;
轉置A.’ 矩陣A的轉置;
共軛轉置A’ 矩陣A的共軛轉置
inv(A)或A^(-1) 矩陣A的逆
sqrtm(A)或A^(1/2) 矩陣A開平方,其平方爲A
sqrt(A) 矩陣A各對應元素開方

1.Matlab求行列式:det(A)

數值行列式的求解

例:求矩陣A的行列式的值,A=2010131201311201A=\begin{vmatrix} 2 &amp; 0 &amp; -1&amp;0 \\ 1&amp; 3&amp; 1&amp; -2\\ 0&amp; 1&amp; 3 &amp; -1\\ -1&amp; 2&amp;0 &amp; 1 \end{vmatrix}

clear
A = [2 0 -1 0; 1 3 1 -2; 0 1 3 -1; -1 2 0 1];
det(A)
% 結果
ans = 32    
符號行列式的求解

例:計算行列式,A=a1001b1001e1001dA=\begin{vmatrix} a &amp; 1 &amp; 0&amp;0 \\ -1&amp;b&amp; 1&amp; 0\\ 0&amp; -1&amp; e &amp;1\\ 0&amp; 0&amp;-1 &amp; d \end{vmatrix}

clear
syms a b c d % 一定要聲明符號變量
A = [a 1 0 0; -1 b 1 0; 0 -1 c 1; 0 0 -1 d]; % 生成符號矩陣
det(A)
% 結果
ans = a*b + a*d + c*d + a*b*c*d + 1

2.應用1:克拉默法則求解線性方程組

例:用克拉默法則求解線性方程組 {x12x2+4x3=12x1+x2+x3=1x1+2x2x3=2\left\{\begin{matrix}-x_1-2x_2+4x_3=1 \\ 2x_1+x_2+x_3=1 \\ x_1+2x_2-x_3=2 \end{matrix}\right.

A = [-1 -2 4; 2 1 1; 1 2 -1];
D = det(A);
if D~=0
D1 = [1 -2 4; 1 1 1; 2 2 -1];
D2 = [-1 1 4; 2 1 1; 1 2 -1];
D3 = [-1 -2 1; 2 1 1; 1 2 2];
end
x1 = det(D1)/D;
x2= det(D2)/D;
x3 = det(D3)/D;
% 結果
>> x1, x2, x3
x1 = -1       
x2 = 2       
x3 = 1  

3.應用2:矩陣運算求解線性方程組

例:用矩陣的運算求解方程組 {x12x2+4x3=12x1+x2+x3=1x1+2x2x3=2\left\{\begin{matrix}-x_1-2x_2+4x_3=1 \\ 2x_1+x_2+x_3=1 \\ x_1+2x_2-x_3=2 \end{matrix}\right.

A= [-1 -2 4; 2 1 1; 1 2 -1];
b = [1 1 2]';
x = A\b % 也可以寫成 x = inv(A) * b
% 結果
x =   -1       
       2       
       1    

4.求解一般線性方程組

例:求解線性方程組 {x1x2+x3x4=1x1+x2+x3x4=12x12x2x3+x4=1\left\{\begin{matrix}x_1-x_2+x_3-x_4=1 \\ -x_1+x_2+x_3-x_4=1 \\ 2x_1-2x_2-x_3+x_4=-1 \end{matrix}\right.

clear
A = [1 -1 1 -1; -1 1 1 -1; 2 -2 -1 1];
b = [1 1 -1]'; B = [A, b];
if rank(A) < rank(B)
disp('No solution!')
else
sol = sym(A\b);
w = sym(null(A, 'r'));
t = 4 - rank(A);
for i=1:t
k = sym('x', [1, t]);
sol = sol + k(i)*w(:, i);
end
sol
end
% 結果
sol = x1
      x1
  x2 + 1
      x2

回目錄

點我回頂部

 
 
 
 
 
 
 
Fin.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章