在Matlab中不用eig()命令求方阵的特征值和特征向量矩阵,并判断其是否可以对角化

在Matlab中不用eig()命令求方阵的特征值和特征向量矩阵,并判断其是否可以对角化

#本文仅针对标题所示问题的代码解答,若相关概念不熟,请去资料。
#不要问我为什么放着好好的eig()命令不用,反而去写一堆代码。这得去问我们的好老师(/(ㄒoㄒ)/~~)。

思路:
1、先得到输入值A的维度大小,判断其是否为方阵;
2、生成与A同维度的一个单位矩阵,由(λE-A)x=0解得特征值λ;
3、将每个特征值λ带入原式,解齐次线性方程组,得到基础解系;
4、将每个基础解系合并,并去掉相同列向量,即可得到特征向量矩阵;

代码实现:

function [v,d]=tzz(A)
    syms v 
    n=size(A);    
    d=[];
    if n(1)~=n(2)             %判断A是否为方阵
        fprintf('输入的不是方阵,请重新输入A');
        v=[];
    else
        v=solve(@(v)det(v.*eye(n)-A))  %方阵A的特征值
        for i=1:n(1)         
            di=null((v(i).*eye(n)-A))'; %通过循环结构求解每个特征值对应的齐次
                                        %线性方程组的基础解系并转置为行向量
            d=[d;di];    %将所有基础解系合并
        end
        d=(unique(d,'rows'))'   %删除相同的行向量并转置回列向量
    end
    if n==size(d)
        fprintf('方阵A可以对角化');
    else
        fprintf('方阵A不能对角化');
    end
end

实例:
A=[1,2,2;2,1,2;2,2,1]
在这里插入图片描述
#相关函数及其功能请自行搜索查询

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值