哈工大数学实验-迭代问题
- 格式:pdf
- 大小:847.94 KB
- 文档页数:6
H a r b i n I n s t i t u t e o f T e c h n o l o g y实验报告课程名称:随机信号分析院系:电信学院班级: 1205201 姓名:学号:指导教师:郑薇实验时间: 2014年 11月哈尔滨工业大学实验一 各种分布随机数的产生一、 实验目的在很多系统仿真的过程中,需要产生不同分布的随机变量。
利用计算机可以很方便地产生不同分布的随机变量,各种分布的随机变量的基础是均匀分布的随机变量。
有了均匀分布的随机变量,就可以用函数变换等方法得到其他分布的随机变量。
二、 实验内容产生均匀分布的随机数、高斯分布的随机数和其它分布的随机数。
三、 实验原理1. 均匀分布随机数的产生原理产生伪随机数的一种实用方法是同余法,它利用同余运算递推产生伪随机数序列。
最简单的方法是加同余法)(m od 1M c y y n n +=+My x n n 11++=为了保证产生的伪随机数能在[0,1]内均匀分布,需要M 为正整数,此外常数c 和初值y0亦为正整数。
加同余法虽然简单,但产生的伪随机数效果不好。
另一种同余法为乘同余法,它需要两次乘法才能产生一个[0,1]上均匀分布的随机数)(m od 1M ay y nn =+M y x n n 11++=式中,a 为正整数。
用加法和乘法完成递推运算的称为混合同余法,即)(m od 1M c ay y n n +=+My x n n 11++=用混合同余法产生的伪随机数具有较好的特性,一些程序库中都有成熟的程序供选择。
常用的计算语言如Basic 、C 和Matlab 都有产生均匀分布随机数的函数可以调用,只是用各种编程语言对应的函数产生的均匀分布随机数的范围不同,有的函数可能还需要提供种子或初始化。
Matlab 提供的函数rand()可以产生一个在[0,1]区间分布的随机数,rand(2,4)则可以产生一个在[0,1]区间分布的随机数矩阵,矩阵为2行4列。
B班大作业要求:1. 使用统一封皮;2. 上交大作业内容包含:一摘要二数学原理三程序设计(必须对输入变量、输出变量进行说明;编程无语言要求,但程序要求通过)四结果分析和讨论五完成题目的体会与收获3。
提交大作业的时间:本学期最后一次课,或考前答疑;过期不计入成绩;4。
提交方式:打印版一份;或手写大作业,但必须使用A4纸。
5。
撰写的程序需打印出来作为附录。
课程设计课程名称:设计题目:学号:姓名:完成时间:题目一:非线性方程求根 一 摘要非线性方程的解析解通常很难给出,因此非线性方程的数值解就尤为重要.本实验通过使用常用的求解方法二分法和Newton 法及改进的Newton 法处理几个题目,分析并总结不同方法处理问题的优缺点。
观察迭代次数,收敛速度及初值选取对迭代的影响。
用Newton 法计算下列方程(1) 310x x --= , 初值分别为01x =,00.45x =,00.65x =; (2) 32943892940x x x +-+= 其三个根分别为1,3,98-。
当选择初值02x =时给出结果并分析现象,当6510ε-=⨯,迭代停止。
二 数学原理对于方程f (x)=0,如果f (x )是线性函数,则它的求根是很容易的.牛顿迭代法实质上是一种线性化方法,其基本思想是将非线性方程f(x)=0逐步归结为某种线性方程来求解.设已知方程f (x)=0有近似根x k (假定k f'(x )0≠) ,将函数f (x)在点x k 进行泰勒展开,有k k k f(x)f(x )+f'(x )(x-x )+≈⋅⋅⋅于是方程f (x)=0可近似的表示为k k k f(x )+f'(x )(x-x )=0这是个线性方程,记其根为x k+1,则x k+1的计算公式为k+1k ()x =x -'()k k f x f x ,k=0,1,2,…这就是牛顿迭代法或简称牛顿法。
三 程序设计(本程序由Fortran 语言编制)(1)对于310x x --=,按照上述数学原理,编制的程序如下program newton implicit nonereal :: x (0:50),fx (0:50),f1x (0:50)!分别为自变量x ,函数f(x )和一阶导数f1(x ) integer :: kwrite (*,*) ”x (0)=”read(*,*) x(0) !输入变量:初始值x(0)open (10,file=’1.txt’) do k=1,50,1fx (k)=x (k —1)**3-x (k —1)—1 f1x (k)=3*x(k —1)**2-1x (k)=x (k —1)-fx (k)/f1x(k) !牛顿法write(*,'(I3,1x ,f11。
数学实验题目4 Newton 迭代法摘要0x 为初始猜测,则由递推关系产生逼近解*x 的迭代序列{}k x ,这个递推公式就是Newton 法。
当0x 距*x 较近时,{}k x 很快收敛于*x 。
但当0x 选择不当时,会导致{}k x 发散。
故我们事先规定迭代的最多次数。
若超过这个次数,还不收敛,则停止迭代另选初值。
前言利用牛顿迭代法求的根程序设计流程问题1(1 程序运行如下:r = NewtSolveOne('fun1_1',pi/4,1e-6,1e-4,10) r = 0.7391(2 程序运行如下:r = NewtSolveOne('fun1_2',0.6,1e-6,1e-4,10) r = 0.5885问题2(1 程序运行如下:否 是否是是定义()f x输入012,,,x N εε开 始1k =01()f x ε<0100()()f x x x f x =-'102||x x ε-<k N =输出迭代失败标志输出1x输出奇 异标志结 束01x x = 1k k =+ 否r = NewtSolveOne('fun2_1',0.5,1e-6,1e-4,10)r = 0.5671(2)程序运行如下:r = NewtSolveOne('fun2_2',0.5,1e-6,1e-4,20)r = 0.5669问题3(1)程序运行如下:①p = LegendreIter(2)p = 1.0000 0 -0.3333p = LegendreIter(3)p = 1.0000 0 -0.6000 0p = LegendreIter(4)p =1.0000 0 -0.8571 0 0.0857p = LegendreIter(5)p = 1.0000 0 -1.1111 0 0.2381 0②p = LegendreIter(6)p = 1.0000 0 -1.3636 0 0.4545 0 -0.0216r = roots(p)'r= -0.932469514203150 -0.6612 0.9324695142031530.6612 -0.238619186083197 0.238619186083197用二分法求根为:r = BinSolve('LegendreP6',-1,1,1e-6)r = -0.932470204878826 -0.661212531887755 -0.2386200573979590.2386 0.661192602040816 0.932467713647959(2)程序运行如下:①p = ChebyshevIter(2)p = 1.0000 0 -0.5000p = ChebyshevIter(3)p = 1.0000 0 -0.7500 0p = ChebyshevIter(4)p = 1.0000 0 -1.0000 0 0.1250p = ChebyshevIter(5)p = 1.0000 0 -1.2500 0 0.3125 0②p = ChebyshevIter(6)p = 1.0000 0 -1.5000 0 0.5625 0 -0.0313r = roots(p)'r = -0.965925826289067 -0.7548 0.9659258262890680.7547 -0.258819045102521 0.258819045102521用二分法求根为:r = BinSolve('ChebyshevT6',-1,1,1e-6)r = -0.965929926658163 -0.7755 -0.2588289221938780.2588 0.7020 0.965924944196429与下列代码结果基本一致,只是元素顺序稍有不同:j = 0:5;x = cos((2*j+1)*pi/2/(5+1))x =0.965925826289068 0.7548 0.258819045102521-0.258819045102521 -0.7547 -0.965925826289068(3)程序运行如下:①p = LaguerreIter(2)p = 1 -4 2p = LaguerreIter(3)p = 1 -9 18 -6p = LaguerreIter(4)p = 1 -16 72 -96 24p = LaguerreIter(5)p =1.0000 -25.0000 200.0000 -600.0000 600.0000 -120.000②p = LaguerreIter(5)p =1.0000 -25.0000 200.0000 -600.0000 600.0000 -120.000r = roots(p)'r =12.6432 7.8891 3.5964257710407111.4520 0.263560319718141用二分法求根为:r = BinSolve('LaguerreL5',0,13,1e-6)r = 0.263560314567722 1.4789 3.5964257656311507.0720 12.6490(4)程序运行如下:①p = HermiteIter(2)p = 1.0000 0 -0.5000p = HermiteIter(3)p = 1.0000 0 -1.5000 0p = HermiteIter(4)p = 1.0000 0 -3.0000 0 0.7500p = HermiteIter(5)p = 1.0000 0 -5.0000 0 3.7500 0②p = HermiteIter(6)p = 1.0000 0 -7.5000 0 11.2500 0 -1.8750r = roots(p)'r =-2.3587 2.3588 -1.3358490740136961.335849074013698 -0.4367 0.4366用二分法求根为:r = BinSolve('HermiteH6',-3,3,1e-6)r =-2.3516 -1.335849********* -0.43630.4366 1.335848983453244 2.3504所用到的函数function r = NewtSolveOne(fun, x0, ftol, dftol, maxit)% NewtSolveOne 用Newton法解方程f(x)=0在x0附近的一个根%% Synopsis: r = NewtSolveOne(fun, x0)% r = NewtSolveOne(fun, x0, ftol, dftol)%% Input: fun = (string) 需要求根的函数及其导数% x0 = 猜测根,Newton法迭代初始值% ftol = (optional)误差,默认为5e-9% dftol = (optional)导数容忍最小值,小于它表明Newton法失败,默认为5e-9 % maxit = (optional)迭代次数,默认为25%% Output: r = 在寻根区间内的根或奇点if nargin < 3ftol = 5e-9;endif nargin < 4dftol = 5e-9;endif nargin < 5maxit = 25;endx = x0; %设置初始迭代位置为x0k = 0; %初始化迭代次数为0while k <= maxitk = k + 1;[f,dfdx] = feval(fun,x); %fun返回f(x)和f'(x)的值if abs(dfdx) < dftol %如果导数小于dftol,Newton法失败,返回空值r = [];warning('dfdx is too small!');return;enddx = f/dfdx; %x(n+1) = x(n) - f( x(n) )/f'( x(n) ),这里设dx = f( x(n) )/f'( x(n) )x = x - dx;if abs(f) < ftol %如果误差小于ftol,返回当前x为根r = x;return;endendr = []; %如果牛顿法未收敛,返回空值function p = LegendreIter(n)% LegendreIter 用递推的方法计算n次勒让德多项式的系数向量Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)%% Synopsis: p = LegendreIter(n)%% Input: n = 勒让德多项式的次数%% Output: p = n次勒让德多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %P0(x) = 1p = 1;return;elseif n == 1 %P1(x) = xp = [1 0];return;endpBk = 1; %初始化三项递推公式后项为P0pMid = [1 0]; %初始化三项递推公式中项为P1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Pn+1pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的PnpBkCal(3:i+3) = pBk;pFwd = (2*i+3)/(i+2) * pMidCal - (i+1)/(i+2) * pBkCal; %勒让德多项式三项递推公式Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把勒让德多项式最高次项系数归一化function p = ChebyshevIter(n)% ChebyshevIter 用递推的方法计算n次勒让德-切比雪夫多项式的系数向量Tn+2(x) = 2*x*Tn+1(x) - Tn(x)%% Synopsis: p = ChebyshevIter(n)%% Input: n = 勒让德-切比雪夫多项式的次数%% Output: p = n次勒让德-切比雪夫多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %T0(x) = 1p = 1;return;elseif n == 1 %T1(x) = xp = [1 0];return;endpBk = 1; %初始化三项递推公式后项为T0pMid = [1 0]; %初始化三项递推公式中项为T1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Tn+1pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的PnpBkCal(3:i+3) = pBk;pFwd = 2*pMidCal - pBkCal; %勒让德-切比雪夫多项式三项递推公式Tn+2(x) = 2*x*Tn+1(x) - Tn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把勒让德-切比雪夫多项式最高次项系数归一化function p = LaguerreIter(n)% LaguerreIter 用递推的方法计算n次拉盖尔多项式的系数向量Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)*Ln(x)%% Synopsis: p = LaguerreIter(n)%% Input: n = 拉盖尔多项式的次数%% Output: p = n次拉盖尔多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %L0(x) = 1p = 1;return;elseif n == 1 %L1(x) = -x+1p = [-1 1];return;endpBk = 1; %初始化三项递推公式后项为L0pMid = [-1 1]; %初始化三项递推公式中项为L1for i = 0:n-2pMidCal1 = zeros(1,i+3); %构造用于计算的x*Ln+1(x)pMidCal1(1:i+2) = pMid;pMidCal2 = zeros(1,i+3); %构造用于计算的Ln+1(x)pMidCal2(2:i+3) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的Ln(x)pBkCal(3:i+3) = pBk;pFwd =( (2*i+3)*pMidCal2 - pMidCal1 - (i+1)*pBkCal )/ (i+2); %拉盖尔多项式三项递推公式Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)^2*Ln(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把拉盖尔多项式最高次项系数归一化function p = HermiteIter(n)% HermiteIter 用递推的方法计算n次埃尔米特多项式的系数向量Hn+2(x) = 2*x*Hn+1(x) - 2*(n+1)*Hn(x)%% Synopsis: p = HermiteIter(n)%% Input: n = 埃尔米特多项式的次数%% Output: p = n次埃尔米特多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %H0(x) = 1p = 1;return;elseif n == 1 %H1(x) = 2*xp = [2 0];return;endpBk = 1; %初始化三项递推公式后项为L0pMid = [2 0]; %初始化三项递推公式中项为L1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Hn+1(x)pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的Hn(x)pBkCal(3:i+3) = pBk;pFwd =2*pMidCal - 2*(i+1)*pBkCal; %埃尔米特多项式三项递推公式Hn+2(x) = 2*x*Hn+1(x) - 2*(n+1)*Hn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把拉盖尔多项式最高次项系数归一化function r = BinSolve(fun, a, b, tol)% BinSolve 用二分法解方程f(x)=0在区间[a,b]的根%% Synopsis: r = BinSolve(fun, a, b)% r = BinSolve(fun, a, b, tol)%% Input: fun = (string) 需要求根的函数% a,b = 寻根区间上下限% tol = (optional)误差,默认为5e-9%% Output: r = 在寻根区间内的根if nargin < 4tol = 5e-9;endXb = RootBracket(fun, a, b); %粗略寻找含根区间[m,n] = size(Xb);r = [];nr = 1; %初始化找到的根的个数为1maxit = 50; %最大二分迭代次数为50for i = 1:ma = Xb(i,1); %初始化第i个寻根区间下限b = Xb(i,2); %初始化第i个寻根区间上限err = 1; %初始化误差k = 0;while k < maxitfa = feval(fun, a); %计算下限函数值fb = feval(fun, b); %计算上限函数值m = (a+b)/2;fm = feval(fun, m);err = abs(fm);if sign(fm) == sign(fb) %若中点处与右端点函数值同号,右端点赋值为中点b = m;else %若中点处与左端点函数值同号或为0,左端点赋值为中点a = m;endif err < tol %如果在a处函数值小于tolr(nr) = a; %一般奇点不符合该条件,这样可以去除奇点nr = nr + 1; %找到根的个数递增k = maxit; %改变k值跳出循环endk = k + 1; %二分迭代次数递增endendfunction X = powerX(x,a,b)% powerX 对给定向量(x1, x2,..., xn)返回增幂矩阵(x1^a, x2^a,..., xn^a; x1^a+1, x2^a+1,..., xn^a+1; ...; x1^b, x2^b,..., xn^b;)%% Synopsis: X = powerX(x,a,b)%% Input: x = 需要返回增幂矩阵的向量% a,b = 寻根区间上下限%% Output: X = 增幂矩阵(x1^a, x2^a,..., xn^a; x1^a+1, x2^a+1,..., xn^a+1; ...; x1^b, x2^b,..., xn^b;)if round(a) ~= a | round(b) ~= berror('a,b must be integers');elseif a >= berror('a must be smaller than b!');endx = x(:)';row = b-a+1;col = length(x);X = zeros(row, col);for i = b:-1:aX(b-i+1,:) = x.^i;Endfunction [f, dfdx] = fun1_1(x)f = cos(x) - x;dfdx = -sin(x) - 1;function [f, dfdx] = fun1_2(x)f = exp(-x) - sin(x);dfdx = -exp(-x) - cos(x);function [f, dfdx] = fun2_1(x)f = x - exp(-x);dfdx = 1 + exp(-x);function [f, dfdx] = fun2_2(x)f = x.^2 - 2*x*exp(-x) + exp(-2*x);dfdx = 2*x - 2*exp(-x) + 2*x*exp(-x) - 2*exp(-2*x);function y = LegendreP6(x)p = LegendreIter(6);X = powerX(x,0,6);y = p*X;function y = ChebyshevT6(x)p = ChebyshevIter(6);X = powerX(x,0,6);y = p*X;function y = LaguerreL5(x)p = LaguerreIter(5);X = powerX(x,0,5);y = p*X;function y = HermiteH6(x)p = HermiteIter(6);X = powerX(x,0,6);y = p*X;思考题(1)由于Newton法具有局部收敛性,所以在实际问题中,当实际问题本身能提供接近于根的初始近似值时,就可保证迭代序列收敛,但当初值难以确定时,迭代序列就不一定收敛。
2011年数值分析1、设 f (x) =(x 3 -5)2(1) 应用newton 迭代法解方程f (x) =o 导出3 5的迭代公式。
并讨论 迭代公式的收敛速度(2) 改进导出的迭代公式以提高迭代的收敛阶,并用改进后的迭代 公式计算3 5 (取初始近似值x o =1,要求迭代三步,结果保留4位小 数)厂 2 32( 1)求a 及不超过二次多项式p(x)使S(x)=」a *x +X 兰X 。
,具有p(x),1 兰 xW2连续的二阶导数且满足p(2) =0 ;(2)当f(x)用满足条件f(1)=p(1),f (2)二P (2), f '(1^ p '(1的插值多项式2近似时求.f(x)dx-1a 」"(1)写出Jacobi 迭代格式(2) 证明当|a »4时,该迭代格式收敛(3) 当a=5时,取x 0( —,1,—),求出x 2 (计算结果保留4位小数) 10 5 104设f(x)=???,在[0,1]上给出函数f(x)的n+1个等距节点X i 函数表,若想用二次插值来计算f(x)的近似值。
要求截断误差不超过10-6,问使 用多大的函数表步长h5、给定求积公式 f(x)dx : A o f(X o ) - f (X i )(1)求出待定参数A b ,X o ,X i ,使公式的代数精度尽可能高,并指出此 'a 3已知线性方程组2 1]叮 2 x 22求积公式的代数精度是多少?2(2)用此求积公式计算积分x4dx。
(计算结果保留4位小数)6试用共轭梯度法求解线性方程组,初始值取x°=o,o,o)2 -1 0 X i 1-i 3 -i X2 1已知计算过程为eg法0 -1 4丄X3」?j7已知数据点(0,1)(1,0)(2,丄)(3,10),试利用反差商构造有理插值函数R(x)3通过已知数据点._3 -4 31乂1 _2 |8方程组-4 6 3 X2『53^L x d 7J]3(1)试用Doolittle分解方法求解方程组(2)计算出系数矩阵A按模最大特征值及对应的特征向量,初始向量为(1,0,0)T,迭代两步,计算结果保留4位小数。
迭代法求解方程问题实验报告姓名:殷伯旭 班级:信计0801班 学号:u200810065一. 实验目的运用数学知识与matlab 相结合,运用数学方法,建立数学模型,用matlab 软件辅助求解模型,解决实际问题。
二. 实验任务求方程1020x e x +-=的一个近似解,误差不超过410-,要求: 设计4种求解的迭代法,讨论其收敛性,并求出满足精度的近似解;三. 实验分析与求解题目要求设计四种迭代方法,我们考虑用书上的四种迭代思想:方法一:用Steffenson 迭代法,首先构造函数:2()10xe g x -=, 则迭代公式为:21(())k k k k k k kg x x x x +-=- 方法二:一般的迭代法,1210k k x e x +-=方法三:单点弦截法法,固定01()()()()0.25,f a b a f b f a a x x --==-, 其中端点120,a b ==,则迭代公式为:010()()()()k k k k k f x x x x x f x f x +=--- 方法四:双点弦截法法,迭代公式为:111()()()()k k k k k k k f x x x x x f x f x +--=--- 实验程序:function shiyan112%%%%%方法一: stefften 迭代x0=0.25;g0=(2-exp(x0))/10;gg0=(2-exp(g0))/10;x1=x0-(g0-x0)^2/(gg0-2*g0+x0);n1=0;while abs(x1-x0)>0.00001x0=x1;g0=(2-exp(x0))/10;gg0=(2-exp(g0))/10;x1=x0-(g0-x0)^2/(gg0-2*g0+x0);n1=n1+1;x(n1)=x1;endn1x0=x1%%%%%方法二: 一般迭代x20=0.25;x21=(2-exp(x20))/10;n2=0;while abs(x21-x20)>0.00001x20=x21;x21=(2-exp(x20))/10;n2=n2+1;endn2x20=x21%%%%%方法三: 单点弦截法x30=0.25;a=0;b=0.5;n3=0;fa=exp(a)+10*a-2;fb=exp(b)+10*b-2;x31=a-fa*(b-a)/(fb-fa);f30=exp(x30)+10*x30-2;f31=exp(x31)+10*x31-2;x32=x31-f31*(x31-x30)/(f31-f30); while abs(x32-x31)>0.00001x31=x32;f31=exp(x31)+10*x31-2;x32=x31-f31*(x31-x30)/(f31-f30);n3=n3+1;endn3x30=x32%%%%%%%方法四:双点弦截法x40=0.25;x41=0.5;n4=0;f40=exp(x40)+10*x40-2;f41=exp(x41)+10*x41-2;x42=x41-f41*(x41-x40)/(f41-f40);while abs(x42-x41)>0.00001x40=x41;x41=x42;f40=exp(x40)+10*x40-2;f41=exp(x41)+10*x41-2;x42=x41-f41*(x41-x40)/(f41-f40);n4=n4+1;endn4x40=x42运行结果:(1) 方法一: x =0.0905 ; 迭代次数: n1 = 2(2)方法二: x =0.0905 ; 迭代次数: n2 = 5(3) 方法三: x =0.0905 ; 迭代次数: n3 = 2(4) 方法四: x =0.0905 ; 迭代次数: n4 =33)实验总结通过自主学习matlab,编程能力有了较大提高,并将其应用于数值代数刚学的一种思想,在加深对该领域印象的同时对matlab有了更深一层的了解。
1. 3,2x =-分别是方程328120x x x --+= 的根;讨论用Newton 迭代法求它们近似值的收敛阶。
取初值02x =-计算根3x =-的近似值,要求迭代3次。
(结果保留4位小数) 解: 设 32()812f x x x x =--+ 2()328f x x x '=-- ()62f x x ''=- (3)0,(3)0f f '-=-≠,(2)0,(2)0,(2)100f f f '''===≠则:3-是()0f x =的单根,故Newton 迭代在3-附近是平方收敛; 2是()0f x =的二重根,故Newton 迭代在2附近是线性收敛; 取02x =-,Newton 迭代:3212()812()328n n n n n n n n f x x x x x x x f x x x +--+=-=-'-- 223634n n n x x x ++=+2001023634x x x x ++==+2112123634x x x x ++==+2223223634x x x x ++==+2. 设常数0a ≠ ,求出a 的取值范围使得解方程组112233212313a x b a x b a x b --⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪-= ⎪⎪ ⎪ ⎪⎪ ⎪⎝⎭⎝⎭⎝⎭的Jacobi 迭代法收敛。
解: Jacobi 迭代:(1)()k k J x B x g +=+10210211203203130130J a B a a a -----⎛⎫⎛⎫⎛⎫⎪⎪ ⎪=--=-- ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭1123a b g a b a b -⎛⎫⎛⎫ ⎪⎪= ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭迭代矩阵J B 的特征方程:021211120323013013J a E B a a a a λλλλλλλ----⎛⎫⎛⎫⎪ ⎪-=+-=-=⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭即:3()14()0a a λλ+=特征根:0,i aλλ==±谱半径:()1J B ρ=< 时Jacobi 迭代收敛故:a >3. 设(1)用Crout 三角分解法求解方程组 12323251034133619x x x ⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪= ⎪⎪ ⎪ ⎪⎪ ⎪⎝⎭⎝⎭⎝⎭ ;(2)用乘幂法求方程组系数阵的按摸最大的特征值和对应的特征向量。
计算方法上机实验指导一、非线性方程求解(一)问题的指出 二分法 1.方法概要假定()f x 在[,]a b 上连续,()()0f a f b <且()f x 在(,)a b 内仅有一实根*x 取区间中点c ,若()0f c =,则c 恰为其根,否则,根据()()0f a f c <是否成立,可判断出根所属的新的有根子区间(,)a c 或(,)c b ,为节省内存,仍称其为(,)a b 。
运算重复进行,直到满足精度要求为止,即*||c x b a ε-<-<。
式中,a b 为新的有根子区间的端点。
2.计算框图Nowton 迭代法 1.方法概要0x 为初始猜测,则由递推关系1()()k k k k f x x x f x +=-' 产生逼近解*x 的迭代序列{}k x ,这个递推公式就是Newton 法。
当0x 距*x 较近时,{}k x 很快收敛于*x 。
但当0x 选择不当时,会导致{}k x 发散。
故我们事先规定迭代的最多次数。
若超过这个次数,还不收敛,则停止迭代另选初值。
2.计算框图(二)目的掌握二分法与牛顿法的基本原理及应用 (三)要求1.用二分法计算方程2sin 02x x -=在(1,2)内的根的近似值 2.用二分法计算方程310x x --=在(1,1.5)内的根的近似值5(0.510)ε-=⨯。
3.用牛顿法求下列非线性方程的近似根。
① 10xxe -= 00.5x = ② 310x x --= 01x =③ 2(1)(21)0x x --= 00.45x = 00.65x =4.用改进的牛顿法12()()k k k k f x x x f x +=-'计算方程20(1)(21)00.55x x x --==的近似根,并与要求3.中的③的结果进行比较。
二、Gauuss 列主元消去法(一)问题的提出由地一般线性方程组在使用Gauss 消去法求解时,从求解过程中可以清楚地看到,若(1)0k kk a -=,必须施以行交换的手续,才能使消去过程继续下去。
实验一: 用FFT 作谱分析实验目的:(1) 进一步加深DFT 算法原理和基本性质的理解(因为FFT 只是DFT 的一种快速算法, 所以FFT 的运算结果必然满足DFT 的基本性质)。
(2) 熟悉FFT 算法原理和FFT 子程序的应用。
(3) 学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT 。
实验原理: DFT 的运算量:一次完整的DFT 运算总共需要2N 次复数乘法和(1)N N -复数加法运算,因而直接计算DFT 时,乘法次数和加法次数都和2N 成正比,当N 很大时,运算量很客观的。
例如,当N=8时,DFT 运算需64位复数乘法,当N=1024时,DFT 运算需1048576次复数乘法。
而N 的取值可能会很大,因而寻找运算量的途径是很必要的。
FFT 算法原理:大多数减少离散傅里叶变换运算次数的方法都是基于nk N W 的对称性和周期性。
(1)对称性()*()k N n kn knNN NW W W --==(2)周期性kn Nkn n N kn k NNN NNW W W W ++===由此可得()()/2(/2)1n N k N n k nk N N N N N k N k N N W W W W W W ---+⎧==⎪=-⎨⎪=-⎩这样:1.利用第三个方程的这些特性,DFT 运算中有些项可以合并;2.利用nk N W 的对称性和周期性,可以将长序列的DFT 分解为短序列的DFT 。
前面已经说过,DFT 的运算量是与2N 成正比的,所以N 越小对计算越有利,因而小点数序列的DFT 比大点数序列的DFT 运算量要小。
快速傅里叶变换算法正是基于这样的基本思路而发展起来的,她的算法基本上可分成两大类,即按时间抽取法和按频率抽取法。
我们最常用的是2M N =的情况,该情况下的变换成为基2快速傅里叶变换。
完成一次完整的FFT 计算总共需要2log 2N N次复数乘法运算和2log N N 次复数加法运算。
用迭代法求集合中最大、最小元问题让我们来探讨一下什么是迭代法。
迭代法是一种通过反复调用自身来解决问题的算法。
在计算机科学中,迭代法通常用于检索集合中的最大值和最小值。
在本文中,我们将深入探讨使用迭代法来解决集合中的最大、最小元问题,并且我将共享一些我对这个问题的个人观点和理解。
1. 什么是迭代法迭代法是一种解决问题的方法,它通过重复应用相同的算法来逐步逼近问题的解。
在计算机科学中,迭代法常常用于搜索集合中的最值,包括最大值和最小值。
通过不断比较集合中的元素,并将较大(或较小)的值替换为当前最大(或最小)值,最终可以得到集合中的最大值和最小值。
2. 使用迭代法求集合中的最大、最小元问题现在让我们来看一个具体的例子,假设我们有一个包含n个元素的集合S={a1, a2, ..., an},我们想要找出S中的最大值和最小值。
我们可以使用迭代法来解决这个问题。
我们可以初始化两个变量max和min,分别代表集合中的最大值和最小值。
我们可以遍历集合S中的每一个元素,将当前元素与max和min进行比较。
如果当前元素大于max,就将max更新为当前元素;如果当前元素小于min,就将min更新为当前元素。
通过不断比较和更新max和min,最终我们可以得到集合S中的最大值和最小值。
3. 个人观点和理解我认为迭代法是一种非常高效和灵活的算法,特别适用于解决集合中的最值问题。
通过不断比较和更新,迭代法可以在有限次操作内找到集合中的最大值和最小值,同时适用于各种类型的集合。
迭代法的实现也相对简单,只需要几行代码就可以完成。
总结回顾通过本文的学习,我们深入探讨了使用迭代法来解决集合中的最大、最小元问题。
我们从迭代法的概念和原理开始,然后详细介绍了使用迭代法求解集合中最值的具体步骤。
我也共享了我对迭代法的个人观点和理解。
通过这篇文章,我相信你已经对迭代法有了更深入的了解,能够灵活运用它来解决集合中的最值问题。
迭代法是解决集合中最大、最小元问题的一种强大工具,它不仅高效,而且实现起来比较简单。
哈工大数值分析实验报告标题:哈工大数值分析实验报告一、实验目的:本实验的目的是探究在数值分析中使用的各种数值方法,对于解决实际问题的有效性和可靠性进行评估。
二、实验内容:本实验主要包括以下几个方面的内容:1. 熟悉数值分析中常用的数值方法,如数值积分、数值微分、迭代法等;2. 在MATLAB等数学软件平台上,编写程序实现所学的数值方法;3. 使用所编写的程序,对给定的实际问题进行求解,并分析其结果的有效性和可靠性;4. 根据实际问题的特点,评估不同数值方法的适用性,并给出相应的结论和建议。
三、实验步骤:1. 阅读相关的理论知识,熟悉数值分析中常用的数值方法;2. 编写数值分析实验的程序代码,包括数值积分、数值微分和迭代法等;3. 使用编写的程序,对所给的实际问题进行求解,记录并分析结果;4. 根据实际问题的特点,评估所使用的数值方法的可靠性和有效性;5. 根据实验结果,撰写实验报告,包括实验目的、实验内容、实验步骤和实验结果的分析等。
四、实验结果:根据实际问题的不同,实验结果也会有所差异。
在实验报告中,可以详细叙述对所给实际问题的求解过程,并对结果进行分析和解释。
同时,还可以比较不同数值方法的结果,评估其优劣和适用性。
五、实验结论:根据实验结果的分析,可以得出结论,总结不同数值方法的优缺点,并对其在实际问题中的应用进行评价。
同时,还可以给出相应的建议,为以后的数值分析工作提供参考。
六、实验总结:通过本次实验,进一步加深了对数值分析中常用数值方法的理解和掌握。
通过实际问题的求解,对于这些数值方法的应用和效果有了更深入的认识。
同时,也提高了编程和科研报告撰写的能力,为以后的学习和工作打下了坚实的基础。
以上是关于哈工大数值分析实验报告的基本内容,具体实验细节和结果请根据实际情况进行补充。
迭代法实验报告迭代法实验报告引言:迭代法是一种常见的数值计算方法,通过反复迭代逼近解的过程,来解决一些复杂的数学问题。
本实验旨在通过实际操作,深入理解迭代法的原理和应用,并通过实验数据验证其有效性。
一、实验目的本实验的主要目的有以下几点:1. 掌握迭代法的基本原理和步骤;2. 熟悉迭代法在数值计算中的应用;3. 理解迭代法的收敛性和稳定性;4. 验证迭代法在实际问题中的有效性。
二、实验原理迭代法是一种通过不断逼近解的方法,其基本原理可概括为以下几步:1. 选择一个初始值作为迭代的起点;2. 根据问题的特点和要求,构造一个递推公式;3. 通过不断迭代计算,逐步逼近解;4. 判断迭代过程是否收敛,并确定最终的解。
三、实验步骤1. 选择合适的初始值。
初始值的选择对迭代的结果有重要影响,通常需要根据问题的特点进行合理选取。
2. 构造递推公式。
根据问题的数学模型,建立递推公式,将问题转化为迭代求解的形式。
3. 进行迭代计算。
根据递推公式,进行迭代计算,直到满足收敛条件或达到预定的迭代次数。
4. 判断迭代结果。
根据实际问题的要求,判断迭代结果是否满足精度要求,并进行相应的调整和优化。
四、实验结果与分析通过实验操作,我们得到了一组迭代计算的结果。
根据实验数据,我们可以进行以下分析:1. 收敛性分析。
通过观察迭代过程中的数值变化,我们可以判断迭代法的收敛性。
如果数值逐渐趋于稳定,且与理论解的误差在可接受范围内,说明迭代法收敛。
2. 稳定性分析。
迭代法的稳定性是指在初始值变化时,迭代结果是否保持稳定。
通过改变初始值,我们可以观察迭代结果的变化情况,从而评估迭代法的稳定性。
3. 精度分析。
迭代法的精度取决于迭代过程中的误差累积情况。
通过与理论解的比较,我们可以评估迭代法的精度,并对迭代过程进行优化。
五、实验结论通过本次实验,我们深入了解了迭代法的原理和应用,通过实际操作验证了迭代法在数值计算中的有效性。
实验结果表明,迭代法在解决复杂数学问题中具有较高的准确性和稳定性,能够满足实际应用的需求。
最新哈工大数学实验实验报告实验目的:本次实验旨在通过一系列数学问题的求解,加深对高等数学理论的理解,并掌握数学建模的基本方法。
通过实际操作,提高运用数学工具解决实际问题的能力。
实验内容:1. 问题一:求解一元二次方程- 描述:给定一元二次方程 ax^2 + bx + c = 0,其中 a, b, c为已知系数,求解该方程的根。
- 方法:应用求根公式,即 x = (-b ± √(b^2 - 4ac)) / (2a)。
- 结果:计算得到方程的两个解,并验证其正确性。
2. 问题二:线性规划问题- 描述:给定一组线性约束条件和目标函数,求线性规划问题的最优解。
- 方法:使用单纯形法进行迭代求解。
- 结果:找到最优解,并给出对应的目标函数值。
3. 问题三:概率分布与统计推断- 描述:根据一组实验数据,估计总体分布的参数,并进行假设检验。
- 方法:利用最大似然估计法确定参数,再应用t检验进行假设检验。
- 结果:得出参数估计值和假设检验的结果。
实验环境:- 软件:MATLAB、Mathematica、R语言等数学软件。
- 硬件:个人计算机,具备足够的计算能力。
实验步骤:1. 准备阶段:收集所需的数据和资料,安装并熟悉相关数学软件。
2. 实验阶段:按照实验内容,逐步完成每个问题的求解。
3. 分析阶段:对求解结果进行分析,验证其合理性。
4. 总结阶段:撰写实验报告,总结实验过程中的关键点和学习到的知识。
实验结果:- 问题一的解验证了求根公式的有效性。
- 问题二的最优解展示了单纯形法在解决线性规划问题中的应用。
- 问题三的参数估计和假设检验结果为实际问题提供了决策依据。
实验结论:通过本次实验,我们不仅巩固了数学理论知识,而且通过实际操作提升了解决实际问题的能力。
数学建模和计算工具的应用对于理解和应用数学至关重要。
在未来的学习中,我们将继续探索更多的数学问题和解决方法。