数值代数qr方法实验报告

数值代数qr方法实验报告
数值代数qr方法实验报告

一、引言

很多情况下在工程中抽象出来的数学方程组是超定的,没有精确解,这样就需要找一个在某种意义下最接近精确解的解。设A 是m*n 的实矩阵,2

2

A (A )T x b

Q x b -=-,这样

2min A y b -就等价与2min (A )T Q x b -,为方便求解,需要A T Q 是上三角矩阵,这样

引入QR 分解就比较求解方便。

二、豪斯霍尔德变换

豪斯霍尔德变换(Householder transformation )又称初等反射(Elementary reflection ),最初由A.C Aitken 在1932年提出,Alston Scott Householder 在1958年指出了这一变换在数值线性代数上的意义。这一变换将一个向量变换为由一个超平面反射的镜像,是一种线性变换。其变换矩阵被称作豪斯霍尔德矩阵,在一般内积空间中的类比被称作豪斯霍尔德算子,超平面的法向量被称作豪斯霍尔德向量。

三、理论依据

householder 变换:任意的一个向量x ,经过一个正交变换2**T H I W W =- 后总可以变为一个与之范数相等的另一个向量Hx 。

如上图中所示,记v Hx x =-,2/w v v =,2**T

H I W W =-上述H 既为所要求

的householder 变换。

具体操作时将需要变化的矩阵的每一列当做一个向量,第一列变为除了第一个元素都为0的向量…第i 列变为除了前i 个元素都为0的向量...为了保证在每次变化时不改变已经变好的0元素,第i 次只变化每列第i 个元素到第n 个元素,每个变化矩阵的形式是[I 0;0 H]。

算法如下:qr_Houserhoilder.m function [Q,R]=qr_Houserhoilder(A) [m,n]=size(A); Q=eye(n); for i=1:n

u=house(A(i:m,i));

P=eye(m-i+1)-2/(norm(u)^2)*u*u'; A(i:m,i:n)=P*A(i:m,i:n);

PP=blkdiag(eye(i-1),P);

Q=Q*PP;

end

R=triu(A);

程序house.m

function u=house(Ai)

Ai(1)=Ai(1)+sign(Ai(1))*norm(Ai);

u=Ai/norm(Ai);

四、数值实验结果:

为了保证在一定阶数下,所做的数值试验具有代表性,我们随机产生3个n阶矩阵,随着n的不断变化,得到如下一系列图:

(1)A=rand(4,4)

A =

0.3027 0.7894 0.1793 0.3922

0.2364 0.7134 0.4350 0.3936

0.4690 0.0742 0.9747 0.1115

0.5381 0.6768 0.7245 0.8650

[Q,R]=qr_Houserhoilder(A)

Q =

-0.3735 -0.5369 0.4602 0.6003

-0.2916 -0.5439 -0.7840 -0.0668

-0.5786 0.6445 -0.2679 0.4219

-0.6639 -0.0208 0.3190 -0.6761

R =

-0.8106 -0.9951 -1.2387 -0.9001

0 -0.7781 0.2803 -0.3707

0 0 -0.2886 0.1180

0 0 0 -0.3286

test_qr3

err =

1.0e-10 *

0.1950 0.0120 0.0119 0.3029

-11

1 1.5

2 2.5

3 3.54

(2)A=rand(5,5)

A =

0.7575 0.7005 0.6420 0.8233 0.8877

0.6373 0.4698 0.5815 0.5290 0.3770

0.6643 0.3036 0.9458 0.7210 0.1295

0.1056 0.0254 0.3903 0.1048 0.3027

0.2813 0.3787 0.5302 0.0627 0.1156

[Q,R]=qr_Houserhoilder(A)

Q =

-0.6161 0.4378 0.2968 -0.5805 -0.0598

-0.5183 -0.0381 0.2932 0.7098 -0.3743

-0.5403 -0.6729 -0.2440 -0.1030 0.4303

-0.0859 -0.1847 -0.5513 -0.2507 -0.7693

-0.2288 0.5657 -0.6801 0.2928 0.2817

R =

-1.2295 -0.9280 -1.3629 -1.1944 -0.8648

0 0.2940 -0.1496 -0.1288 0.2966

0 0 -0.4455 0.1231 0.0969

0 0 0 -0.1847 -0.3031

0 0 0 0 -0.3388

test_qr3

err =

1.0e-10 *

0.1722 0.0119 0.0120 0.4239

-11

1 1.5

2 2.5

3 3.54

(3)A=rand(6,6)

A =

0.5961 0.8422 0.4279 0.3473 0.2731 0.3486

0.1335 0.2860 0.2157 0.6181 0.6306 0.1930

0.4479 0.0467 0.3284 0.4588 0.4228 0.9548

0.9430 0.7296 0.7951 0.0920 0.0322 0.3114

0.7581 0.7811 0.4338 0.1512 0.6185 0.1271

0.8647 0.1359 0.1735 0.9036 0.4393 0.8964 [Q,R]=qr_Houserhoilder(A)

Q =

-0.3571 -0.5571 0.2402 0.2038 0.4576 0.5035

-0.0800 -0.2530 -0.1880 0.8253 -0.1645 -0.4314

-0.2684 0.3532 -0.4622 0.2419 -0.3487 0.6399

-0.5650 -0.0874 -0.6012 -0.3372 0.2898 -0.3376

-0.4542 -0.3266 0.3151 -0.2560 -0.7185 -0.0773

-0.5181 0.6217 0.4823 0.1991 0.2045 -0.1760

R =

-1.6690 -1.1737 -0.9944 -0.8854 -0.7882 -1.0943

