matlab 解方程组_数值计算实验2 解线性方程组实验(1)

实验2 解线性方程组实验(1)

成绩

实验类型:●验证性实验  ○综合性实验  ○设计性实验

实验目的:进一步熟练掌握用Jacobi迭代法和Gauss-Seidel法解线性方程组的算法,提高编程能力和解算线性方程组问题的实践技能。

实验内容:(1)取初值性x(0)=(0,0,0,0)T, 精度要求ε=10-6,用Jacobi迭代法解线性方程组

4151940aeb402e54d9ebc3a87e4f0a46.png

(2)取初值性x(0)=(0,0,0,0)T, 精度要求ε=10-6,用Gaoss-Seidel迭代法解线性方程组

5b9264a75e1e99b592bcbf03723f66a8.png

实验原理:Jacobi迭代算法,Gaoss-Seidel迭代算法

实验说明:编写程序计算并输出中间结果;再要求分别用Jacobi迭代算法,Gaoss-Seidel迭代算法手工解算线性方程组,并验证计算机程序迭代计算的前两步近似解向量X(1),X(2)与手工迭代计算的前两步近似解向量X(1),X(2)是否一致,并给出验证结论。必须提交A4规格的纸质手工书写手工计算的过程内容(只要求手写迭代计算的前两步X(1),X(2))和计算机程序计算输出的中间结果和最终结果。

实验步骤

1 要求上机实验前先编写出程序代码

2 编辑录入程序

3 调试程序并记录调试过程中出现的问题及修改程序的过程

4 经反复调试后,运行程序并验证程序运行是否正确。

5 记录运行时的输入和输出。  

实验报告:根据实验情况和结果撰写并递交实验报告。

实验总结(学会了......; 掌握了......; 训练了......; 发现了......; 今后学习中......有待提高。)

程序代码

电子报告word文件命名规则:专业班级-学号后两位-实验X-姓名.doc, 如信息123班学号为201212030315的郭海涛同学实验2报告word文件命名则应是:信息123-15-实验2-郭海涛.doc, 其中 .doc是Word文件扩展名。特别提醒:电子报告文件命名不规范的报告将不予接收。

实验报告:

1、雅可比迭代

function [x,y] = Jacobi(n, A ,b)

    %y = zeros(1000,1);

    eps = 1.0e-6;

    D = diag(diag(A));

    L = -tril(A, -1);

    U = -triu(A, 1);

    B = D\(L+U);

    f = D\b;

    count = 1;

    x0 = zeros(n,1);

    x = B*x0 + f;

    tic;

    while norm(x-x0)> eps

        x0 = x;

        %y(count) = norm(x-A\b);

        x = B*x0 + f;

        count = count + 1;

        if count > 2000

            disp('error:该矩阵不收敛');

            return;

        end

>> A=[14 4 4 4;4 14 4 4;4 4 14 4;4 4 4 14]

A =

    14     4     4     4

     4    14     4     4

     4     4    14     4

     4     4     4    14

>> b=[-4;16;36;56]

b =

    -4

    16

    36

56

>> x=majacobi(A,b,x0,ep,N)

k=94

x =

   -2.0000

    0.0000

    2.0000

    4.0000

2、高斯迭代

function x= Gauss_Seidel(n, A ,b)

    eps = 1.0e-6;

    D = diag(diag(A));

    L = -tril(A, -1);

    U = -triu(A, 1);

    B = (D - L)\U;

    f = (D - L)\b;

    count = 1;

    x0 = zeros(n,1);

    x = B*x0 + f;

    tic;

    while norm(x-x0) > eps

        x0 = x;

        x = B*x0 + f;

        count = count + 1;

        if count > 2000

            disp('error:¸Ã¾ØÕó²»ÊÕÁ²');

            return;

        end

    end

    disp(count);

end

>> A=[6 -2 -1 -1;-2 12 -1 -1;-1 -1 6 -2;-1 -1 -1 12]

A =

     6    -2    -1    -1

    -2    12    -1    -1

    -1    -1     6    -2

    -1    -1    -1    12

>> b=[-16;6;8;54]

b =

   -16

     6

     8

    54

>> n=4

n =

     4

>> x= Gauss_Seidel(n, A ,b)

    13

x =

   -1.0782

    0.9553

    2.8897

    4.7306

实验总结:通过本次实验我学会了雅可比迭代算法和高斯迭代算法,可以使用这两个算法来解线性方程组;掌握了MATLAB中的rand函数、diag函数、orth函数tril函数和triu函数;训练了关于迭代函数的用法;发现了自己在编写程序时仍然有很多问题,使用这些函数时存在的一些问题;在今后的学习中我编写代码的能力和使用函数的能力有待提高。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值