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

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

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

### Spring Boot整合Redis时连接超时的解决方案 在Spring Boot应用中,当Redis连接出现超时时,通常是因为网络延迟、资源不足或者配置不当引起的。以下是针对该问题的具体分析和解决方法: #### 1. 配置优化 通过调整`application.properties`文件中的参数来提高Redis客户端的性能和稳定性。以下是一些重要的配置项及其作用说明[^1]: - **连接超时时间 (`timeout`)** - 设置合理的超时时间可以有效减少因网络波动导致的异常行为。 ```properties spring.redis.timeout=5000ms ``` - **连接池设置** - 调整连接池的最大活动连接数(`max-active`)以及最大等待时间(`max-wait`)能够缓解高并发场景下的压力。 ```properties spring.redis.pool.max-active=20 spring.redis.pool.max-wait=3000ms ``` #### 2. 客户端驱动的选择与版本管理 确保使用的Redis客户端库版本兼容当前环境需。Spring Boot默认采用Lettuce作为其内部实现机制之一[^3]。如果发现特定功能不匹配,则考虑升级至最新稳定版或切换到Jedis。 #### 3. 错误日志排查 对于已知错误如 `java.io.IOException: 远程主机强迫关闭了一个现有的连接`, 可能的原因包括但不限于服务重启频繁、防火墙拦截等问题[^2]。建议开启详细的调试模式以便定位本原因: ```yaml logging.level.org.springframework.data.redis=DEBUG ``` #### 4. 健康监测与自动恢复策略 利用Spring Actuator监控组件实时跟踪Redis状态变化,并结合重试逻辑增强系统的鲁棒性[^4]: ```java @Bean public RetryTemplate retryTemplate() { SimpleRetryPolicy policy = new SimpleRetryPolicy(); policy.setMaxAttempts(3); ExponentialBackOffPolicy backoffPolicy = new ExponentialBackOffPolicy(); backoffPolicy.setInitialInterval(100); // 初始间隔时间为100毫秒 RetryTemplate template = new RetryTemplate(); template.setRetryPolicy(policy); template.setBackOffPolicy(backoffPolicy); return template; } ``` 以上措施综合运用可显著降低Redis连接失败的概率并提升用户体验满意度。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值