计算方法上机题目.docx

上传人:b****2 文档编号:1955293 上传时间:2022-10-25 格式:DOCX 页数:24 大小:1.62MB
下载 相关 举报
计算方法上机题目.docx_第1页
第1页 / 共24页
计算方法上机题目.docx_第2页
第2页 / 共24页
计算方法上机题目.docx_第3页
第3页 / 共24页
计算方法上机题目.docx_第4页
第4页 / 共24页
计算方法上机题目.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

计算方法上机题目.docx

《计算方法上机题目.docx》由会员分享,可在线阅读,更多相关《计算方法上机题目.docx(24页珍藏版)》请在冰豆网上搜索。

计算方法上机题目.docx

计算方法上机题目

1.计算方法A上机作业

上机练习目的

❑复习和巩固数值计算方法的基本数学模型,全面掌握运用计算

机进行数值计算的具体过程及相关问题。

❑利用计算机语言独立编写、调试数值计算方法程序,培养学生

利用计算机和所学理论知识分析解决实际问题的能力。

上机练习任务

•利用计算机语言编写并调试一系列数值方法计算通用程序,并

能正确计算给定题目,掌握调试技能。

•掌握文件使用编程技能,如文件的各类操作,数据格式设计、

通用程序运行过程中文件输入输出运行方式设计等。

•写出上机练习报告。

计算方法A上机题目

1.QR分解方法求解线性方程组。

(第二章)

2.共轭梯度法求解线性方程组。

(第三章)

3.三次样条插值(第四章)

4.四阶龙格-库塔法求解常微分方程的初值问题

程序设计要求

1.程序要求是通用的,在程序设计时要充分考虑哪些变量应该可

变的。

2.程序要求调试通过。

上机报告要求

报告内容包括:

●每种方法的算法原理及程序框图。

●程序使用说明。

●算例计算结果。

2.QR分解法求解线性方程组

计算原理

当是任意给定的非零向量,是任意给定的单位向量,则存在初等反射阵,使得,其中为常数,当取单位向量时,由u确定的矩阵H必定满足,所以在计算过程中取u的值为上述值。

设A是一个阶矩阵且它的列向量线性无关,则利用豪斯霍尔德变换可以把A逐步化为上梯形矩阵,设

具体变换过程如下:

设是m维单位坐标向量。

第1步为把矩阵A的第一列化为,取(或取),根据上式可得,取

其中

令,用左乘得,

程序框图

得到矩阵Q和R

i=n

输入系数矩阵A右端列向量b

x

计算实习

用豪斯霍尔德变换求方程组,其中

Matlab代码

%使用说明:

%需自己输入矩阵A及b的值

%变量Q,R分别为进行QR分解后的结果

clear

clc

formatlong

load('A矩阵.mat')

load('b矩阵.mat')

%调用函数qrhs进行QR分解

[Q,R]=qrhs(A);

[~,n]=size(R);

fprintf('您输入的矩阵阶数');

n

y=Q'*b;

%回代过程

x(n,1)=y(n,1)/R(n,n);

fori=n-1:

-1:

1

s=y(i,1);

forj=i+1:

n

s=s-R(i,j)*x(j,1);

end

x(i,1)=s/R(i,i);

end

x

被调用函数qrhs

function[Q,R]=qrhs(A)

formatlong

[~,n]=size(A);

Q=eye(n);

forj=1:

n-1

B=norm(A(j:

n,j));

Y=zeros(n-j+1,1);

Y(1,1)=-sign(A(1,j))*B;

X=A(j:

n,j);

I=eye(n-j+1);

N=I-(2/(norm(X-Y))^2)*(X-Y)*(X-Y)';

H=[eye(j-1)zeros(j-1,n-j+1);zeros(n-j+1,j-1)N];

A=H*A;

Q=Q*H;

end

R=A;

Q;

R;

end

3.

共轭梯度法求解线性方程组

计算原理

当A是n阶对称正定矩阵,若是二次函数的极小值点,则是方程组的解,即

共轭梯度法在形式上具有迭代法的特征,即给定初始向量,由迭代格式

产生的迭代序列在无舍入误差的假定下,最多经过n次迭代就能求得的最小点,也就是方程组的解。

共轭梯度法中关键的两点是,确定迭代格式中的搜索方向和最佳步长。

搜索方向,与前一次的搜索方向关于关于矩阵A共轭,即,然后从点出发,沿方向求得的极小值点,即。

由此解得最佳步长和参数的表达式为

共轭梯度法的计算公式为:

程序框图

计算实习

用共轭梯度法求解线性方程组,其中

矩阵A的阶数n分别取为100,200,400,指出计算结果是否可靠。

Matlab代码

%使用说明:

共轭梯度法求解Ax=b

%命令行中输入矩阵A及b

%然后调用函数getd进行计算

%变量含义:

n—方程阶数,x0—初始向量

%e—计算精度,r—残向量

clear

clc

formatlong

n=input('请输入方程阶数n=');%输入矩阵阶数

A=zeros(n);

b=zeros(n,1);

A(1,1)=-2;A(1,2)=1;A(n,n-1)=1;A(n,n)=-2;

b(1,1)=-1;b(n,1)=-1;

fori=2:

n-1;

A(i,i)=-2;A(i,i-1)=1;A(i,i+1)=1;

end;

A;

b;%生成对应阶数的矩阵A和b

x0=zeros(n,1);%生成初始向量

e=input('请输入计算精度e=');%输入计算精度

x=getd(A,b,x0,e);%调用函数getd进行计算

ifn==100%对x元素进行重新排列

x=reshape(x,10,10)

elseifn==200

x=reshape(x,10,20)

else

x=reshape(x,20,20)

end