0 -0.7594 -0.2803 0.3166 -0.0940 0.5829

0 0 -0.3472 0.1832 0.1390 -0.1088

0 0 0 0.8020 0.5966 0.5022

0 0 0 0 -0.4714 -0.0229

0 0 0 0 0 0.4305

test_qr3

err =

1.0e-10 *

0.1518 0.0119 0.0120 0.2845

-11

1 1.5

2 2.5

3 3.54

五、总结与分析

由上面的数值试验结果和绘图可知:

比较之下,我自己写的houserhoilder程序误差是最大的,CGS与MGS的误差相差不大,系统自带的matlab软件速度是最快的,我自己写的houserhoilder程序还是最慢的。

六、附录:

1.程序qr_Houserhoilder.m

function[Q,R]=qr_Houserhoilder(A)

[m,n]=size(A);

Q=eye(n);

for i=1:n

u=house(A(i:m,i));

P=eye(m-i+1)-2/(norm(u)^2)*u*u';

A(i:m,i:n)=P*A(i:m,i:n);

PP=blkdiag(eye(i-1),P);

Q=Q*PP;

end

R=triu(A);

2.程序house.m

function u=house(Ai)

Ai(1)=Ai(1)+sign(Ai(1))*norm(Ai);

u=Ai/norm(Ai);

3.程序qr_CGS.m

function [Q,R]=qr_CGS(A)

[m,n]=size(A);

for i=1:n

Q(:,i)=A(:,i);

for j=1:i-1

R(j,i)=Q(:,j)'*A(:,i);

Q(:,i)=Q(:,i)-R(j,i)*Q(:,j);

end

R(i,i)=norm(Q(:,i));

if R(i,i)==0

quit

end

Q(:,i)=Q(:,i)/R(i,i);

end

4.程序qr_MGS.m

function [Q,R]=qr_MGS(A)

[m,n]=size(A);

for i=1:n

Q(:,i)=A(:,i);

for j=1:i-1

R(j,i)=Q(:,j)'*Q(:,i);

Q(:,i)=Q(:,i)-R(j,i)*Q(:,j);

end

R(i,i)=norm(Q(:,i));

if R(i,i)==0

quit

end

Q(:,i)=Q(:,i)/R(i,i);

end

5.程序test_qr.m

n = 100; nM = 10; I = eye(n); N = 1:nM;

t_mat = 0; err_mat = 0;

t_CGS = 0; err_CGS = 0; t_MGS = 0; err_MGS = 0; t_House = 0; err_House = 0;

n = 400; nM = 10;

for i = 1:nM

A = rand(n,n);

tic;

[Q,R] = qr(A);

t_mat = t_mat + toc;

err_mat = err_mat + norm(A-Q*R,inf);

tic

[Q,R] =qr_CGS(A);

t_CGS = t_CGS + toc;

err_CGS = err_CGS + norm(A-Q*R,inf);

tic

[Q,R] =qr_MGS(A);

t_MGS = t_MGS + toc;

err_MGS = err_MGS + norm(A-Q*R,inf);

tic

[Q,R] = qr_Houserhoilder(A);

t_House = t_House + toc;

err_House = err_House + norm(A-Q*R,inf);

tic

end

t = [t_mat t_CGS t_MGS t_House ];

err = [err_mat err_CGS err_MGS err_House]

plot(t,'o-');

figure(2),plot(err,'*-')

《计算方法》课内实验报告

《计算方法》实验报告 姓名: 班级: 学号: 实验日期: 2011年10月26日

