复习
一些问题
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.