被调用函数getd

functionx=getd(A,b,x0,e)%矩阵A,b,初始向量x0,精度e

n=size(A,1);%获取矩阵A的阶数

x=x0;%初始向量

r=b-A*x;%残向量

d=r;%搜索向量

fork=0:

(n-1)

p=(r'*r)/(d'*A*d);

x=x+p*d;

r2=b-A*x;

if((norm(r2)<=e)||(k==n-1))

x;

break;

end

q=norm(r2)^2/norm(r)^2;

d=r2+q*d;

r=r2;

end

4.三次样条插值

计算原理

 

程序框图

计算实习

给定函数.取等距节点,构造三次样条插值。

Matlab代码

%使用说明:

该程序解决的是三次样条插值中,第1,2类边界条件的问题

%各变量含义:

a,b—插值区间左右端点

%n—插值节点数目

%p,q—左右端点导数值

%A,M,d—用于求解AM=d中,矩阵M的值

%C—存放各区间内插值函数的系数矩阵

%zglu—利用追赶法进行LU分解,求解AM=d的函数

clear

clc

formatlong

%输入区间,计算插值节点

a=input('请输入区间左端点a=');

b=input('请输入区间右端点b=');

n=input('请输入插值节点数目(包括左右端点)n=');

d=zeros(n,1);x=zeros(n,1);y=zeros(n,1);A=zeros(n);

h=(b-a)/(n-1);

fprintf('步长h=%d',h)

fori=1:

n

x(i,:

)=a+h*(i-1);

y(i,:

)=1/(1+25*(x(i,:

))^2);%计算插值节点处的函数值

end

%选择边界条件进行计算,并输入区间左右端点的导数值p,q

xz=input('请选择边界条件类型(1或2或3)xz=');

fprintf('以第%d类边界条件进行计算',xz);

p=input('请输入区间左端边界条件p=');

q=input('请输入区间右端边界条件q=');

%计算矩阵A及矩阵d

ifxz==1

A(1,1)=2;A(1,2)=1/2;A(n,n)=2;A(n,n-1)=1/2;

forj=1:

n-1

d(j,:

)=(3/h)*((y(j+1,:

)-y(j,:

))/h-(y(j,:

)-y(j-1,:

))/h);

A(j,j)=2;A(j,j-1)=0.5;A(j,j+1)=0.5;

end

d(1,:

)=d(1,:

)-1/2*p;

d(n,:

)=d(n,:

)-1/2*q

elseifxz==2

d(1,:

)=(6/h)*((y(2,:

)-y(1,:

))/h-p);

d(n,:

)=(6/h)*(q-(y(n,:

)-y(n-1,:

))/h);

A(1,1)=2;A(1,2)=1;A(n,n)=2;A(n,n-1)=1;

forj=2:

n-1

d(j,:

)=(3/h)*((y(j+1,:

)-y(j,:

))/h-(y(j,:

)-y(j-1,:

))/h);

A(j,j)=2;A(j,j-1)=0.5;A(j,j+1)=0.5;

end

end

%调用函数zglu用追赶法计算AM=d

M=zglu(A,d);

%各插值区间内函数表达式,系数矩阵为n*4阶矩阵C

fork=2:

n

C(k-1,1)=(M(k,:

)-M(k-1,:

))/(6*h);

C(k-1,2)=(x(k,:

)*M(k-1,:

)-x(k-1,:

)*M(k,:

))/(2*h);

C(k-1,3)=1/(2*h)*(x(k-1,:

)^2*M(k,:

)-x(k,:

)^2*M(k-1,:

))+1/h*(y(k,:

)-1/6*h^2*M(k,:

)-y(k-1,:

)-1/6*h^2*M(k-1,:

));

C(k-1,4)=1/(6*h)*(x(k,:

)^3*M(k-1,:

)-x(k-1,:

)^3*M(k,:

))+1/h*(x(k,:

)*(y(k-1,:

)-h^2/6*M(k-1,:

))-x(k-1,:

)*(y(k,:

)-h^2/6*M(k,:

)));

end

%显示输入数据

disp('您输入的数据如下:

')

disp('插值节点x:

')

x(:

:

disp('插值节点y:

')

y(:

:

disp('计算得到矩阵M:

')

M(:

:

%输出插值函数S(x)的表达式

disp('S(x)的表达式为:

')

forl=1:

n-1

disp([num2str(C(l,1)),'x^3+',num2str(C(l,2)),'x^2+',num2str(C(l,3)),'x+',num2str(C(l,4)),'',num2str(x(l,:

)),'≤x≤',num2str(x(l+1,:

))]);

end

 

被调用函数zglu

%追赶法求解三对角方程组

functionx=zglu(A,b)

[~,n]=size(A);

L=eye(n);U=zeros(n);y=zeros(n,1);x=zeros(n,1);

U(1,1)=A(1,1);y(1,1)=b(1,1);

fori=2:

n

l=A(i,i-1)/U(i-1,i-1);

L(i,i-1)=l;

U(i,i)=A(i,i)-l*A(i-1,i);

y(i,1)=b(i,1)-l*y(i-1,1);

U(i-1,i)=A(i-1,i);

end

x(n,1)=y(n,1)/U(n,n);

fori=n-1:

-1:

1

s=y(i,1);

forj=i+1:

n

s=s-U(i,j)*x(j,1);

end

x(i,1)=s/U(i,i);

end

end

5.四阶龙格-库塔法求解常微分方程的初值问题

计算原理

程序框图

输入待求微分方程、求解的自变量范围、初值以及求解范围内的步长等。

确定求解范围内的取点数n

k=n?

求解:

求解并输出:

结束算法

计算实习

用标准4级4阶R-K法求解

取步长h=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1