基于MATLAB的数值分析编程上机作业.doc
文本预览下载声明
基于MATLAB的数值分析编程上机作业(1) 班级: 学号: 姓名: 日期: 页数: 一、给定向量x≠0,计算初等反射阵H。
1、基本原理:
若的分量不全为零,则由
确定的镜面反射阵H使得;当时,由
有
算法1:
输入x
将x规范化,
如果M=0,则转出停机
否则
计算,如果,则
4、
5、计算
6、
7、
8、按要求输出
结束
2、程序代码:
function [p,u]=holder2(x)
%HOLDER2 给定向量x≠0,计算Householder初等变换阵的p,u
%程序功能:函数holder2给定向量x≠0,计算Householder初等变换阵的p,u;
%输入:n维向量x;
%输出:[p,u]。p是Householder初等变换阵的系数ρ,
% u是Householder初等变换阵的向量U。
%使用举例:
% [p,u]=holder2(x)
%Define variables:
% x - 输入的n维向量;
% n - n维向量x的维数;
% M - M是向量x的无穷范数,即x中绝对值最大的一项的绝对值;
% p - Householder初等变换阵的系数ρ;
% u - Householder初等变换阵的向量U
% s - 向量x的二范数;
n=length(x); % 得到n维向量x的维数;
p=1;u=0; % 初始化p,u;
M=max(abs(x)); % 得到向量x的无穷范数,即x中绝对值最大的一项的绝对值;
if M==0 % 如果x=0,提示出错,程序终止;
disp(M=0);
return;
else
x=x/M; % 规范化
end;
s=norm(x); % 求x的二范数
if x(1)0 % 首项为负,s值要变号
s=-s;
end
u=x; % 除首项外,其余各项x,u相同
u(1)=s+x(1); % 计算u的首项
p=s*u(1); % 计算p
if n==1 u=0; end % 若x是1×1维向量,则u=0
function H=holderk(x,k)
%HOLDERK 给定向量x≠0,数k,计算初等反射阵Hk,使HkX=Y,其中Y的第k+1项到最后项全为零;
%程序功能:函数holderk给定向量x≠0,数k,计算初等反射阵Hk,使HkX=Y,%程序功能:函数holder2给定向量x≠0,计算Householder初等变换阵的p,u;
%输入:n维向量x,数k;
%输出:H。H是Householder初等变换阵,H*x=y,使得y的第k+1项到最后项全为零;
%引用函数:
% holder2;示例 [p,u]=holder2(x);
%使用举例:
% H=holderk(x,k)
%Define variables:
% x - 输入的n维向量;
% n - n维向量x的维数;
% p - Householder初等变换阵的系数ρ;
% u - Householder初等变换阵的向量U
% k - 数k,H*x=y,使得y的第k+1项到最后项全为零;
n=length(x); % 得到n维向量x的维数;
H=eye(n); % 初始化H,并使H(1:k,1:k)=I;
[p,u]=holder2(x(k:n)); % 得到计算Householde初等变换阵的系数ρ、向量U;
H(k:n,k:n)=eye(n-k+1)-p\u*u; % 计算H(k:n,k:n)=I-p\u*u;
3、计算实例:
x=[2,0,2,1]
x =
2
0
2
1
H=holderk(x,3)
H =
1.0000 0 0 0
0 1.0000 0 0
0 0 -0.8944 -0.4472
显示全部