求矩阵行列式和逆,手写的MATLAB程序

行列式:

 %Aij = (-1)^(i+j)*Mij
%D = a11*A11 + a12*A12 + a13*A13 + ... + a1n*A1n
%H = [1 2 3;7 9 7;5 6 1;];det(H) = 14
function H_Det =  Matrix_Det(H,N)  %输入矩阵 阶数  
H_Det = 0;
if N==1
   H_Det = H(1,1); 
   return;
end
temp = zeros(N-1,N-1);
for i=1:N
    for j=2:N  %第二行开始
        for k=1:N-1
            if k>=i
                cln = k+1;
            else
                cln = k;
            end
            temp(j-1,k) = H(j,cln);
        end
    end
    t = Matrix_Det(temp,N-1);  %递归
    if rem(1+i,2)==0   %(-1)^(1+i)
       H_Det = H_Det+H(1,i)*t;
    else
       H_Det = H_Det-H(1,i)*t;
    end
end

end

伴随阵:

%伴随阵A* = |Aij|(nxn)
%Aij = (-1)^(i+j)*Mij
%H = [1 2 3;7 9 7;5 6 1;];det(H)*inv(H) = [-33 16 -13;28 -14 14;-3 4 -5];
function H_Adjoint = Matrix_Adjoint(H,N)
H_Adjoint = zeros(N,N);
if N==1
%    H_Adjoint = [H(2,2) H(2,1);H(1,2) H(1,1)]; 
   H_Adjoint = 1;
   return;
end
temp = zeros(N-1,N-1);
for i=1:N   %逐行扫描
    for j=1:N  %逐列扫描
        for k=1:N-1  %行组合
            if k>=j
               row = k+1;
            else
               row = k;
            end
            for t=1:N-1  %列组合            
                if t>=i
                   cln = t+1;
                else
                   cln = t;
                end
                temp(k,t) = H(row,cln);
            end
        end
        if rem(i+j,2)==0
            H_Adjoint(i,j) = Matrix_Det(temp,N-1);   %求代数余子式
        else
            H_Adjoint(i,j) = -Matrix_Det(temp,N-1);
        end
    end
end
end

逆:

%A^(-1) = 1/|A|*(A*)
%H = [1 2 3;7 9 7;5 6 1;];inv(H) = [-2.3571 1.1429 -0.9286;2.0000 -1.0000 1.0000;-0.2143 0.2857 -0.3571];
function H_Inv = Matrix_Inverse(H,N)
H_Det = Matrix_Det(H,N);
H_Adjoint = Matrix_Adjoint(H,N);
H_Inv = H_Adjoint/H_Det;
end

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数字识别是一种利用计算机自动识别人数字的技术。在Matlab中,可以使用基于BP神经网络的方法来实现数字识别。具体步骤如下: 1. 数据准备:使用MNIST体数字数据集作为训练和测试数据。这个数据集包含大量的数字图片和对应的标签。 2. 图像预处理:对读取的数字图片进行预处理,包括去噪和二值化等操作,以提高识别的准确性。 3. 特征提取:使用简单的特征提取方法,例如统计每个小区域中图像像素所占百分比作为特征数据。 4. 创建BP神经网络模型:根据特征数据,创建一个简单的BP神经网络模型。 5. 训练神经网络模型:使用训练数据对神经网络模型进行训练,通过调整权重和阈值等参数来优化网络的性能。 6. 测试:使用测试数据对训练好的神经网络模型进行测试,评估模型的准确度和性能。 以下是一个简单的数字识别的Matlab程序示例: ```matlab % 数据准备 load('mnist_data.mat'); % 加载MNIST体数字数据集 trainData = double(trainData) / 255; % 将数据归一化到0-1范围 testData = double(testData) / 255; % 图像预处理 % 可以在这里进行去噪、二值化等预处理步骤 % 特征提取 trainFeatures = getFeatures(trainData); % 获取训练数据的特征 testFeatures = getFeatures(testData); % 获取测试数据的特征 % 创建BP神经网络模型 net = feedforwardnet([20 10]); % 创建一个两层的前馈神经网络 net.trainFcn = 'trainscg'; % 设置训练函数为SCG net.trainParam.epochs = 100; % 设置训练的最大迭代次数 % 训练神经网络模型 net = train(net, trainFeatures', trainLabels'); % 测试 predictedLabels = net(testFeatures'); accuracy = sum(predictedLabels == testLabels') / numel(testLabels); disp(['测试准确率:', num2str(accuracy)]); function features = getFeatures(data) % 在这里进行特征提取操作,例如统计每个小区域中图像像素所占百分比 % 返回提取得到的特征数据 features = data; end ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值