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 ) = 3 x 4 7 x 3 + 2 x 2 + x + 1 p(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

例:求方程 2 x 3 + x 2 + 4 x + 5 = 0 2x^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 ) = a 0 x n + a 1 x x 1 + . . . + a n b 0 x m + b 1 x m 1 + . . . + b m \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,假分式

有理函数的分解步骤:
有理函数 = 多项式 + 【真分式 ----> 分解为若干最简分式之和】

例: x 3 + x + 1 x 2 + 1 = x + 1 x 2 + 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

x 3 + x + 1 x 2 + 1 = x ( 1 ) \frac{x^3+x+1}{x^2+1}=x(余1) ,就可理解为 x 3 + x + 1 = x ( x 2 + 1 ) + 1 x^3+x+1=x(x^2+1)+1 【理解为一般的除法形式】,最后两边同除以 x 2 + 1 x^2+1 即可以可到上面的结果

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

表达式如下:
B ( x ) A ( x ) = a ( 1 ) x b ( 1 ) + a ( 2 ) x b ( 2 ) + . . . + a ( n ) x b ( 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

最后可以写成: x 2 + 1 x 3 6 x 2 + 11 x 6 = 5 x 3 + 5 x 2 + 1 x 1 \frac{x^2+1}{x^3-6x^2+11x-6}=\frac{5}{x-3}+\frac{-5}{x-2}+\frac{1}{x-1}

例: x 3 + x + 1 x 2 + 1 = x + 1 x 2 + 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.5 i x i + 0.5 i x + 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 ) x b ( j ) + a ( j + 1 ) ( x b ( j ) ) 2 + . . . + a ( j + m 1 ) ( x b ( 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 ) = x 2 + 1 ; g ( x ) = ( x + 1 ) 2 ( x 1 ) 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 ) = 1 2 x + 1 + 1 ( x + 1 ) 2 + 1 2 x 1 \frac{f(x)}{g(x)}=\frac{\frac{1}{2}}{x+1}+\frac{-1}{(x+1)^2}+\frac{\frac{1}{2}}{x-1}

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

[a, b, r] = residue(B, A) x 2 + p x + q = 0 = &gt; a , b x^2+px+q=0=&gt;a,b 以复数根形式展示

例:将 x 5 ( x 2 + 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 = 2 0 1 0 1 3 1 2 0 1 3 1 1 2 0 1 A=\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 = a 1 0 0 1 b 1 0 0 1 e 1 0 0 1 d A=\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:克拉默法则求解线性方程组

例:用克拉默法则求解线性方程组 { x 1 2 x 2 + 4 x 3 = 1 2 x 1 + x 2 + x 3 = 1 x 1 + 2 x 2 x 3 = 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:矩阵运算求解线性方程组

例:用矩阵的运算求解方程组 { x 1 2 x 2 + 4 x 3 = 1 2 x 1 + x 2 + x 3 = 1 x 1 + 2 x 2 x 3 = 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.求解一般线性方程组

例:求解线性方程组 { x 1 x 2 + x 3 x 4 = 1 x 1 + x 2 + x 3 x 4 = 1 2 x 1 2 x 2 x 3 + x 4 = 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.

猜你喜欢

转载自blog.csdn.net/Enderman_xiaohei/article/details/89336017