数值分析报告

[报告要求]

1.用 Matlab(或c)语言或你熟悉的其他算法语言编程序,使之尽量具有通用性。

2.完成计算后写出计算实验报告,内容包括:计算机型号和所用机时,算法步骤描述,变量说明,程序清单,输出计算结果,结果分析和小结。

3.实习时间: 09年12月19日----09年12月21日。

[实习题目一]

给定方程组  

[实习要求]

1用G-S迭代法解该方程组,取初值X(0)=(0,0,0)T迭代到‖x(k+1)-x(k)‖∞≤10-4为止

2讨论迭代法的收敛性

3输出迭代矩阵BG迭代公式,迭代次数及计算结果表[算法描述]

  1. 运用LU分解得到L矩阵和U矩阵,将方程组转化为LUX=b,令UX=Y,原方程组转化为LY=b和UX=Y,最后解的原方程组得解X。
  2. 用打印函数输出系数矩阵A,b,L,U,X和行列式A的值。
  3. 根据矩阵条件数估计的定义,通过程序解得

[程序清单]

 function [x,k]=GassSeidelMathod(A,b)

k=1;

while k>=1

    x=GSM(A,b,k);

    y=x(:,k+1)-x(:,k);

    f=fanshu(y);

    if f<=0.0001

        break;

    else

        k=k+1;

    end

end

function x=GSM(A,b,k)

n=length(A);x(1:3,1)=[0 0 0]';

for i=1:n

    sum1=0;sum2=0;

    for m=1:i-1

        sum1=sum1+A(i,m)*x(m,k);

    end

    for m=i+1:n

        sum2=sum2+A(i,m)*x(m,k);

    end

    x(i,k+1)=(b(i)-sum1-sum2)/A(i,i);

end

function max=fanshu(y)

n=length(y);

for i=1:2

    max=y(1);

    if y(i+1)>y(i)

        max=y(i+1);

    end

end

function  Convergence(A)

k=0;

[m,n]=size(A);

for i=1:m

    sum(i)=0;

    for j=1:n

        sum(i)=sum(i)+abs(A(i,j));

    end

    sum(i)=sum(i)-abs(A(i,i));

    if  abs(A(i,i))>=sum(i)

        k=k+1;

    end

end

if k==3

    'G-S迭代法收敛'

else

    'G-S迭代法不收敛'

end

function  hanshu1(A,b,v1)

D=diag(v1);L=-tril(A-D);

U=-triu(A-D);B=inv(D-L)*U

f=inv(D-L)*b

[输出结果]

[实习题目二] 

              

, 即 AX=b

[实习要求] 

1用平方根法解上述方程组。

2讨论当b 有微小变化,即 b+

b=(-4.02, 3.5, 10)

时,A是否为病态矩阵。给出讨论结果。

3输出分解矩阵L’及解向量 X和 detA。

[程序清单]

