我是靠谱客的博主 轻松小懒猪,最近开发中收集的这篇文章主要介绍MATLAB编写一段施密特正交的函数,输入为列向量,输出将矩阵每一列向量Schmidt正交化后的向量组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

       最近帮人写一个施密特正交的程序,学习过线性代数或这数值计算时都会了解到施密特正交化方法,施密特正交是求欧式空间正交基的一种方法(事实上,在代数学中施密特正交也可拓展到一般的线性空间),即任意一组线性无关的向量,通过施密特正交化方法后得到的新的向量组中的向量两辆正交,且施密特正交化后的向量组与原向量组等价。

       施密特正交化的过程随处都可以找到,这里简单呈现一下,即α1,α2,α3...为一组线性无关的向量组,则可以通过施密特正交化的方法将其变为两两正交的向量组:

 以此类推,经过施密特正交化后的向量组β1,β2,β3...即为两两正交的正交组。

       现编写一个MATLAB函数,按照施密特正交化的方法,输入为矩阵,输出为将矩阵每一列作为一个向量,对该向量组进行施密特正交化得到的新的矩阵,以及每一列向量的模长(范数)。

代码如下:

function [Qhat,Rhat] = csg(A)

    [row,col]= size(A);
    Qhat = zeros(row,col);
    Rhat = zeros(1,col);
    
    Qhat(:,1)=A(:,1); 
    column1 = A(:,1);
    Rhat(1) = norm(column1);
    
    for j = 2 : col
        for i = 1: j-1            
            q(:,i) = ((Qhat(:,i)' * A(:,j))/(Qhat(:,i)' * Qhat(:,i)));
            r(:,j)= q(:,i) * Qhat(:,i);
            A(:,j)= A(:,j) -r(:,j);          
        end
        Qhat(:,j)=A(:,j);    
        Rhat(j)=norm(Qhat(:,j));
    end

若输入矩阵A为:

A =

     1     0     0
     1     1     0
     0     0     1

在命令行调用,[Qhat,Rhat] = csg(A),运行结果为:

Qhat =

    1.0000   -0.5000         0
    1.0000    0.5000         0
         0         0    1.0000


Rhat =

    1.4142    0.7071    1.0000

其中Qhat为将A中每一列向量施密特正交化之后的组成的新的向量组。Rhat是Qhat中每一个列向量的模长,若想继续单位化操作即可直接坐商。

       代码中的方法即是常规的施密特正交化的方法,其中norm函数是matlab中自带的求范数的函数,norm(x,1)即是求向量x的1范数,若不给参数直接norm(x)默认求x的2范数,即欧式范数,也就是实域线性空间下向量的模长。

最后

以上就是轻松小懒猪为你收集整理的MATLAB编写一段施密特正交的函数,输入为列向量,输出将矩阵每一列向量Schmidt正交化后的向量组的全部内容,希望文章能够帮你解决MATLAB编写一段施密特正交的函数,输入为列向量,输出将矩阵每一列向量Schmidt正交化后的向量组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部