《数值分析》课程matlab源码
(一)向量范数
1.1 定义
范数的定义如下:
1.2 matlab函数实现
通过自定义Vector_norm(a,p)函数实现对向量a的1范数、2范数、p范数和inf范数的计算,具体代码如下:
function X=Vector_norm(a,p)
%%%输入向量a和所求的向量的范数类型(包括1范数,2范数,p范数,inf范数);
%%%输出向量a的范数值;
n=length(a);
X=0;
Test=0;
switch p
case 1
for i=1:n
X=X+abs(a(i)); %%向量分量取绝对值,再求和;
end
case 2
for i=1:n
X=X+(abs(a(i)))^2; %%向量分量取绝对值,再求和;
end
X=sqrt(X);
case inf
a=abs(a);
X=max(a);
case p
for i=1:n
X=X+(abs(a(i)))^p; %%向量分量取绝对值,再求和;
end
X=X^(1/p);
end
1.3 函数的调用
在命令行中输入向量a和范数类型p,然后调用Vector_norm(a,p)函数,具体调用如下图中案例所示:
(二)矩阵的范数
2.1 定义
矩阵的范数定义如下:
2.2 matlab函数实现
通过自定义matrix_norm(A,p)函数实现对向量a的1范数、2范数、inf范数和Frobenius范数的计算,具体代码如下:
function X=matrix_norm(A,p)
%%%
a=abs(A);
switch p
case 1
X=max(sum(a,1)); %%计算矩阵1范数;
case 2
[~,D]=eig(A'*A); %%计算特征向量、特征值;
D=diag(D); %%提取特征值;
X=sqrt(max(D)); %%计算矩阵2范数;
case inf
X=max(sum(a,2)); %%计算矩阵inf范数;
case 'fro'
A_=A.^2; %%“.”运算,矩阵元素求平方;
X=sqrt(sum(A_(:))); %%计算矩阵Frobenius范数;
end
2.3 函数的调用
在命令行中输入矩阵A和范数类型p,然后调用matrix_norm(a,p)函数,具体调用如下图中案例所示:
(三)上三角回代法求线性方程组的解
3.1 上三角回代法算法
3.2 matlab函数实现
function X=a_Back_subtitution(A,B)
%%%此函数用于通过回代法,计算方程组的解;
%%%输入上三角矩阵(或对角阵)A和右端常数项B(按列输入);
%%%输出方程组的解X。
[n,~]=size(A);
X=zeros(n,1);
for i=n:-1:1
S=A(i,i+1:n)*X(i+1:n);
X(i,1)=1/A(i,i)*(B(i)-S);
end
3.3函数调用
具体调用如下图案例所示:
(四)下三角回代法求线性方程组的解
4.1 算法思想
和上三角的回代法类似,并且计算过程是按顺序回代,即依次计算X1,X2,X3,…,Xn,相比较而言更加容易思考清楚。(所以小编建议可以先弄清楚下三角的回代法,对于上三角的回代法掌握有所帮助)
4.2 matlab函数实现
function X=b_Back_subtitution(A,B)
%%%此函数用于通过回代法,计算方程组的解;
%%%输入下三角矩阵(或对角阵)A和右端常数项B(按列输入);
%%%输出方程组的解。
[n,~]=size(A);
X=zeros(n,1);
for i=1:1:n
S=A(i,1:n-1)*X(1:n-1);
X(i,1)=1/A(i,i)*(B(i)-S);
end
4.3 函数的调用
具体调用如下图案例所示:
注:1、关于上述自定义函数均可以与matlab自带函数或matlab中正确的计算结果进行比较,从而建议函数的正确性。
小编就线性方程组求解的函数(即三角回代法)给出一种检验方法:
Y=A\B; %正确的计算结果;
error=Y-X; %其中X表示用自定义函数计算出来的方程的解(列向量);
Test=norm(error,2) %用matlab自带的norm()函数,计算error的2范数,
...如果该范数为0或者接近0即表示函数正确。
2、关于矩阵分析相关算法小编将会持续更新,希望感兴趣的小伙伴给个点个赞,在默默的点亮关注~~
最后,对一直默默关注小编的小伙伴说一声感谢,你们的关注就是小编走下去的动力,谢谢