function  [L,U]=lu(A)

        U(1,j)=A(1,j);

        if j>=2

            L(j,1)=A(j,1)/U(1,1);

        elseif j>=i

            for k=1: i-1

                sum=0;

                sum=sum+L(i,k)*U(k,j);

            end

            U(i,j)=A(i,j)-sum;

            elseif i<=j

                for k=1:j-1

                    sum=0;

                    sum=sum+L(i,k)*U(k,j));

                end

                L(i,j)=(A(i,j)-sum;

        else

            break;

        end

function x=gauss(A)

[L,U]=lu(A);

x=abs(U(1,1)*U(2,2)*U(3,3))

function Pathological(A)

FS1=fanshu(A);

B=inv(A);

FS2=fanshu(B);

FS=FS1*FS2;

if FS>10

    'A为病态矩阵'

else

    'A不是病态的'

end

function FS=fanshu(A)

for i=1:3

  sum(i)=0;

    for j=1:3

        sum(i)=sum(i)+A(i,j);

    end

end

B=[sum(1) sum(2) sum(3)]';

FS=B(1);

for k=1:3

    if B(k)>FS

      FS=B(k);

      kFS=k;

    end

end;

function L=average(A)

for i=1:3

    sum=0;

    for j=1:i

        if i==j

            for k=1:j-1

                sum=sum+L(i,k)^2;

            end

            L(i,j)=sqrt(A(i,j)-sum);

        elseif j<i

            for k=1:j-1

                sum=sum+L(i,k)*L(j,k);

            end

            L(i,j)=(A(i,j)-sum)/L(j,j);

        else

            break;

        end

    end

end

function [l,x]=SymPos1(A,b)

L= SymPos2 (A)

l=L';y=inv(L)*b;

x=inv(l)*y;

function L= SymPos2(A)

N = size(A);

n = N(1);

L(1,1) = sqrt(A(1,1));

L(2:n,1) = A(2:n,1)/L(1,1);   %L的第一列

for k=2:n

    L(k,k) = sqrt(A(k,k)-L(k,1:(k-1))*transpose(L(k,1:(k-1))));

    %L的对角元素

    for i=(k+1):n

        L(i,k) = (A(i,k)-L(i,1:(k-1))*transpose(L(k,1:(k-1))))/L(k,k);

        %L的第k列

    end

end

[输出结果]

[总结]

    通过这次课程实习,我对数值分析这门课的有了一定的认识,初步掌握了GS迭代法、LU分解法、和牛顿求根法等的运用,这对我以后对专业课程的学习有很大的帮助。同时对计算机程序语言,如C语言编程和数学软件MATLAB的应用有了一定的认识了和深入,使我在遇到学习上的困难时可以自己解决。我也将继续努力学习专业知识。

[参考文献]

[1]李庆扬著.数值分析基础教程.高等教育出版社.2004年2月

[2]苏小红等编著.C语言程序设计教程.电子工业出版社.2002年1月

[3]严蔚敏,吴伟明.数据结构(C语言版).清华大学出版社.1997年4月

[4]胡良剑,孙晓君。MATLAB数学实验,高等教育出版社.2006年6月

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实验一: 使用二分法和牛顿法求方程的根 1.实验目的 正确理解方程求根划界法和开放法,能够编程实现其中指定的方法,并且通过比较, 分析出两类方法的优缺点。 2. 实验任务 分别用二分法和牛顿法求方程在区间[2,3]内的根,观察两种方法的迭代次数,并说明原因。 实验二: 使用高斯消元法和列主高斯消元法求解方程组 1.实验目的 正确理解原始高斯消去法,并清楚其优缺点,正确理解列主元消去法,并且可以在程序中体现出其优势。 2. 实验任务 用原始高斯消去法、列主元消去法分别求解方程组,并比较结果的精度 实验三:理解和使用插值和拟合,实现预测 1.实验目的 理解数据插值和拟合应用场景,能够根据数据特点,正确选择算法,并且能够编程实验相关算法。 2。实验任务 某乡镇企业2010-2016年的大致生产利润如下表,试采用正确的方法预测2017和2018年的利润 年份 2010 2011 2012 2013 2014 2015 2016 利润(万元) 70 122 144 152 174 196 202 实验四: 理解数据插值和拟合,完成本实验 1.实验目的 理解数据插值和拟合应用场景,能够根据数据特点,正确选择算法,并且能够编程实验相关算法。 2. 实验任务 战斗机机翼外形根据工艺要求由一组数据(x,y)给出,用程控铣床加工对每一刀只能沿x方向和y方向切割很小的一步,因此需要从已知数据得到满足加工所要求的步长很小的每一步坐标。 下表给出的x,y数据位于机翼断面的下轮廓上,假设需要得到x坐标每改变0.1时的y坐标,试完成加工所需要数据,并画出曲线。 x 0 3 5 7 9 11 12 13 14 15 Y 0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6
课题一: 线性方程组的迭代法 一、实验内容 1、设线性方程组 = x = ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 ) 2、设对称正定阵系数阵线方程组 = x = ( 1, -1, 0, 2, 1, -1, 0, 2 ) 3、三对角形线性方程组 = x = ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 ) 试分别选用Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法计算其解。 二、实验要求 1、体会迭代法求解线性方程组,并能与消去法做以比较; 2、分别对不同精度要求,如 由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR方法时,选取松弛因子 =0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。 三、目的和意义 1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较; 2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序; 3、体会上机计算时,终止步骤 (予给的迭代次数),对迭代法敛散性的意义; 4、体会初始解 x ,松弛因子的选取,对计算结果的影响。 课题二:数值积分 一、实验内容 选用复合梯形公式,复合Simpson公式,Romberg算法,计算 (1) I = (2) I = (3) I = (4) I = 二、实验要求 1、 编制数值积分算法的程序; 2、 分别用两种算法计算同一个积分,并比较其结果; 3、 分别取不同步长 ,试比较计算结果(如n = 10, 20等); 4、 给定精度要求 ,试用变步长算法,确定最佳步长。 三、目的和意义 1、 深刻认识数值积分法的意义; 2、 明确数值积分精度与步长的关系; 3、 根据定积分的计算方法,可以考虑二重积分的计算问题。 四、流程图设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值