作业帮 > 综合 > 作业

两个Matlab问题1.2.第二个若用syms 会出错,

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/04/16 19:41:33
两个Matlab问题

1.

2.

第二个若用syms 会出错,


先说第二问,简单些
clear
syms x1 x2 x3 x4 x5
x=[x1 x2 x3 x4 x5]; %建立向量x
n=length(x);
A=sym(ones(n)); %建立n×n维1矩阵
for i=2:n
A(i,:)=x.*A(i-1,:); %生成范德蒙德行列式所对应的矩阵,第i行由第i-1行与x作数量积而生成
end
A
detA=factor(det(A)) %求行列式,并因式分解
A =

[ 1, 1, 1, 1, 1]
[ x1, x2, x3, x4, x5]
[ x1^2, x2^2, x3^2, x4^2, x5^2]
[ x1^3, x2^3, x3^3, x4^3, x5^3]
[ x1^4, x2^4, x3^4, x4^4, x5^4]

detA =

(-x5+x4)*(x3-x5)*(x3-x4)*(-x5+x2)*(x2-x4)*(x2-x3)*(-x5+x1)*(x1-x4)*(x1-x3)*(x1-x2)
你第二问出错的原因是ones函数不能建立符号矩阵

第一问
先对M矩阵作初等行变换(rref对含参矩阵无效)
第一步 作初等行变换
clear
syms t
M=[3,2,-1,-3;2,-1,3,1;7,0,t,-1]; %M矩阵
[m,n]=size(M); %M矩阵的维数
mi=min(m,n);
ma=max(m,n);
if m>n
M=M'; %rank(M)=rank(M'),转成行数不大于列数
m=mi;
n=ma;
end
m,n
for j=1:m
for i=(j+1):m
M(i,:)=M(i,:)-M(j,:)*M(i,j)/M(j,j); %初等行变换,对角线以下化0
end
end
M=factor(simple(M)); %化简结果,并因式分解
M
m =3
n = 4

M =

[ 3, 2, -1, -3]
[ 0, -7/3, 11/3, 3]
[ 0, 0, t-5, 0]
第二步 找出需要求解的方程
L=[];
for i=1:n-m+1
if M(m,m-1+i)~=0 %找出需要求解的方程所在的列数L
L=[L,m-1+i];
end
end
L
L = 3

第三步 求出符合条件的根
s=solve(M(m,3),t); %对第L(=3)列不为0的项解方程(组)
ns=length(s); %根的个数(根可能不唯一)
tt=[]; %初值
for k=1:ns
if rank(subs(M,t,s(k)))==2 %找出符合条件的根
tt=[tt,s(k)];
end
end
tt %输出符合条件的根

tt =5

即t=5时,rank(M)=2