python——赛得尔迭代法求解方程组

方程组如下:

我们使用赛得尔迭代法求解改方程组,运行的误差在0.00001。代码如下:


import numpy as np
ef g(x,x0,n,d):#赛德尔迭代法
    x1=np.ones(n);y=np.ones(n);y[:-1]=-1;qd=0;x2=np.ones(n);x3=np.ones(n);x3[:]=x0[:]
    while np.any(abs(x1-x3)>d):
        qd+=1
        for u in range(n-1):
            x1[u]=x3[u]
        for j in range(n-1):
            tq=0
            for m in range(n):
                if m!=j:
                    tq+=(x[j,:]/x[j,j]*y)[m]*x3[m]
            x3[j]=tq;x2[j]=tq
        for re in range(n-1):
            x3[re]=x2[re]
    return x3,qd

运行结果:


print('赛德尔迭代法,最终的解X_i(角标从小到大):{},及迭代次数K:{}'.format(g(x,x0,n,d)[0][:-1],g(x,x0,n,d)[1]))



赛德尔迭代法,最终的解X_i(角标从小到大):[1.0000023  1.99999984 2.99998957 0.99998176],及迭代次数K:28

 

 

高斯赛得尔迭代法是一种用于求解线性方程组的数值方。该方通过迭代计算来逼近方程组的解。在Matlab中,可以使用矩阵形式或分量形式实现高斯赛得尔迭代法。 在矩阵形式中,首先需要给定方程组的系数矩阵a和常数向量b。然后,根据迭代公式进行计算,直到满足收敛条件(例如,解的变化小于给定的容差)。最后,输出近似解和迭代次数。 在分量形式中,也需要给定方程组的系数矩阵a和常数向量b。然后,根据迭代公式对每个变量进行计算,直到满足收敛条件。同样,最后输出近似解和迭代次数。 以下是使用Matlab实现高斯赛得尔迭代法的示例代码: 矩阵形式: ``` clear; clc; a=[4,-1,0,-1,0,0;-1,4,-1,0,-1,0;0,-1,4,-1,0,-1;-1,0,-1,4,-1,0;0,-1,0,-1,4,-1;0,0,-1,0,-1,4]; b=[0;5;-2;5;-2;6]; d=diag(diag(a)); %对角元素 u=(triu(a)-d); %上三角矩阵 l=(tril(a)-d); %下三角矩阵 x1=b; num=0; while 1 x0=x1; x2=(-inv(d+l)*u)*x1+inv(d+l)*b; x1=x2; n=norm(x2-x0,inf); %求无穷范数 num=num+1; if n<0.0001 break; end end fprintf("近似解为:\n"); disp(x2); fprintf("迭代次数为:%d次\n",num); ``` 分量形式: ``` clear; clc; a=[4,-1,0,-1,0,0;-1,4,-1,0,-1,0;0,-1,4,-1,0,-1;-1,0,-1,4,-1,0;0,-1,0,-1,4,-1;0,0,-1,0,-1,4]; b=[0;5;-2;5;-2;6]; num=0; x1=b; x2=zeros(6,1); while 1 x0=x1; for i=1:6 x2(i)=(b(i)-a(i,[1:i-1])*x2([1:i-1])-a(i,[i 1:6])*x1([i 1:6]))/a(i,i); end x1=x2; n=norm(x2-x0,inf); %求无穷范数 num=num+1; if n<0.0001 break; end end fprintf("近似解为:\n"); disp(x2); fprintf("迭代次数为:%d次\n",num); ``` 以上就是使用Matlab实现高斯赛得尔迭代法的方和步骤。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eyu.sir

谢谢。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值