複習
一些問題
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(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
例:求方程 的所有根
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的答案來源
下面這一行,向左平移一格,計算方式:-53 + 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.有理函數分解預備知識
有理函數:兩個多項式的商表示的函數
(1)n<m,真分式 (2)n >= m,假分式
有理函數的分解步驟:
有理函數 = 多項式 + 【真分式 ----> 分解爲若干最簡分式之和】
例:
[m, n] = deconv([1 0 1 1], [1 0 1])
% 結果
m = 1 0 %相當於 x
n = 0 0 0 1 % 相當於 1
,就可理解爲 【理解爲一般的除法形式】,最後兩邊同除以 即可以可到上面的結果
2.分母無重根:[a, b, r] = residue(B, A)
表達式如下:
例:
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
最後可以寫成:
例:,之前的例子可以使用這個方法計算
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
最後可以寫成:,通分整理既可得到結果
3.分母的根是是m重根:[a, b, r]=residue(B, A)
若b(j)是多項式A(x)的m重根,則分解後含有重根的項寫成:
例:,求 .
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 = []
最終結果可以寫成:
4.分母含 且 時
[a, b, r] = residue(B, A)
以複數根形式展示
例:將 分解爲最簡分式之和
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的行列式的值,
clear
A = [2 0 -1 0; 1 3 1 -2; 0 1 3 -1; -1 2 0 1];
det(A)
% 結果
ans = 32
符號行列式的求解
例:計算行列式,
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:克拉默法則求解線性方程組
例:用克拉默法則求解線性方程組
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:矩陣運算求解線性方程組
例:用矩陣的運算求解方程組
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.求解一般線性方程組
例:求解線性方程組
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.