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范数,即欧式范数,也就是实域线性空间下向量的模长。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clear_lantern

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值