一、实验题目: 数值积分 二、实验目的: 1.熟悉matlab 编写及运行数值计算程序的方法。 2.进一步理解数值积分的基础理论。 3.进一步掌握应用不同的数值积分方法求解给定的积分并给出数据结果及误差分析。 三、实验内容: 1.分别用复合梯形求积公式及复合辛普森求积公式计算积分xdx x ln 10 ? , 要求计算精度达到410-,给出计算结果并比较两种方法的计算节点数. 2.用龙贝格求积方法计算积分dx x x ?+3 021,使误差不超过510-. 3.用3=n 的高斯-勒让德公式计算积分?3 1 sin x e x ,给出计算结果. 4.用辛普森公式(取2==M N ) 计算二重积分.5 .00 5 .00 dydx e x y ? ? - 四、实验结果: 1.(1)复合梯形法: 将区间[a,b]划分为n 等份,分点n k n a b h kh a x k ,2,1,0,,=-=+=在每个区间[1,+k k x x ](k=0,1,2,···n-1)上采用梯形公式,则得 )()]()([2)()(1 11 1 f R x f x f h dx x f dx x f I n n k k k b a n k x x k k ++===∑?∑? -=+-=+ 故)]()(2)([21 1 b f x f a f h T n k k n ++=∑-=称为复合梯形公式 计算步长和划分的区间 Eps=1E-4 h1=sqrt(Eps/abs(-(1-0)/12*1/(2+1))) h1 =0.0600 N1=ceil(1/h1) N1 =17 用复合梯形需要计算17个结点。 复合梯形: function T=trap(f,a,b,n) h=(b-a)/n;

数值代数实验报告

1.谈谈你对该算法的理解:(简单谈一下你是如何理解该算法的?) 先对84阶矩阵进行LU分解,通过Gauss消元法 对下三角形方程组利用前代法解出y,在对上三角方程组 用回代法解出x…. 2.实验内容 function [ L,U ] = LUfac( A ) for k=1:n-1 A(k+1:n,k)=A(k+1:n,k)/A(k,k); A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-A(k+1:n,k)*A(k,k+1:n); end L=tril(A,0); for i=1:n L(i,i)=1; end U=triu(A,0); End //进行LU分解 function [ b ] = TSL( L,b ) n=size(L,1); for j=1:n-1 b(j)=b(j)/L(j,j); b(j+1:n)=b(j+1:n)-b(j)*L(j+1:n,j); end b(n)=b(n)/L(n,n); end //利用前代法解出y function [ b ] = TSU( U,b ) n=size(U,1); for j=n:-1:2 b(j)=b(j)/U(j,j); b(1:j-1)=b(1:j-1)-b(j)*U(1:j-1,j); end b(1)=b(1)/U(1,1); end //利用回代法解出x

主函数程序 A=eye(84); A=6*A; for i=2:84 A(i,i-1)=8; A(i-1,i)=1; End //生成84阶的矩阵A b=ones(84,1); b=b*15; b(1)=7; b(84)=14; [L,U]=LUfac(A);//调用函数LUfac对矩阵A进行分解 y=TSL(L,b);//调用函数TSL求解y x=TSU(U,y); //调用函数TSU求解X 经过matlab…有 x’ ans = 1.0e+008 * Columns 1 through 7 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 8 through 14 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 15 through 21 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 22 through 28 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 29 through 35 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 36 through 42 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 43 through 49 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 Columns 50 through 56 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 Columns 57 through 63

DES算法实验报告

DES算法实验报告 姓名:学号:班级: 一、实验环境 1.硬件配置:处理器(英特尔Pentium双核E5400 @ 2.70GHZ 内存:2G) 2.使用软件: ⑴操作系统:Windows XP 专业版32位SP3(DirectX 9.0C) ⑵软件工具:Microsoft Visual C++ 6.0 二、实验涉及的相关概念或基本原理 1、加密原理 DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。 三、实验内容 1、关键代码 ⑴子密钥产生

⑵F函数以及加密16轮迭代 2、DES加密算法的描述及流程图 ⑴子密钥产生 在DES算法中,每一轮迭代都要使用一个子密钥,子密钥是从用户输入的初始密钥产生的。K是长度为64位的比特串,其中56位是密钥,8位是奇偶校验位,分布在8,16,24,32,40,48,56,64比特位上,可在8位中检查单个错误。在密钥编排计算中只用56位,不包括这8位。子密钥生成大致分为:置换选择1(PC-1)、循环左移、置换选择2(PC-2)等变换,分别产生16个子密钥。 DES解密算法与加密算法是相同的,只是子密钥的使用次序相反。 ⑵DES加密算法 DES密码算法采用Feistel密码的S-P网络结构,其特点是:加密和解密使用同一算法、

数值分析实验报告176453

实验报告 插值法 数学实验室 数值逼近 算法设计 级 ____________________________ 号 ____________________________ 名 _____________________________ 实验项目名称 实验室 所属课程名称 实验类型 实验日期

实验概述: 【实验目的及要求】 本次实验的目的是熟练《数值分析》第二章“插值法”的相关内容,掌握三种插 多项式插值,三次样条插值,拉格朗日插值,并比较三种插值方法的 优劣。 本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并 去实现。 【实验原理】 《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值, 拉格朗日 插值的相应算法和相关性质。 【实验环境】(使用的软硬件) 软件: MATLAB 2012a 硬件: 电脑型号:联想 Lenovo 昭阳E46A 笔记本电脑 操作系统: Win dows 8专业版 处理器:In tel ( R Core ( TM i3 CPU M 350 @2.27GHz 2.27GHz 实验内容: 【实验方案设计】 第一步,将书上关于三种插值方法的内容转化成程序语言,用 MATLA B 现; 第二步,分别用牛顿多项式插值,三次样条插值,拉格朗日插值求解不同的问题。 【实验过程】(实验步骤、记录、数据、分析) 实验的主要步骤是:首先分析问题,根据分析设计 MATLA 程序,利用程序算出 问题答案,分析所得答案结果,再得出最后结论。 实验一: 已知函数在下列各点的值为 试用4次牛顿插值多项式 P 4( x )及三次样条函数 S ( x )(自然边界条件)对数据进行插值。 用图给出{( X i , y i ), X i =0.2+0.08i , i=0 , 1, 11, 10 } , P 4 ( x )及 S ( x )。 值方法:牛顿 在MATLAB 件中

太原理工大学数值计算方法实验报告

本科实验报告 课程名称:计算机数值方法 实验项目:方程求根、线性方程组的直接解 法、线性方程组的迭代解法、代数插值和最 小二乘拟合多项式 实验地点:行勉楼 专业班级: ******** 学号: ********* 学生姓名: ******** 指导教师:李誌,崔冬华 2016年 4 月 8 日

y = x*x*x + 4 * x*x - 10; return y; } float Calculate(float a,float b) { c = (a + b) / 2; n++; if (GetY(c) == 0 || ((b - a) / 2) < 0.000005) { cout << c <<"为方程的解"<< endl; return 0; } if (GetY(a)*GetY(c) < 0) { return Calculate(a,c); } if (GetY(c)*GetY(b)< 0) { return Calculate(c,b); } } }; int main() { cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl; float a, b; Text text; text.Getab(); a = text.a; b = text.b; text.Calculate(a, b); return 0; } 2.割线法: // 方程求根(割线法).cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" #include"iostream"

心得体会 使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。

数值代数上机实验报告

数值代数课程设计实验报告 姓名: 班级: 学号: 实验日期: 一、实验名称 代数的数值解法 二、实验环境 MATLAB7.0 实验一、平方根法与改进平方根法 一、实验要求: 用熟悉的计算机语言将不选主元和列主元Gasuss 消元法编写成通用的子程序,然后用编写的程序求解下列方程组 ?????????? ????????????=????????????????????????? ? ? ? ? ? ? ?? ?????? ???? ?--?1415151515768 168 168 168 1681612321 n n n n n x x x x x x 用所编的程序分别求解40、84、120阶方程组的解。 二、算法描述及实验步骤 GAuss 程序如下: (1)求A 的三角分解:LU A =; (2)求解b y =L 得y ; (3)求解y x =U 得x ; 列主元Gasuss 消元法程序如下: 1求A 的列主元分解:LU PA =; 2求解b y P L =得y ; 3求解y x =U 得x ;

三、调试过程及实验结果: %----------------方程系数---------------- >> A1=Sanduijiaozhen(8,6,1,40); >> A2=Sanduijiaozhen(8,6,1,84); >> A3=Sanduijiaozhen(8,6,1,120); >> b1(1)=7;b2(1)=7;b3(1)=7; >> for i=2:39 b1(i)=15; end >> b1(40)=14; >> for i=2:83 b2(i)=15; end >> b2(40)=14; >> for i=2:119 b1(i)=15; end >> b3(120)=14; %----------------方程解---------------- >> x11=GAuss(A1,b1') >> x12=GAuss Zhu(A1,b1') >> x21=GAuss(A2,b2') >> x22=GAuss Zhu(A3,b3') >> x31=GAuss(A3,b3') >> x32=GAuss Zhu(A3,b3') 运行结果:(n=40) GAuss消元法的解即为 x11 = 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 列主元GAuss消元法的解即为x12 =

算法实验报告

华北电力大学 实验报告| | 实验名称算法设计与分析综合实验 课程名称算法设计与分析 | | 专业班级软件12 学生姓名: 学号:成绩: 指导教师:胡朝举实验日期:

实验一分治策略—归并排序 一、实验要求 (1)编写一个模板函数:template ,MergeSort(T *a, int n); 以及相应的一系列函数,采用分治策略,对任意具有:bool operator<(const T&x,const T&y);比较运算符的类型进行排序。 (2)与STL库中的函数std::sort(..)进行运行时间上的比较,给出比较结果,如:动态生成100万个随机生成的附点数序列的排序列问题, 给出所用的时间比较。 二、实验代码 #include <> #include <> #include <> #include <> #define MAX 50 typedef struct { int arr[MAX+1]; int length; }SortArr; SortArr *CreateSortArr() { int i = 0; char buf[4*MAX] = ""; char *ptr = NULL; SortArr *sortArr = (SortArr *)malloc(sizeof(SortArr)); memset(sortArr, 0, sizeof(SortArr)); printf("请输入待排序数据,以逗号分隔,以分号结束\n" "input:"); scanf("%s", buf); ptr = buf; sortArr->arr[i] = 0; i = 1; while(*ptr != ';') { sortArr->arr[i] = atoi(ptr); i++; ptr = strstr(ptr, ","); if(!ptr) { break; } ptr++; } sortArr->length = (i - 1); return sortArr; } int merge(int arr[], int p, int q, int r) { int i = 0; int j = 0; int k = 0; int n1 = 0; int n2 = 0; int *leftArr = NULL; int *rightArr = NULL; n1 = q - p + 1; n2 = r - q;

实验报告格式范文

实验报告格式范文 实验一撰写可行性研究报告 一、实验目的 1、掌握可行性研究步骤; 2、学习编制可行性研究报告。 二、实验要求 硬件:Intel Pentium 120 或以上级别的CPU,大于16MB的内存。 软件:Win dows 95/98/2000 操作系统,Office 97/2000 软件 学时:2学时 写岀此项实验报告 三、实验内容 1、可行性研究(结构化分析)方法; 2、绘制数据流图,使用Word写实验报告。 四、实验步骤 1 ?引言 1.1 编写目的 可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解。 经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。本报告经审核后,交软件经理审查。 1 . 2 项目背景 (1 )待开发的软件产品名称:旅行社机票预定系统。 (2)本项目的提岀者:冯剑。开发者:李翀。用户:旅行社 (3)本软件产品将用于旅行社的机票预定和费用的记录。

1 . 3术语说明 DFD (数据流图):一种描述书记变换的图形工具,是结构化分析方法最普遍采用的表示手段,但数据流图并不是结构化分析模型的全部,数据字典和小说明为数据流图提供了补充,并用以验证图形表示的正确性、一致性和完整性,三者共同构成了被建系统的模型。 1 . 4.系统参考文献 参考文献见附录 2?可行性研究的前提 2.1基本要求 ⑴功能 本软件实现的功能有:为游客提供机票预定服务,提高旅游局的服务质量和服务效率。 对航班数据库的查询和修改,对机票费用记帐数据库的查询和修改,记录旅客信息(姓名、性别、年龄、身份证号、单位、旅行时间、目的地)、航班时间和班次,打印机票和帐单。 (2) 性能 时间:提供的信息必须及时的反映在工作平台上。售票系统的定单必须无差错的存 储在机场的主服务器上。对服务器上的数据必须进行及时正确的刷新。一笔业务在一分钟内完成。空间:运行空间 2M。 (3) 系统的输入和输岀 输入:旅行社定票单。数据完整,详实。 输岀:机票、帐单。简捷,快速,实时。 (4) 处理流程 旅行社将定票信息输入定票系统,系统输岀机票和帐单给旅客。 5 )安全保密要求

c 计算器实验报告

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 6.0中建立一个MFC工程文件,名为 calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单 选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在calculatorDlg.h中添加math.h头文件,然后添加public成 员。 7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始 化和完善各控件的响应函数代码。 (3)程序清单:

●添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法2.减法3. 乘法 4.除法 int append; //判断后面是否添加数字 ●成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0; result=0; sort=0; append=0; }

数学实验1

中国海洋大学本科生课程大纲 课程属性:公共基础/通识教育/学科基础/专业知识/工作技能,课程性质:必修、选修 一、课程介绍 1.课程描述: 数学实验是由于计算机技术和科学计算软件的迅猛发展应运而生的一门较新的数学课程,它改变了数学只靠纸和笔的传统形象,将实验的手段引入到数学的学习和研究中。 本课程为大学二年级数学院的学生开设。它不是讲授新的数学知识,而是让学生利用已有的数学知识去解决一些经简化的实际问题。大多数实验的一般过程是:对于给出的实际问题,建立数学模型、选择适当的数学方法、用科学计算软件MATLAB编程计算、对运算结果进行分析、给出结论。 本课程以MATLAB软件为主要的实验工具,采用以学生动手动脑为主,教师讲授和点评、小组讨论、报告为辅的教学方式。 通过本课程的学习,学生用数学解决实际问题的意识和能力可以得到强化和提高,更切实地体会到数学的用处,增加学习兴趣,提高创造力。 2.设计思路: 本课程旨在训练用数学解决实际问题的能力。实验内容的选取是基于学生具备MATLAB语言的初步编程能力、并学习了数学分析、高等代数、解析几何、运筹学基础(初步)、数学实验基础、常微分方程、数值分析或计算方法、概率论等数学课程的基础之上。课程共分七个基础实验和一个综合实验依次进行。七个基础实验是:MATLAB 基础知识复习、常微分方程(组)、数据建模——插值与拟合、古典密码学、图与网络 - 6 -

优化、动态规划、遗传算法。 基础实验涉及的数学内容较为单一、数学模型和求解方法较简单,是对“用数学”能力的基本训练。 综合实验以三人为一组进行,所涉及到的数学知识范围更广,建模和求解的难度更大。综合实验的题目可以小组自拟或在任课教师拟定的题目中选择。任课教师拟定的题目将于综合实验开始前一周给出。各小组在实验前要上交一份“开题报告”:写出问题的重述、模型建立和求解的思路、可能遇到的主要困难及解决方案。通过认真完成综合实验,“用数学”的能力可以有一个较大的提升。 3.课程与其他课程的关系: 先修课程:高等代数I、高等代数II、空间解析几何、数学分析I、数学分析II、数学实验基础;常微分方程;计算方法(或数值分析、数值代数); 并行课程:概率论等; 后置课程:数学模型;数学建模实践 二、课程目标 本课程的目标是为大二数学类专业学生提供用数学知识解决实际问题的系统训练。 到课程结束时,学生应能: (1)对简单的实际问题建立数学模型; (2)采用适当的数学方法,用MA TLAB软件求解模型,并根据计算结果对模型进行评价和改进; (3)具备初步的科研写作能力:学会如何将问题、模型、解决思路、求解方法、计算结果和结论简洁、清晰、严谨地呈现; (4)针对难度较高的实际问题通过小组成员的独立思考、相互合作与激励,共同解决。提高沟通交流能力,促进相互学习,加深对有关数学知识的理解,进一步提升用数学知识和MATLAB软件解决实际问题的能力。 三、学习要求 要完成所有的课程任务,学生必须: (1)按时上课,认真听讲,积极参与课堂讨论、随堂练习和测试; - 6 -

遗传算法实验报告(仅供参照)

人工智能实验报告

遗传算法实验报告 一、问题描述 对遗传算法的选择操作,设种群规模为4,个体用二进制编码,适应度函数,x的取值区间为[0,30]。 若遗传操作规定如下: (1)选择概率为100%,选择算法为轮盘赌算法; (2)交叉概率为1,交叉算法为单点交叉,交叉顺序按个体在种群中的顺序; (3)变异几率为0 请编写程序,求取函数在区间[0,30]的最大值。 二、方法原理 遗传算法:遗传算法是借鉴生物界自然选择和群体进化机制形成的一种全局寻优算法。与传统的优化算法相比,遗传算法具有如下优点:不是从单个点,而是从多个点构成的群体开始搜索;在搜索最优解过程中,只需要由目标函数值转换得来的适应值信息,而不需要导数等其它辅助信息;搜索过程不易陷入局部最优点。目前,该算法已渗透到许多领域,并成为解决各领域复杂问题的有力工具。在遗传算法中,将问题空间中的决策变量通过一定编码方法表示成遗传空间的一个个体,它是一个基因型串结构数据;同时,将目标函数值转换成适应值,它用来评价个体的优劣,并作为遗传操作的依据。遗传操作包括三个算子:选择、交叉和变异。选择用来实施适者生存的原则,即把当前群体中的个体按与适应值成比例的概率复制到新的群体中,构成交配池(当前代与下一代之间的中间群体)。选择算子的作用效果是提高了群体的平均适应值。由于选择算子没有产生新个体,所以群体中最好个体的适应值不会因选择操作而有所改进。交叉算子可以产生新的个体,它首先使从交配池中的个体随机配对,然后将两两配对的个体按某种方式相互交换部分基因。变异是对个体的某一个或某一些基因值按某一较小概率进行改变。从产生新个体的能力方面来说,交叉算子是产生新个体的主要方法,它决定了遗传算法的全局搜索能力;而变异算子只是产生新个体的辅助方法,但也必不可少,因为它决定了遗传算法的局部搜索能力。交叉和变异相配合,共同完成对搜索空间的全局和局部搜索。 三、实现过程 (1)编码:使用二进制编码,随机产生一个初始种群。L 表示编码长度,通常由对问题的求解精度决定,编码长度L 越长,可期望的最优解的精度也就越高,过大的L 会增大运算量。 (2)生成初始群体:种群规模表示每一代种群中所含个体数目。随机产生N个初始串结构数据,每个串结构数据成为一个个体,N个个体组成一个初始群体,N表示种群规模的大小。当N取值较小时,可提高遗传算法的运算速度,但却降低种群的多样性,容易引起遗传算法早熟,出现假收敛;而N当取值较大时,又会使得遗传算法效率降低。一般建议的取值范围是20—100。遗传算法以该群体作为初始迭代点; (3)适应度检测:根据实际标准计算个体的适应度,评判个体的优劣,即该个体所代表的可行解的优劣。本例中适应度即为所求的目标函数; (4)选择:从当前群体中选择优良(适应度高的)个体,使它们有机会被选中进入下一次迭代过程,舍弃适应度低的个体。本例中采用轮盘赌的选择方法,即个体被选择的几率与其适应度值大小成正比; (5)交叉:遗传操作,根据设置的交叉概率对交配池中个体进行基因交叉操作,形成新一代的种群,新一代中间个体的信息来自父辈个体,体现了信息交换的原则。交叉概率控制

数值计算实验报告

(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 姓名:宋元台 学号: 成绩:

数值计算方法与算法实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日课程名称: 数值计算方法与算法专业:信息与计算科学班级 12级5班 实验编号: 1实验项目Neton插值多项式指导教师:孙峪怀 姓名:宋元台学号:实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)

1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #includeMAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i);

计算方法实验报告格式

计算方法实验报告格式 小组名称: 组长姓名(班号): 小组成员姓名(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下: 一、实验名称 实验者可根据报告形式需要适当写出. 二、实验目的及要求 首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出. 三、算法描述(实验原理与基础理论) 数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出. 四、实验内容 实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备. 五、程序流程图 画出程序实现过程的流程图,以便更好的对程序执行的过程有清楚的认识,在程序调试过程中更容易发现问题. 六、实验结果 实验结果应包括实验的原始数据、中间结果及实验的最终结果,复杂的结果可以用表格

形式列出,较为简单的结果可以与实验结果分析合并出现. 七、实验结果分析 实验结果分析包括对对算法的理解与分析、改进与建议. 数值实验报告范例 为了更好地做好数值实验并写出规范的数值实验报告,下面给出一简单范例供读者参考. 数值实验报告 小组名称: 小组成员(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一、实验名称 误差传播与算法稳定性. 二、实验目的 1.理解数值计算稳定性的概念. 2.了解数值计算方法的必要性. 3.体会数值计算的收敛性与收敛速度. 三、实验内容 计算dx x x I n n ? += 1 10 ,1,2,,10n = . 四、算法描述 由 dx x x I n n ? += 1 10 ,知 dx x x I n n ?+=--101110,则

偏微分方程数值解课程的思索

科技信息 SCIENCE &TECHNOLOGY INFORMATION 2012年第9期偏微分方程(PDE )是众多描述物理,化学和生物现象的数学模型的基础,其最新应用已经扩展到经济,金融预测,图像处理等很多领域。要通过PDE 模型研究这些问题,就需要求解PDE 方程,但是绝大多数微分方程特别是偏微分方程,很难得到其解析形式的解。我们希望能够借助于计算机采用数值方法求得偏微分方程的近似解,这就是《偏微分方程数值解》课程的主要内容。 《偏微分方程数值解》是信息与计算科学专业的一门专业课,它与《数值代数》,《数值逼近》一起构成信息与计算科学专业信息与计算方向的核心课程,在专业培养中占有非常重要的地位。随着计算机技术的飞速发展,偏微分方程数值解得到了前所未有的发展和应用,与此同时也暴露了《偏微分方程数值解》课程传统教学中的很多不足之处,这使得该门课程在教学上有很多地方需要调整。 笔者长年教授《偏微分方程数值解》课程,在该门课程的教学改革方面做了一些思索和尝试,主要包括改革教学方法,更新教学模式,加强介绍背景知识,融入数学建模思想,教学与科研相结合,教学与计算软件相结合,增设实验课,改革考核方式等。 1改革教学方法,更新教学模式 由于数学课程大多理论性较强,趣味性较弱,为了激发学生学习兴趣,在教学过程中,我们采用启发式、讨论式等多种教学方法,营造良好的课堂气氛,加强师生之间的交流,引导学生独立思考,强化科学思维的训练。在教学内容方面,不光教授公式推导,定理证明,同时注重算法思想的讲解和程序设计的讲解,同时安排一定课时的习题课,讲解典型习题和对每章进行总结。 由于《偏微分方程数值解》涉及较多的概念、公式和定理,大多数老师仍以传统的课堂教学为主,而少数年轻教师则喜欢用多媒体课件教学。传统的教学方法,虽然受到的批评最多,但也是用得最多,最能让大家普遍接受的一种方法,在算法推导、理论分析等方面,采用传统的板书讲解能更好地引导学生去感受和思考数学逻辑的过程以及创造性的思维过程,加深对数学理论的理解和认识,培养学生的逻辑和思维能力。而在讲述背景知识,算法的应用,算法的程序实现时候最好用多媒体课件进行演示。多媒体课件可以让学生更直观,更全面的理解算法的应用,另外使用多媒体课件还可以节省大段公式的板书时间,图示清楚、准确。但是如果全部使用多媒体课件上课,容易加快教学速度,淡化数学公式的推导以及定理的证明过程,不利于培养学生的数学思维能力。所以,我们认为需要将传统的教学方法和现代的教学手段结合起来,充分发挥各自的优势,在传统教学中穿插多媒体课件,根据教学内容选择合适的教学手段。 2加强知识背景的介绍,融入数学建模思想 《偏微分方程数值解》是理论知识与实际应用之间的桥梁,为学生使用计算机解决科学与工程中的实际问题打下良好的理论基础和应用基础。传统教学以分析,证明,推导为主,重理论,轻应用,缺少偏微分方程产生的实际背景的介绍和应用数值解的方法解决实际问题的实例。因此,我们在教授该课程的时候,注重与数学建模思想相结合,从实际问题出发,建立相应的偏微分方程模型,这样,学生就知道为什么要研究偏微分方程,偏微分方程能解决什么样的实际问题。 例如,我们考虑有衰减的扩散问题:有一个扩散源,某物质从此扩散源向四周扩散,沿x,y,z 三个方向的扩散系数分别为常数,衰减使质量的减少与浓度成正比,扩散前周围空间此物质的浓度为0,估计物质的分布。我们引导学生运用所学过的微积分的思想以及相应的物理知识,对这一问题进行建模,可以得到如下的模型: 鄣u =a 2鄣2 u 鄣x +b 2鄣2 u 鄣y +c 2鄣2 u 鄣z -k 2u 上述方程是常系数线性抛物型方程,它就是有衰减的扩散过程的数学模型。有了这样的铺垫,学生知道了扩散问题的数学模型就是抛物型方程,当然类似的环境污染,疾病流行等与扩散有关的实际问题可以用抛物型方程来描述,很自然的,接下来的问题就是如何求解上面的抛物型方程,学生的学习热情自然就提高了。 3教学与科研相结合 随着计算技术和计算机科学的发展,偏微分方程数值解法的内涵也在不断扩大,我们在讲授《偏微分方程数值解》课程中引进近年来最新的理论和最新的方法,这样可以开阔学生的视野,激发学生的学习情趣,锻炼学生的自学能力。例如我们除了介绍有限差分法,有限元法,有限体积法等经典的具有一般性的方法,还介绍了多重网格法。由于近些年来,人们将辛方法应用于哈密顿常微分方程系统以及推广应用于微分方程的兴趣日益增长,我们也简单介绍了这一主题,并且用这个思想去分析逼近波动方程的交错蛙跳格式。在讲授方法的同时,还注意介绍这些方法的发展历史,设计思想和理论依据,并给出了相当丰富的参考文献,让基础好的同学自己去挖掘感兴趣的问题。承担课题的老师,可以把自己课题中与此课程相关的小问题拿出来供有兴趣的同学琢磨,有助于锻炼学生的科研能力。 4教学与计算软件相结合 由Mathworks 公司推出的MATLAB 软件,现在已经发展成功能强大,适合科学和工程计算的软件,使用MATLAB 编程,语言简洁,数据处理方便,具有强大的数值计算功能和图形展示功能,因此,将MATLAB 融入偏微分方程数值解的教学,更能与时俱进,更有效地提高教学质量。 MATLAB 采用有限元的方法求解各种PDE ,它提供了两种方法解决PDE 问题,一是pdepe 函数,它可以求解一般的PDEs ,具有较大的通用性,但只支持命令行形式的调用。二是PDE 工具箱,可以求解特殊PDE 问题,但有较大的局限性。只能求解二阶PDE 问题,不能求解偏微分方程组。PDE 工具箱支持命令行形式求解,但需要记住大量命令及其调用格式。不过好在它提供了GUI 界面,可以把我们从复杂的编程中解脱出来,还有很好的动画演示功能,尤其适合刚入门的学生。 我们在授课过程中精选与生活,生产密切相关的应用实例,鼓励学生自己动手建立模型,应用数学软件和所学的知识求解模型。例如考虑一个带有矩形孔的金属板上的热传导问题。板的左边保持在100℃,板的右边热量从板向环境空气定常流动,其他边及内孔边界保持绝缘。初始t=t 0时板的温度为0。对于这样的一个实际问题,我们先应用所学的数学分析和数学建模知识,对原问题建立如下偏微分方程模型: 鄣u 鄣t -△u =0,u =100, 鄣u =-1,鄣u =0,u|t=t 0 =0△△△△△△△△△△△△△△ △. 不妨设界顶点坐标为(-0.5,-0.8),(0.5,-0.8),(0.5,0.8),(-0.5,0.8)。内边界顶点坐标为(-0.005,-0.4),(0.05,-0.4),(0.05,0.4),(-0.05,0.4)。对于这样的一个抛物型方程,我们设计其数值计算方法,然后分别用 偏微分方程数值解课程的思索 邹永魁 (吉林大学数学与科学学院吉林 长春 130012) 【摘要】探讨《偏微分方程数值解》课程教学改革的思考与体会,主要包括教学方法和教学模式的改革,加强背景知识的介绍,将科研前沿带入课堂,将MATLAB 融入教学以及考核方式的改革等。 【关键词】偏微分方程数值解;教学改革;MATLAB ;综合评价体系○高校讲坛○200

算法实验报告

贵州大学计算机科学与技术学院 计算机科学与技术系上机实验报告 课程名称:算法设计与分析班级:软件101 实验日期:2012-10-23 姓名:学号:指导教师: 实验序号:一实验成绩: 一、实验名称 分治算法实验- 棋盘覆盖问题 二、实验目的及要求 1、熟悉递归算法编写; 2、理解分治算法的特点; 3、掌握分治算法的基本结构。 三、实验环境 Visual C++ 四、实验内容 根据教材上分析的棋盘覆盖问题的求解思路,进行验证性实验; 要求完成棋盘覆盖问题的输入、分治求解、输出。有余力的同学尝试消去递归求解。 五、算法描述及实验步骤 分治算法原理: 分治算法将大的分解成形状结构相同的子问题,并且不断递归地分解,直到子问题规模小到可以直接求解。 棋盘覆盖问题描述: 在一个2k x 2k个方格组成的棋盘中恰有一个方格与其他的不同称为特殊方格,想要求利用四种L型骨牌(每个骨牌可覆盖三个方格)不相互重叠覆盖的将除了特殊方格外的其他方格覆盖。

实验步骤: 1、定义用于输入和输出的数据结构; 2、完成分治算法的编写; 3、测试记录结构; 4、有余力的同学尝试不改变输入输出结构,将递归消除,并说明能否不用栈,直接消除递归,为什么? 六、调试过程及实验结果 详细记录程序在调试过程中出现的问题及解决方法。 记录程序执行的结果。

七、总结 对上机实践结果进行分析,问题回答,上机的心得体会及改进意见。 通过对本实验的学习,对分治算法有了进一步的认识,对棋盘覆盖问题和其他分治问题进行了对比。 八、附录 源程序(核心代码)清单或使用说明书,可另附纸 ① #include #include using namespace std; int board[100][100],tile=1; void chessboard(int tr,int tc,int dr,int dc,int size)//tr 棋盘左上角方格的行号,tc棋盘左上角方格的列号。dr特殊方格所在的行号。dc特殊方格所在的列号。size棋盘的大小2^k. { int s; if(size==1) return ; int t=tile++; s=size/2; //覆盖左上角棋盘 if(dr=tc+s) chessboard(tr,tc+s,dr,dc,s); else { board[tr+s-1][tc+s]=t; chessboard(tr,tc+s,tr+s-1,tc+s,s); } ② //覆盖左下角子棋盘 if(dr>=tr+s&&dc=tr+s&&dc>=tc+s) chessboard(tr+s,tc+s,dr,dc,s); else { board[tr+s][tc+s]=t; chessboard(tr+s,tc+s,tr+s,tc+s,s); } } int main() { int k,tr,tc,size,i,j; cin>>k>>tr>>tc; size=pow(2,k); chessboard(0,0,tr,tc,size); for(i=0;i

数值线性代数二版徐树方高立张平文上机习题第三章实验报告

- 1 - 第三章上机习题 用你所熟悉的的计算机语言编制利用QR 分解求解线性方程组和线性最小二乘问题的 通用子程序,并用你编制的子程序完成下面的计算任务: (1)求解第一章上机习题中的三个线性方程组,并将所得的计算结果与前面的结果相比较,说明各方法的优劣; (2)求一个二次多项式+bt+c y=at 2 ,使得在残向量的2范数下最小的意义下拟合表3.2中的数据; (3)在房产估价的线性模型 111122110x a x a x a x y ++++= 中,1121,,,a a a 分别表示税、浴室数目、占地面积、车库数目、房屋数目、居室数目、房龄、建筑类型、户型及壁炉数目,y 代表房屋价格。现根据表3.3和表3.4给出的28组数据,求出模型中参数的最小二乘结果。 (表3.3和表3.4见课本P99-100) 解 分析: (1)计算一个Householder 变换H : 由于T T vv I ww I H β-=-=2,则计算一个Householder 变换H 等价于计算相应的v 、β。其中)/(2,||||12v v e x x v T =-=β。 在实际计算中, 为避免出现两个相近的数出现的情形,当01>x 时,令2 12221||||) (-x x x x v n +++= ; 为便于储存,将v 规格化为1/v v v =,相应的,β变为)/(221v v v T =β 为防止溢出现象,用∞||||/x x 代替 (2)QR 分解: 利用Householder 变换逐步将n m A n m ≥?,转化为上三角矩阵A H H H n n 11 -=Λ,则有

?? ? ???=0R Q A ,其中n H H H Q 21=,:),:1(n R Λ=。 在实际计算中,从n j :1=,若m j <,依次计算)),:((j m j A x =对应的)1()1()~ (+-?+-k m k m j H 即对应的j v ,j β,将)1:2(+-j m v j 储存到),:1(j m j A +,j β储存到)(j d ,迭代结束 后再次计算Q ,有??? ? ?? ??=-~001 j j j H I H ,n H H H Q 21=(m n =时1-21n H H H Q =) (3)求解线性方程组b Ax =或最小二乘问题的步骤为 i 计算A 的QR 分解; ii 计算b Q c T 11=,其中):1(:,1n Q Q = iii 利用回代法求解上三角方程组1c Rx = (4)对第一章第一个线性方程组,由于R 的结果最后一行为零,故使用前代法时不计最后一行,而用运行结果计算84x 。 运算matlab 程序为 1 计算Householder 变换 [v,belta]=house(x) function [v,belta]=house(x) n=length(x); x=x/norm(x,inf); sigma=x(2:n)'*x(2:n); v=zeros(n,1); v(2:n,1)=x(2:n); if sigma==0 belta=0; else alpha=sqrt(x(1)^2+sigma); if x(1)<=0 v(1)=x(1)-alpha; else v(1)=-sigma/(x(1)+alpha); end belta=2*v(1)^2/(sigma+v(1)^2); v=v/v(1,1); end end

相关文档
最新文档