数值计算——线性方程组的几个例题解决
2016-11-09 14:29
573 查看
1、
计算计算向量b的1范数、2范数、无穷范数。
计算A矩阵的1范数、2范数、无穷范数、条件数、F-范数。
2、楚列斯基分解
(1)、写出Cholesky分解函数。
用MATLAB代码实现如下所示
(2)、
解方程组Hx=b(取n=2,5,10)
用MATLAB编写代码如下
Fiteration.m
function [ x ] = Fiteration( L,b )
%UNTITLED8 此处显示有关此函数的摘要
% 此处显示详细说明
[n1,n]=size(L);
x = zeros(n,1);
if n1==n
j = 1;
while j<n+1 && L(j,j)~=0
x(j,1) = b(j)/L(j,j);
for i = j+1:n
b(i) = b(i)-L(i,j)*x(j,1);
end
j=j+1;
end
end
运行结果如下所示
(3)、计算H矩阵的1范数、2范数、无穷范数、条件数(取n=2,5,10)
用MATLAB代码实现如下
f222.m
function [ ] = f222(n )
%UNTITLED5 此处显示有关此函数的摘要
% 此处显示详细说明
A = zeros(n,n);
for i = 1:n
for j = 1:n
A(i,j) = 1/(i+j-1);
end
end
fprintf('%s\n','矩阵的1范数为')
a = zeros(1,n);
sum = 0;
for i = 1:n
for j = 1:n
sum = sum + abs(A(j,i));
end
a(i) = sum;
sum = 0;
end
fanshua1 = max(a)
fprintf('%s\n','矩阵A的2范数')
B = A'*A;
[v d] = eig(B);
fanshua2 = sqrt(max(max(d)))
fprintf('%s\n','矩阵A的无穷范数')
for i = 1:n
for j = 1:n
sum = sum + abs(A(i,j));
end
a(i) = sum;
sum = 0;
end
fanshua3 = max(a)
fprintf('%s\n','1范数下矩阵A的条件数')
A_ = inv(A);
for i = 1:n
for j = 1:n
sum = sum + abs(A_(j,i));
end
a(i) = sum;
sum = 0;
end
conda1 = fanshua1*max(a)
fprintf('%s\n','2范数下矩阵A的2条件数')
B = A_'*A_;
[v d] = eig(B);
conda2 = sqrt(max(max(d)))*fanshua2
fprintf('%s\n','无穷范数下矩阵A的条件数')
for i = 1:n
for j = 1:n
sum = sum + abs(A_(i,j));
end
a(i) = sum;
sum = 0;
end
conda3 = max(a)*fanshua3
end
test222.m
clc,clear
fprintf('%s\n','n = 2时')
f222(2)
fprintf('%s\n','n = 5时')
f222(5)
fprintf('%s\n','n = 10时')
f222(10)
计算计算向量b的1范数、2范数、无穷范数。
计算A矩阵的1范数、2范数、无穷范数、条件数、F-范数。
clc,clear b = [2 8 10]; A = [2 4 -2 4 9 -3 -2 -1 7]; fprintf('%s\n','向量b的1范数') fanshub1 = abs(b(1)) + abs(b(2)) + abs(b(3)) fprintf('%s\n','向量b的2范数') fanshub2 = sqrt((b(1)).^2 + (b(2)).^2 + (b(3)).^2) fprintf('%s\n','向量b的无穷范数') fanshub3 = max(abs(b)) fprintf('%s\n','矩阵A的1范数') a = zeros(1,3); sum = 0; for i = 1:3 for j = 1:3 sum = sum + abs(A(j,i)); end a(i) = sum; sum = 0; end fanshua1 = max(a) fprintf('%s\n','矩阵A的2范数') B = A'*A; [v d] = eig(B); fanshua2 = sqrt(max(max(d))) fprintf('%s\n','矩阵A的无穷范数') for i = 1:3 for j = 1:3 sum = sum + abs(A(i,j)); end a(i) = sum; sum = 0; end fanshua3 = max(a) fprintf('%s\n',' 1范数下矩阵A的条件数') A_ = inv(A); for i = 1:3 for j = 1:3 sum = sum + abs(A_(j,i)); end a(i) = sum; sum = 0; end conda1 = fanshua1*max(a) fprintf('%s\n',' 2范数下矩阵A的2条件数') B = A_'*A_; [v d] = eig(B); conda2 = sqrt(max(max(d)))*fanshua2 fprintf('%s\n','无穷范数下矩阵A的条件数') for i = 1:3 for j = 1:3 sum = sum + abs(A_(i,j)); end a(i) = sum; sum = 0; end conda3 = max(a)*fanshua3 fprintf('%s\n','矩阵A的F范数') for i = 1:3 for j = 1:3 sum = sum + (A(i,j)).^2; end end fanshuaf = sqrt(sum) sum = 0;运行结果如下所示
2、楚列斯基分解
(1)、写出Cholesky分解函数。
用MATLAB代码实现如下所示
Cholesky.m function [ B ] = Cholesky(A ) %UNTITLED2 此处显示有关此函数的摘要 % 楚列斯基分解 B = A; n = length(A); for k = 1:n B(k,k) = sqrt(B(k,k)); for i = k+1:n B(i,k) = B(i,k)/B(k,k); end for j = k+1:n for i = k+1:n B(i,j) = B(i,j)-B(i,k)*B(j,k); end end end for i = 1:n-1 for j = i+1:n B(i,j) = 0; end end end
(2)、
解方程组Hx=b(取n=2,5,10)
用MATLAB编写代码如下
Fiteration.m
function [ x ] = Fiteration( L,b )
%UNTITLED8 此处显示有关此函数的摘要
% 此处显示详细说明
[n1,n]=size(L);
x = zeros(n,1);
if n1==n
j = 1;
while j<n+1 && L(j,j)~=0
x(j,1) = b(j)/L(j,j);
for i = j+1:n
b(i) = b(i)-L(i,j)*x(j,1);
end
j=j+1;
end
end
end
Biteration.m function [ x ] = Biteration( U,b ) %UNTITLED9 此处显示有关此函数的摘要 % 此处显示详细说明 [n1,n] = size(U); x = zeros(n,1); if n1==n j = n; while j>0 && U(j,j)~=0 x(j,1) = b(j)/U(j,j); for i = 1:j-1 b(i) = b(i)-U(i,j)*x(j); end j = j-1; end end end
test221.m clc,clear fprintf('%s\n','n = 2时') A = [1 1/2 1/2 1/3]; L = Cholesky(A) x1 = [1 1]; b = A*x1 front = Fiteration( L,b ); x = Biteration(L',front) fprintf('%s\n','n = 5时') A = zeros(5,5); for i = 1:5 for j = 1:5 A(i,j) = 1/(i+j-1); end end L = Cholesky(A) x1 = ones(5,1); b = A*x1 front = Fiteration( L,b ); x = Biteration(L',front) fprintf('%s\n','n = 10时') A = zeros(10,10); for i = 1:10 for j = 1:10 A(i,j) = 1/(i+j-1); end end L = Cholesky(A) x1 = ones(10,1); b = A*x1 front = Fiteration( L,b ); x = Biteration(L',front)
运行结果如下所示
(3)、计算H矩阵的1范数、2范数、无穷范数、条件数(取n=2,5,10)
用MATLAB代码实现如下
f222.m
function [ ] = f222(n )
%UNTITLED5 此处显示有关此函数的摘要
% 此处显示详细说明
A = zeros(n,n);
for i = 1:n
for j = 1:n
A(i,j) = 1/(i+j-1);
end
end
fprintf('%s\n','矩阵的1范数为')
a = zeros(1,n);
sum = 0;
for i = 1:n
for j = 1:n
sum = sum + abs(A(j,i));
end
a(i) = sum;
sum = 0;
end
fanshua1 = max(a)
fprintf('%s\n','矩阵A的2范数')
B = A'*A;
[v d] = eig(B);
fanshua2 = sqrt(max(max(d)))
fprintf('%s\n','矩阵A的无穷范数')
for i = 1:n
for j = 1:n
sum = sum + abs(A(i,j));
end
a(i) = sum;
sum = 0;
end
fanshua3 = max(a)
fprintf('%s\n','1范数下矩阵A的条件数')
A_ = inv(A);
for i = 1:n
for j = 1:n
sum = sum + abs(A_(j,i));
end
a(i) = sum;
sum = 0;
end
conda1 = fanshua1*max(a)
fprintf('%s\n','2范数下矩阵A的2条件数')
B = A_'*A_;
[v d] = eig(B);
conda2 = sqrt(max(max(d)))*fanshua2
fprintf('%s\n','无穷范数下矩阵A的条件数')
for i = 1:n
for j = 1:n
sum = sum + abs(A_(i,j));
end
a(i) = sum;
sum = 0;
end
conda3 = max(a)*fanshua3
end
test222.m
clc,clear
fprintf('%s\n','n = 2时')
f222(2)
fprintf('%s\n','n = 5时')
f222(5)
fprintf('%s\n','n = 10时')
f222(10)
相关文章推荐
- 数值策划分享:几个经典的战斗力计算公式
- 科学计算线性方程组的几个实例
- 数值计算 && 实验8 && Gauss-Seidel迭代法求解线性方程组
- 数值计算——线性方程组的解法
- 数值计算-线性方程组求解(0)
- 数值计算-线性方程组求解(1)-LU分解-MATLAB实现
- android 解决计算数值不准确的问题
- 【数值计算】花式解线性方程组
- 尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题。现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示同一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示时为三位数1、7、3。按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11。
- 数值计算线性方程组求解实现
- 数值计算——线性方程组的迭代法
- 数值计算-线性方程组求解(2)-追赶法解三对角矩阵-MATLAB实现
- 计算一棵树的深度和宽度[Treeview的深度和宽度](多题头的表格问题解决的基础)
- 网站重构中IE存在的几个BUG的解决办法
- 触发器和约束各有什么特点?基于几个关联的表的记录的查询速度太慢,从哪些发面考虑解决?
- Notes 开发中的几个小问题及其解决方法
- GEF,EMF,RCP,Eclipse's plugin的几个问题(4) No more handles Exception 解决办法
- T-SQL 2 Tips: 1.计算任意两日期之间的"周一"到"周日"分别各有几个! 2.根据出生日期计算精确年龄!
- 蛙蛙推荐:导数据库的几个字段转换问题的解决
- 用UTF-8的几个问题的解决