我是靠谱客的博主 包容胡萝卜,最近开发中收集的这篇文章主要介绍matlab 求解线性方程组——迭代法matlab 求解线性方程组——迭代法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

标签(空格分隔): matlab 线性方程组 迭代 数值

文章目录

    • 标签(空格分隔): matlab 线性方程组 迭代 数值
    • @[toc]
  • matlab 求解线性方程组——迭代法
    • 1 测试迭代法求解函数GaussSeidelIteration()、JacobiIteration()
    • 2 迭代法求解函数GaussSeidelIteration()
    • 3 迭代法求解函数JacobiIteration()
    • 4 求解矩阵的范数matrixnorm()
    • 5 求解矩阵的范数条件数matrixcond()
    • 6 向量的p范数vectornorm()
    • 联系作者 definedone@163.com

matlab 求解线性方程组——迭代法

1 测试迭代法求解函数GaussSeidelIteration()、JacobiIteration()

clc,clear
% m=[1 2
%
-1 2]
% n1=matrixnorm([1 2;-1 2],1)
% n2=matrixnorm([1 2;-1 2],2)
% ninf=matrixnorm([1 2;-1 2],inf)
%
% cond1=matrixcond(m,1)
% cond2=matrixcond(m,2)
% condinf=matrixcond(m,inf)
% a=[10.2 -0.25 -.3
%
-.41 1.13 -.15
%
-.25 -.14 1.21]
% b=[.515
%
1.555
%
2.78]
% precision=1e-3
% x=[2 2 2]'
% x=JacobiIteration(a,b,precision,x)
% xsystem=inv(a)*b
a=[6 -1 -1
-1 6 -1
-1 -1 6]
b=[11.33 32 42]'
precision=1e-3
x=[4 6 8]'
x=GaussSeidelIteration(a,b,precision,x)
xsystem=inv(a)*b

运行结果:

iterationTimes =
7
x =
4.6661
7.6189
9.0475
xsystem =
4.6661
7.6189
9.0475

2 迭代法求解函数GaussSeidelIteration()

function x=GaussSeidelIteration(a,b,precision,x)
%时间:2013/12/08 姓名:邓能财
disp('%GaussSeidel——迭代法求解线性方程组')
if nargin<4,
x=zeros(dim,1);
elseif nargin<3,
precision=1e-9; end
[dim,dim2]=size(a);
disp('迭代的方程为:x(k+1)=s*xk+f')
%错误的矩阵:
assert( dim==dim2 && dim==length(b),...
['Argument input error:
',...
'Matrix dimensions must agree.'])
d=diag(diag(a))
a=a-d;
l=-tril(a)
u=-triu(a)
invd_l=inv(d-l)
s=invd_l*u
f=invd_l*b
x_=ones(dim,1);
precision=precision/10;
x
iterationTimes=0
while any(abs(x-x_)>=precision)
x_=x;
x=s*x_+f
iterationTimes=iterationTimes+1
end
end

3 迭代法求解函数JacobiIteration()

function x=JacobiIteration(a,b,precision,x)
%Jacobi迭代法求解线性方程组
%时间:2013/12/08 姓名:邓能财
[dim,dim2]=size(a);
if nargin<4,
x=zeros(dim,1);
elseif nargin<3,
precision=1e-10; end
disp('迭代的方程为:x(k+1)=g*xk+f')
%错误的矩阵:
assert( dim==dim2 && dim==length(b),...
['Argument input error:
',...
'Matrix dimensions must agree.'])
d=diag(diag(a))
invd=inv(d)
g=invd*(d-a)
f=invd*b
x_=ones(dim,1);
iterationTimes=0
while any(abs(x-x_)>=precision)
x_=x;
x=g*x_+f
iterationTimes=iterationTimes+1
end
end

4 求解矩阵的范数matrixnorm()

function n=matrixnorm(m,p)
%求矩阵的p(1,2,inf)范数
%时间:2013/12/08 姓名:邓能财
if nargin<2,
p=1; end
[dim,dim2]=size(m);
%错误的矩阵:
assert( dim==dim2,...
['Argument input error:
',...
'Matrix dimensions must agree.'])
switch p
case 1
disp('矩阵的一范数')
sum_=sum(m,1)
ssum_=sym(sum_)
[max_,maxindex]=max(sum_)
n=max_
case inf
disp('矩阵的无穷范数')
sum_=sum(m,2)
ssum_=sym(sum_)
[max_,maxindex]=max(sum_)
n=max_
case 2
disp('矩阵的2范数')
t=m'*m
st=sym(m'*m)
%t的特征多项式
syms x
tx=x*eye(dim)-t
fx=det(tx)
eigenvalue=eig(t)
seig=eig(st)
sym(eigenvalue)
real_eigenvalue=real(abs(eigenvalue))
[max_,maxindex]=max(real_eigenvalue)
n=sqrt(max_)
otherwise
error('第三个参数只能为1、2或inf')
end
end

5 求解矩阵的范数条件数matrixcond()

function c=matrixcond(m,p)
%时间:2013/12/08 姓名:邓能财
if nargin<2,
p=1; end
[dim,dim2]=size(m);
%错误的矩阵:
assert( dim==dim2,...
['Argument input error:
',...
'Matrix dimensions must agree.'])
switch p
case 1
disp('矩阵的一范数条件数')
inv_m=inv(m)
sinv_m=inv(sym(m))
c=matrixnorm(m,p)*matrixnorm(inv_m,p)
case inf
disp('矩阵的无穷范数条件数')
inv_m=inv(m)
sinv_m=inv(sym(m))
c=matrixnorm(m,p)*matrixnorm(inv_m,p)
case 2
disp('矩阵的2范数条件数')
inv_m=inv(m)
sinv_m=inv(sym(m))
c=matrixnorm(m,p)*matrixnorm(inv_m,p)
otherwise
error('第二个参数只能为1、2或inf')
end
end

6 向量的p范数vectornorm()

function n=vectornorm(x,p) %向量的p范数
%时间:2013/12/08 姓名:邓能财
if nargin<2,
p=1; end
%错误的p:
assert( p>0,...
['Argument input error:
',...
'The next argument must be positive number! '])
n=sum(abs(x).^p)^(1/p);
end

联系作者 definedone@163.com

end

最后

以上就是包容胡萝卜为你收集整理的matlab 求解线性方程组——迭代法matlab 求解线性方程组——迭代法的全部内容,希望文章能够帮你解决matlab 求解线性方程组——迭代法matlab 求解线性方程组——迭代法所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部