改进的平方根法及其程序实现

合集下载

平方根的计算与应用

平方根的计算与应用

平方根的计算与应用在数学中,平方根是一个非常常见且重要的概念。

它是求解一个数的平方根所得到的结果,可以应用在各种实际问题中。

本文将详细介绍平方根的计算方法以及其在现实生活中的应用。

一、平方根的计算方法计算平方根的方法有很多,其中最常见的是牛顿迭代法和二分法。

牛顿迭代法是一种逼近法,通过不断迭代逼近一个数的平方根。

假设要计算数a的平方根,我们可以先猜测一个近似值x0,然后通过迭代计算来逐渐接近真实值。

具体计算步骤如下:1. 假设x0为平方根的猜测值。

2. 利用牛顿迭代公式:xn = 1/2 * (xn-1 + a / xn-1),计算下一个近似值xn。

3. 重复步骤2,直到达到所需的精度。

例如,如果我们想计算数16的平方根,可以首先猜测一个近似值,比如2。

然后不断使用牛顿迭代公式来逼近真实的平方根值,直到满足所需精度。

二、平方根的应用平方根在现实生活中有许多应用,下面将介绍几个常见的应用场景。

1. 几何学中的应用:平方根可以用来计算图形的边长、对角线长度等。

例如,在矩形中,对角线的长度可以通过两条边长的平方和的平方根来计算。

2. 物理学中的应用:平方根可以用来计算物体的速度、加速度等。

例如,在自由落体运动中,我们可以利用物体下落的时间和重力加速度来计算物体的速度,其中平方根的计算用来求得物体的速度。

3. 金融学中的应用:平方根可以用来计算收益率的波动性,帮助投资者评估投资风险。

例如,投资者可以使用历史数据计算某项投资的波动率,通过平方根的计算来得到具体的数值。

4. 工程学中的应用:平方根可以用来计算电路中的频率、电压等。

例如,在交流电路中,我们可以利用平方根来计算电压的有效值,帮助工程师进行电路设计。

综上所述,平方根的计算方法包括牛顿迭代法和二分法。

平方根在实际生活中有广泛的应用,涵盖了几何学、物理学、金融学和工程学等领域。

了解平方根的计算方法和应用场景对于数学和实际问题的理解都有很大的帮助。

改进平方根法的C++实现

改进平方根法的C++实现

实验名称:改进平方根法学院:___数学学院______________________班级姓名:学号:实验日期 2015 年 05 月 26 日自评成绩:97一、实验目的(1)熟练掌握改进平方根法和共轭梯度法的迭代过程(2)尝试使用自己熟悉的计算机语言解决数学中的问题(3)通过上机实验来巩固课本中所学的知识二、实验内容与结果题目1:改进平方根法源程序1#include<iostream>using namespace std;int main(){double a[100][100],l[100][100],u[100][100],b[10],y[10],x[10];int i,j,k,n;cout<<"请输入矩阵的行数: ";cin>>n;cout<<"请输入右端项: "<<endl;for(j=0;j<n;j++){cin>>b[j];}cout<<"请输入矩阵: "<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++){cin>>a[i][j];}}for(j=0;j<n;j++){u[0][j]=a[0][j];}for(j=1;j<n;j++){l[j][0]=u[0][j]/u[0][0];}for(i=1;i<n-1;i++){double s=0;for(k=0;k<i-1;k++){s=s+l[i][k]*u[k][i];}u[i][i]=a[i][i]-s;for(j=i+1;j<n;j++){double s=0;for(k=0;k<i-1;k++){s=s+l[i][k]*u[k][j];}u[i][j]=a[i][j]-s;l[j][i]=u[i][j]/u[i][i];}}double s=0;for(k=0;k<n-1;k++){s=s+l[n-1][k]*u[k][n-1];}u[n-1][n-1]=a[n-1][n-1]-s;y[0]=b[0];for(i=1;i<n;i++){double s=0;for(k=0;k<i-1;k++){s=s+l[i][k]*y[k];}y[i]=b[i]-s;}x[n-1]=y[n-1]/u[n-1][n-1];for(i=n-2;i>=0;i--){double s=0;for(k=i+1;k<n;k++){s=s+u[i][k]*x[k];}x[i]=(y[i]-s)/u[i][i];}cout<<"输出结果:"<<endl;for(i=0;i<n;i++){cout<<"x("<<i<<")"<<"="<<x[i]<<endl;}return 0;}运行结果1。

平方根计算过程范文

平方根计算过程范文

平方根计算过程范文平方根是数学中的一种运算,它是求一个数的平方根,即找到一个数使得它的平方等于这个数。

平方根的计算可以通过牛顿迭代法或二分法来进行。

下面,我们将详细介绍这两种方法的计算过程。

1. 牛顿迭代法(Newton's method):牛顿迭代法是一种通过反复迭代来逼近函数零点的方法,它可以用来计算平方根。

给定一个正实数x,我们希望求解方程f(r)=r^2-x=0的根r,即求x 的平方根。

a.初始化:假设初始的近似解为r0,通常可以选取r0=x/2作为初始值。

b.迭代计算:根据牛顿迭代法的公式,我们可以用下面的迭代公式来不断逼近平方根的值:rn+1 = rn - f(rn)/f'(rn)其中,f'(rn)是f(rn)的导数。

对于我们的求解问题,f(r)=r^2-x,所以f'(r)=2r。

根据上述公式,我们可以进行迭代计算,直到满足迭代终止条件,通常是两次迭代结果之差的绝对值小于一个预设的精确度ε。

c.计算结果:当迭代终止时,rn的值就是x的平方根。

牛顿迭代法的计算过程如上所述,可以通过编程来实现。

下面是一个示例代码:```pythondef newton_sqrt(x, epsilon=1e-6):r=x/2#初始化近似解diff = epsilon + 1 # 初始化差值while diff > epsilon:r_next = r - (r**2 - x) / (2 * r) # 迭代计算diff = abs(r_next - r) # 计算差值r = r_nextreturn r#示例运行x=16print(newton_sqrt(x)) # 输出4,即16的平方根```2. 二分法(Bisection method):二分法是一种逐步缩小区间的方法,它也可以用来计算平方根。

给定一个实数x,我们将区间[0,x]作为初始的近似解范围。

a.初始化:假设初始的近似解为r0,通常可以选取r0=x/2作为初始值。

MATLAB-平方根法和改进平方根法求解线性方程组例题与程序演示教学

MATLAB-平方根法和改进平方根法求解线性方程组例题与程序演示教学

M A T L A B-平方根法和改进平方根法求解线性方程组例题与程序(2)设对称正定阵系数阵线方程组12345678424024000221213206411418356200216143323218122410394334411142202531011421500633421945x x x x x x x x -⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎢⎥⎢⎥⎢---⎢⎥⎢⎥⎢--⎢⎥⎢⎢⎥⎣⎦⎣⎦⎣⎦⎥⎥⎥⎥ (1,1,0,2,1,1,0,2)T x *=--二、数学原理 1、平方根法解n 阶线性方程组Ax=b 的choleskly 方法也叫做平方根法,这里对系数矩阵A 是有要求的,需要A 是对称正定矩阵,根据数值分析的相关理论,如果A 对称正定,那么系数矩阵就可以被分解为的T A=L L •形式,其中L 是下三角矩阵,将其代入Ax=b 中,可得:T LL x=b 进行如下分解:T L xL by y ⎧=⎨=⎩ 那么就可先计算y,再计算x ,由于L 是下三角矩阵,是T L 上三角矩阵,这样的计算比直接使用A 计算简便,同时你应该也发现了工作量就转移到了矩阵的分解上面,那么对于对称正定矩阵A 进行Cholesky 分解,我再描述一下过程吧: 如果你对原理很清楚那么这一段可以直接跳过的。

设T A=L L •,即1112111112112122221222221212....................................n n n n n n nn n n nn nn a a a l l l l aa a l l l l a a a l l l l ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦其中,,1,2,...,ij ji a a i j n ==第1步,由矩阵乘法,211111111,i i a l a l l ==g 故求得111111,2,3,...i i a l l i n a === 一般的,设矩阵L 的前k-1列元素已经求出 第k 步,由矩阵乘法得112211k k kk kmkkik im km ik kkm m a l l a l l l l --===+=+∑∑, 于是11(2,3,...,n)1(),1,2,...kk k ik ik im km m kk l k l a l l i k k n l -=⎧=⎪⎪=⎨⎪=-=++⎪⎩∑ 2、改进平方根法在平方根的基础上,为了避免开方运算,所以用TLDL A =计算;其中,11122.........n d D D D d ⎤⎤⎡⎤⎥⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥===⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎢⎢⎥⎣⎦⎣⎣;得1121212212111111n n n n n d l l l d l A l l d ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦L L M MO O O M L按行计算的L 元素及D 对元素公式 对于n i ,,2,1Λ=11(1,21)j ij ij ik jk k t a t l j i -==-=-∑…,./(1,2,)ij ij j l t d j ==…,i-1.11i i ii ik ikk d a t l -==-∑计算出LD T =的第i 行元素(1,2,i-1)ij t j =…,后,存放在A 的第i 行相置,然后再计算L 的第i 行元素,存放在A 的第i 行.D 的对角元素存放在A 的相应位置.对称正定矩阵A 按T LDL 分解和按T LL 分解计算量差不多,但T LDL 分解不需要开放计算。

平方根法和改进平方根法求解线性方程组例题与程序

平方根法和改进平方根法求解线性方程组例题与程序

平方根法和改进平方根法求解线性方程组例题与程序2、数学原理1、平方根法解n阶线性方程组Ax=b的choleskly方法也叫做平方根法,这里对系数矩阵A是有要求的,需要A是对称正定矩阵,根据数值分析的相关理论,如果A对称正定,那么系数矩阵就可以被分解为的形式,其中L是下三角矩阵,将其代入Ax二b 中,可得:进行如下分解:那么就可先计算y,再计算x,由于L 是下三角矩阵,是上三角矩阵,这样的计算比直接使用A计算简便,同时你应该也发现了工作量就转移到了矩阵的分解上面,那么对于对称正定矩阵A进行Cholesky分解,我再描述一下过程吧:如果你对原理很清楚那么这一段可以直接跳过的。

设,即其中第1步,由矩阵乘法,故求得一般的,设矩阵L的前k-l列元素已经求出第k步,由矩阵乘法得于是2、改进平方根法在平方根的基础上,为了避免开方运算,所以用计算;其中,;得按行计算的元素及对元素公式对于、、计算出的第行元素后,存放在的第行相置,然后再计算的第行元素,存放在的第行、的对角元素存放在的相应位置、对称正定矩阵按分解和按分解计算量差不多,但分解不需要开放计算。

求解, 的计算公式分别如下公式。

3、程序设计1、平方根法function[x]二pfpf(A,b)%楚列斯基分解求解正定矩阵的线性代数方程A二LL'先求LY二b再用L' X二Y即可以求出解X[n,n]=size(A) ;L(1, l)=sqrt(A(l, 1)) ;for k=2:nL(k, l)=A(k, 1)/L(1,1) ; endfor k=2: n-1 L(k, k) =sqrt (A(k, k)_sum(L(k, 1:k-1) > 2)) ; for i=k+l:n L(i,k) = (A(i,k)-stun(L(i, l:kT)、*L(k, l:kT)))/L(k,k); endendL (n, n)=sqrt (A(n, n) -sum(L(n, 1: n-1)、2)) ; %解下三角方程组Ly二b相应的递推公式如下,求出y矩阵y二zeros (n, 1) ;%先生成方程组的因变量的位置,给定y的初始值for k=l: n j=l: k-1; y (k) = (b(k)-L(k, j) *y (j))/L(k, k) ; end%解上三角方程组L' X=Y 递推公式如下,可求出X 矩阵x二zeros (n, 1) ;U=L;%求上对角矩阵for k=n: -1:1 j=k+l:n; x(k) = (y (k)-U(k,j)*x(j))/U(k,k);end » A二[4,2,-4,0,2,4,0,02,2,-1,- 2,1,3,2,01,14,1,-8,-3,5,6 0,-2,1,6,-1,-4,-3,32,1,-8,- 1,22,4,-10,-34,3,-3,-4,4,11,1,-4 0,2,5,-3,-10,1,14,2 0,0,6,3,-3,-4,2,19];>〉b=[0;-6;20;23;9;-22;-15;45];» x=pfpf(A,b)x =121、148160、152810、91202、01852、改进平方根法function[x]=improvecholesky(A,b,n)%用改进平方根法求解Ax=bL=zeros(n,n); %L为n*n矩阵D=diag(n, 0) ; %D 为n*n 的主对角矩阵S=L*D; for i=l: n %L 的主对角元素均为 1 L(i, i) = l; endfor i=l: n for j=l:n %验证 A 是否为对称正定矩阵if (eig(A)<=0) (A(i, j)~=A(j,i))%A的特征值小于0或A非对称时,输出wrongdisp(wrong) ; break; endendendD(1,1)=A(1, 1) ;%将A 分解使得A=LDLTfor i二2:n for j=l:i~l S(i,j)=A(i,j)-sum(S(i,l:j~ l)*L(j,l: j-1)); L(i,l:i-l)=S(i,l:i-l)/D(l:i-l,l:i-l); end D(i, i)=A(i, i)-sum(S(i, 1: i-l)*L(i, 1: i-1)) ; endy=zeros (n, 1) ; % x, y 为阶矩阵x=zeros (n, 1); for i=l: n y(i) = (b(i)-sum(L(i, 1: i-l)*D(l: i-1,1: i-l)*y (1: i-1)))/D(i, i) ;%通过LDy=b 解得y 的值endfor i=n:-1:1 x(i)=y(i)-sum(L(i+l:n, i)*x(i+l:n)) ;%通过LTx=y 解得x 的值end» A二[4,2,-4,0,2,4,0,02,2,-1,-2,1,3,2,01,14,1,-8,- 3,5,6 0,-2,1,6,-1,-4,-3,32,1,-8,-1,22,4,-10,-34,3,-3,- 4,4,11,1,-4 0,2,5,-3,-10,1,14,2 0,0,6,3,-3,-4,2,19];>> b=[0;-6;20;23;9;-22;-15;45];» n=8;»x=improvecholesky(A,b,n)x =121、148160、152810、91202、01854、结果分析和讨论平方根法和改进平方根法求解线性方程组的解为x二(121、1481, -140、1127,29、7515,-60、1528,10、9120,-26、7963,5、4259, -2、0185) To与精确解相比较也存在很大的误差,虽然系数矩阵的对角元素都大于零,原则上可以不必选择主元,但由于矩阵的数值问题较大,不选主元的结果就是产生很大的误差,所以在求解的过程中还是应该选择主元以此消除误差,提高精度。

程序代码 用c语言程序实现改进的平方根法解方程组

程序代码 用c语言程序实现改进的平方根法解方程组
{
lt[i][i]=1;// 令lt[i][i]=1
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
t[i][j]=0;//令t[i][j]=0
}
for(j=0;j<n;j++)
for(i=j+1;i<n;i++)
{
for(j=i+1;j<n;j++)//计算第2行到第n行的lt[][]
{
lt[i][j]=a[i][j];
for(k=0;k<=i-1;k++)
{
lt[i][j]=lt[i][j]-t[i][k]*lt[k][j];
}
lt[i][j]=lt[i][j]/t[i][i];
printf("\t\t\t改进的平方根法(推理法)解方程组\n");
printf("请输入矩阵的阶数:");
scanf("%d",&n);
printf("\n");
printf("请输入系数矩阵a:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
d[i][j]=t[i][i];
printf("%f",d[i][j]); printf(" ");//输出矩阵d[][]
}
printf("\n");

平方根的计算与应用

平方根的计算与应用

平方根的计算与应用平方根是数学中常见的运算之一,它在各个领域中都有广泛的应用。

在本文中,我们将介绍平方根的计算方法以及它在实际生活和科学研究中的应用。

一、平方根的计算方法1. 开平方法开平方法是最常用的计算平方根的方法之一。

它利用数学公式和逐步逼近的思想来计算平方根。

以求解一个正数x的平方根为例,我们可以从一个猜测值开始,然后通过迭代计算逐渐接近真实的平方根。

具体的步骤如下:1) 选择一个初始猜测值g。

2) 将猜测值g带入公式,计算出g的平方r。

3) 如果r接近于x,我们可以认为g就是x的平方根,否则继续迭代计算。

4) 根据计算结果,调整猜测值g来逼近真实的平方根。

2. 牛顿迭代法牛顿迭代法是一种更高效的计算平方根的方法。

它利用函数的导数和切线的概念来逼近平方根。

具体的步骤如下:1) 选择一个初始猜测值g。

2) 计算出g的平方r。

3) 计算函数f(x)=x^2 - r的导数f'(x)。

4) 计算切线的斜率,即f(g)/f'(g)。

5) 利用斜率和初始猜测值计算出下一个猜测值g',即g' = g -f(g)/f'(g)。

6) 根据计算结果,调整猜测值g来逼近真实的平方根。

二、平方根的应用平方根在实际生活和科学研究中有广泛的应用,下面我们列举几个常见的应用领域:1. 几何学平方根在几何学中有许多应用,比如计算三角形的斜边长度、计算圆的半径、计算矩形的对角线长度等。

通过计算平方根,我们可以得到准确的数值结果,用于解决各种几何问题。

2. 物理学物理学中的许多公式和方程涉及到平方根的计算,比如牛顿第二定律、斯涅尔定律等。

通过对平方根的计算,我们可以解决物理学中的各种问题,如运动物体的速度、光的折射角度等。

3. 金融学金融学中的一些指标和模型也需要使用平方根进行计算,例如波动率的计算和风险管理模型中的计算。

平方根可以帮助金融从业者更准确地评估风险、制定决策和进行投资分析。

LDLT分解矩阵的算法改进平方根法

LDLT分解矩阵的算法改进平方根法

LDL T 分解矩阵的算法(改进平方根法)
1、 算法原理: 采用改进平方根法对上述对称正定矩阵A 重新分解如下:
T LDL A =
其中:L 为下三角矩阵(但对角元素为1),T L 为L 的转置矩阵;D 为对角矩阵;
⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣
⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---101110100000010110011,1211211,121 n n n n n n n n T k k k d d d d k k k LDL A == 2、 程序中的数组存储:
在程序中,待分解的数字A 为对称正定矩阵,只需存储下三角矩阵(包括对角元素),并且以行的顺序存储;
在LDLT(N,A)方法中,分解A 为三个矩阵L ,D ,L T ,由于L 和L T 为对称的,而且其对角元素均为1,所以这三个矩阵可以用一个矩阵存储,即下三角矩阵,其中对角元素为D 的元素,其他的为L 或L T 的元素;
特别,由于分解得到的结果矩阵与原矩阵A 结构相同,所以在计算过程中直接对A 进行操作,因此,最后计算完成返回结果即为A 。

matlab平方根法和改进平方根法求解线性方程组例题与程序文件

matlab平方根法和改进平方根法求解线性方程组例题与程序文件

(2)设对称正定阵系数阵线方程组12345678424024000221213206411418356200216143323218122410394334411142202531011421500633421945x x x x x x x x -⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎢⎥⎢⎥⎢---⎢⎥⎢⎥⎢--⎢⎥⎢⎢⎥⎣⎦⎣⎦⎣⎦⎥⎥⎥⎥ (1,1,0,2,1,1,0,2)T x *=--二、数学原理 1、平方根法解n 阶线性方程组Ax=b 的choleskly 方法也叫做平方根法,这里对系数矩阵A 是有要求的,需要A 是对称正定矩阵,根据数值分析的相关理论,如果A 对称正定,那么系数矩阵就可以被分解为的T A=L L •形式,其中L 是下三角矩阵,将其代入Ax=b 中,可得:T LL x=b 进行如下分解:T L xL by y ⎧=⎨=⎩ 那么就可先计算y,再计算x ,由于L 是下三角矩阵,是T L 上三角矩阵,这样的计算比直接使用A 计算简便,同时你应该也发现了工作量就转移到了矩阵的分解上面,那么对于对称正定矩阵A 进行Cholesky 分解,我再描述一下过程吧: 如果你对原理很清楚那么这一段可以直接跳过的。

设T A=L L •,即1112111112112122221222221212....................................n n n n n n nn n n nn nn a a a l l l l aa a l l l l a a a l l l l ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦其中,,1,2,...,ij ji a a i j n ==第1步,由矩阵乘法,211111111,i i a l a l l ==故求得111111,2,3,...i i a l l i n a === 一般的,设矩阵L 的前k-1列元素已经求出 第k 步,由矩阵乘法得112211k k kk kmkkik im km ik kkm m a l l a l l l l --===+=+∑∑, 于是11(2,3,...,n)1(),1,2,...kk k ik ik im km m kk l k l a l l i k k n l -=⎧=⎪⎪=⎨⎪=-=++⎪⎩∑ 2、改进平方根法在平方根的基础上,为了避免开方运算,所以用TLDL A =计算;其中,11122.........n d D D D d ⎤⎤⎡⎤⎥⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥===⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎢⎢⎥⎣⎦⎣⎣;得1121212212111111n n n n n d l l l d l A l l d ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦按行计算的L 元素及D 对元素公式 对于n i ,,2,1 =11(1,21)j ij ij ik jk k t a t l j i -==-=-∑…,./(1,2,)ij ij j l t d j ==…,i-1.11i i ii ik ikk d a t l -==-∑计算出LD T =的第i 行元素(1,2,i-1)ij t j =…,后,存放在A 的第i 行相置,然后再计算L 的第i 行元素,存放在A 的第行.D 的对角元素存放在A 的相应位置.对称正定矩阵A 按T LDL 分解和按T LL 分解计算量差不多,但TLDL 分解不需要开放计算。

java平方根算法

java平方根算法

java平方根算法==============一、概述----Java平方根算法是一个用于计算一个数字的平方根的算法。

在Java编程语言中,可以使用各种方法来实现平方根算法,其中一种常见的方法是使用牛顿迭代法。

本文档将介绍如何使用牛顿迭代法在Java中实现平方根算法。

二、算法原理------牛顿迭代法是一种常用的求解非线性方程的数值解法。

它通过不断地迭代逼近方程的解,从而得到精确的数值解。

对于平方根问题,可以使用牛顿迭代法来求解一个数字的平方根。

具体来说,对于一个数字x,可以使用以下公式进行迭代:x_{n+1} = x_n - \frac{x_n^2 - a}{2x_n}其中,a为输入数字,x_n为迭代过程中的当前值。

通过不断迭代,可以逐渐逼近a的平方根。

三、Java实现-------下面是一个简单的Java程序,使用牛顿迭代法实现平方根算法:```javapublic class SquareRootAlgorithm {public static void main(String[] args) {double number = 25.0; // 输入数字double epsilon = 0.00001; // 精度要求double guess = number / 2.0; // 初始猜测值double squareRoot = calculateSquareRoot(number, guess, epsilon);System.out.println("The square root of " + number + " is: " + squareRoot);}public static double calculateSquareRoot(double number, double guess, double epsilon) {double oldGuess = guess;while (Math.abs(guess * guess - number) > epsilon * guess * guess) { // 判断是否满足精度要求guess = (guess + number / guess) / 2.0; // 更新猜测值并继续迭代}return guess; // 返回最终的平方根值}}```这段代码首先定义了一个输入数字和精度要求,并初始化了初始猜测值。

平方根的算法

平方根的算法

平方根的算法平方根是数学中常见的运算之一,它的意义是求一个数的正平方根。

在日常生活中,我们经常需要计算平方根,比如计算房间的面积、计算某些物品的长度等等。

而计算平方根的方法也有很多种,下面介绍几种常见的算法。

1.牛顿迭代法牛顿迭代法是一种求函数零点的方法,它可以用来计算平方根。

该方法的基本思路是:从一个初始值开始,不断迭代,直到满足精度要求为止。

具体实现步骤如下:假设要求一个数x的平方根,先猜测一个初值y;计算y的平方与x之间的差值,记作d=y^2-x;如果d的绝对值小于某个精度要求,则停止迭代,返回y;否则,更新y的值为y-d/(2*y),然后回到第二步,继续迭代。

2.二分法二分法是一种比较简单的求平方根的方法,它的基本思路是:对于一个非负实数x,它的平方根y满足0<=y<=x。

因此可以将y的取值范围二分,然后逐步缩小,直到满足精度要求为止。

具体实现步骤如下:假设要求一个数x的平方根,先确定两个值low=0和high=x;计算mid=(low+high)/2,然后计算mid的平方与x之间的差值d=mid^2-x;如果d的绝对值小于某个精度要求,则停止迭代,返回mid;否则,如果d>0,则说明mid的平方大于x,因此将high更新为mid,然后回到第二步;否则,如果d<0,则说明mid的平方小于x,因此将low更新为mid,然后回到第二步。

3.近似公式除了上述两种算法之外,还有一些近似公式可以用来计算平方根。

其中比较常见的是以下两种公式:y=(x+a/x)/2,其中a是一个常数,通常取1;y=x/2+(a/x)/2,其中a是一个常数,通常取1。

以上是几种常见的求平方根的算法,不同的算法各有优缺点,选取合适的算法需要根据具体情况来决定。

同时,在进行计算时还需要注意精度问题,避免出现误差过大的情况。

线性方程组的平方根解法

线性方程组的平方根解法

浅析线性方程组的平方根解法在求解线性方程组时,直接解法有顺序高斯消元法、列主元高斯消元法、全主元高斯消元法、高斯约当消元法、消元形式的追赶法、LU 分解法、矩阵形式的追赶法,当我们遇到对称正定线性方程组时,我们就要用到平方根法(对称LLT 分解法)来求解,为了熟悉和熟练运用平方根法求解线性方程组,下面对运用平方根法求解线性方程组进行解析。

一、运用平方根法求解线性方程组涉及到的定理及定义我们在运用平方根法求解线性方程组时,要判定线性方程组Ax=b 的系数矩阵A 是否是对称正定矩阵,那么我们就要了解正定矩阵的性质和如下定理及定义:1、由线性代数知,正定矩阵具有如下性质:1) 正定矩阵A 是非奇异的2) 正定矩阵A 的任一主子矩阵也必为正定矩阵 3) 正定矩阵A 的主对角元素均为正数 4) 正定矩阵 A 的特征值均大于零 5) 正定矩阵A 的行列式必为正数定义一 线性方程组Ax=b 的系数矩阵A 是对称正定矩阵,那么Ax=b 是对称正定线性方程组。

定义二 如果方阵A 满足A=AT ,那么A 是对称阵。

2.1.4 平方根法和改进的平方根法如果A 是n 阶对称矩阵,由定理2还可得如下分解定理:定理2 若A 为n 阶对称矩阵,且A 的各阶顺序主子式都不为零,则A 可惟一分解为:A =LDLT ,其中L 为单位下三角阵,D 为对角阵。

证明 因为A 的各阶顺序主子式都不为零,所以A 可惟一分解为:A =LU 因为 ,所以可将 U 分解为:⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nn u u u U O 2211⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛11122211112M O ΛΛu u u u u u n nn n 1DU =其中 D 为对角矩阵,U1为单位上三角阵.于是:A =LDU1=L(DU1)因为A 为对称矩阵,所以,A =AT =U1TDTLT =U1T(DLT),由 A 的 LU 分解的惟一性即得:L =U1T ,即U1=LT ,故A =LDLT 。

平方根的算法

平方根的算法

平方根的算法平方根是指一个数的二次方根,即一个数的平方根是另一个数,例如9的平方根是3。

平方根在许多领域如计算机科学、物理学和工程学中都有广泛的应用。

在本文中,我们将介绍几种计算平方根的算法。

1. 牛顿迭代法牛顿迭代法是一种计算平方根的古老但有效的方法。

它是基于牛顿-莱布尼茨定理和泰勒级数展开来推导的。

该算法的基本思想是利用初始近似值逐步逼近平方根的准确值,直到达到所需精度。

具体实现过程如下:对于一个非负实数S,N为S平方根的一个近似值,令X = S / N,则N的一个更好的近似值是(N+X)/ 2。

在迭代过程中不断使用这个公式进行计算,直到达到所需的精度为止。

例如,我们想计算16的平方根,假设初始值N = 4,则:X = 16 / 4 = 4按此方法继续迭代,直到达到所需的精度为止。

这种方法通常需要做10-15次迭代,可以达到大约15个有效数字的精度。

2. 二分法二分法也是一种常用的计算平方根的算法。

该算法的基本思想是通过目标数的平方与当前猜测数值之间的比较来逐步逼近平方根。

假设我们要计算x的平方根。

我们可以将区间[0,x]分成两个部分:[0,x/2]和[x/2,x],然后将猜测值与这两个区间的中点比较,从而确定下一个猜测值。

猜测值为8,8的平方为64 > 16我们将区间修改为[0,8]我们的答案为4这种方法的迭代次数与目标数的大小相关。

它通常需要做log(N)次迭代,其中N是目标数的大小。

3. 立方根算法假设我们要计算x的平方根,我们可以将问题转化为求x^(1/3)的值。

将其表示为一个递推式:Xn+1 = Xn + (x - Xn^3) / (3 * Xn^2)从此递推式开始,我们可以逐渐逼近目标值。

例如,如果我们想计算1000的平方根,则:X0 = 10X2 = 10.333333 + (1000 - 10.333333^3) / (3 * 10.333333^2) = 10.3089524. 二次同余算法假设我们要计算数字x的平方根。

改进的平方根法例题和讲解

改进的平方根法例题和讲解

改进的平方根法例题和讲解1. 引言大家好呀!今天我们聊聊平方根法,特别是它的改进版。

可能有人听到“平方根”就想起了数学老师严肃的脸,甚至还有同学在黑板上挤眉弄眼的场景。

但是,别担心,我们今天不讨论那些复杂的公式和晦涩的定理,而是想让这个话题变得轻松点儿,像喝杯奶茶一样简单可口。

咱们就把这个看起来高大上的数学工具,变成一把“钥匙”,帮助我们打开那些难解的数学门。

2. 平方根法的基本概念2.1 什么是平方根法?首先,平方根法其实就是找一个数,让它自己乘以自己得到另一个数。

听起来是不是有点儿绕?别急,让我举个例子。

比如说,我们想找16的平方根,简单来说,就是找一个数,乘以它自己能得到16。

你猜对了,答案就是4,因为4乘4等于16。

这就是平方根法的核心思想,没啥复杂的,生活中随处可见。

2.2 改进的平方根法那么,改进的平方根法又是怎么一回事呢?就好比你在厨房做菜,原本按着食谱来,后来发现了一些小窍门,使得菜肴更美味。

平方根法也是如此!在传统的平方根计算中,我们可能得一步一步来,效率不高。

而改进版的平方根法,就是在此基础上,通过一些聪明的小技巧,提升我们的计算速度和准确性。

3. 实际应用中的例题3.1 例题一:计算一个小数的平方根让我们来看看一个实际的例子。

假设我们需要计算6的平方根。

传统的方法可能会让你用计算器,或者算个大半天。

不过,改进的平方根法给我们带来了新思路。

我们可以先找到接近的整数,比如2,因为2乘2等于4,距离6还挺近的。

然后,我们可以用一个很简单的公式:新的猜测 = 旧的猜测 + (目标数旧的猜测的平方) / (2 * 旧的猜测)。

举个例子,我们的旧猜测是2,那么就代入公式算一算:新的猜测 = 2 + (6 4) / (2 * 2),结果会是2.5。

接下来,把2.5代入同样的公式,重复几次,你会发现,答案越来越接近真正的平方根。

哎呀,这样一来,计算变得轻松许多,谁说数学就得像搬山一样艰难呢?3.2 例题二:找更大的平方根再来一个例子,我们计算一下50的平方根。

2-4平方根法与改进的平方根法

2-4平方根法与改进的平方根法

当a 3,即 a 3时
2
A能进行Cholesky分解
( 2) 2 (1) 1 ( 0) 0
(1) 1 ( 2) 3 (1) 2
( 0) 0 (1) 1 ( 2) 4
2
2 3
3
0 0 1 ~ L 0.50 1 0 0.67 1 0
~ L LD
1 2
a的全部顺序主子式detak0对称正定阵将对称正定阵a做lu分解uuiju11uijuii111u22unn记为a对称即记d12则仍是下三角阵定理设矩阵a对称正定则存在非奇异下三角阵使得
§2.4 平方根法与改进的平方根法

对称正定矩阵 平方根法 改进的平方根法
对称正定阵
定义 一个矩阵 A = ( aij )nn 称为对称阵,如果 aij = aji 。
i k 1, , n
方程组求解公式 y1 b1 k 1 yk bk lkj y j j 1 yn x n dn n yk xk d l jk x j j k 1 k
k 2,
,n
k n 1,
,1
思考:1.为什么引入平方根法与改进的平方根法? 2.能否用紧凑格式将对称正定矩阵进行
Cholesky分解和 LDLT分解?怎样分解?

设有方程组
2 1 0 x1 1 2 a x 2 0 a 2 x3
取值范围;
=
3 4 3
, n
计算顺序:l11 li1 i 2,3,
, n l22 li 2 i 3,
平方根法
Ax b
Ly b,
L xy

改进平方根法

改进平方根法

2012-2013(1)专业课程实践论文改进的平方根法王震0818180210 R数学08-2班张福贵0818180227 R数学08-2班一、算法理论在平方根的基础上,为了避免开方运算,所以用TLDL A=计算;其中,11122.........ndD D Dd⎤⎤⎡⎤⎥⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥===⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎢⎢⎥⎣⎦⎣⎣;得1121212212111111nnn n nd l ll d lAl l d⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦按行计算的L元素及D对元素公式对于ni,,2,1=步111(1,21)jij ij ik jkkt a t l j i-==-=-∑…,.步2 /(1,2,)ij ij jl t d j==…,i-1.步311ii ii ik ikkd a t l-==-∑计算出LDT=的第i行元素(1,2,i-1)ijt j=…,后,存放在A的第i行相置,然后再计算L的第i行元素,存放在A的第i行.D的对角元素存放在A的相应位置.例如11213141112122324221221231323343313233132341424344414243444142434a a a a d d a a a a l d ld A a a a a l l d l l d a a a a t t t t l l l d ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=→→⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦对称正定矩阵A 按T LDL 分解和按T LL 分解计算量差不多,但T LDL 分解不需要开放计算。

求解b Ly =, y x DL T =的计算公式分别如步4、步5所述公式。

步41111,i ii ik h k y b y b l y ===⎧⎪⎨=-⎪⎩∑ ()2,....,i n = 步51/,/n n n n ii i ki k k i x y d x y d l x ===⎧⎪⎨=-⎪⎩∑ ()1,....,2,1i n =-。

改进的平方根法解线性方程组

改进的平方根法解线性方程组
/*改进的平方根法解线性方程组*/
# include <stdio.h>
# define N 3 /*给定方程组的阶数*/
void main ( )
{
void input_2 (float a[N][N]); /*函数声明*/
void input_1 (float a[N]);
void output_1 (float a[N]);
float a[N][N]; /*定义A,b */
float b[N];
printf ("矩阵A please input data:\n");
input_2 (a); /*调用二维数组输入函数*/
printf ("向量b please input data:\n");
input_1 (b); /*调用一维数组输入函数*/
{
t=l[i][k]*d[k]*l[j][k];
s=s+t;
}
l[i][j]=(a[i][j]-s)/d[j];
s=0;
}
for (k=0;k<i;k++)
{
t=l[i][k]*l[i][k]*d[k];
s=s+t;
}
d[i]=a[i][i]-s;
s=0;
}
float y[N]; /*求解Ly=b */
{
for (k=i+1;k<N;k++)
{
t=l[k][i]*x[k];
s=s+t;
}
x[i]=y[i]/d[i]-s;
s=0;
}
printf ("方程组的解为:\n");

用C语言实现改进平方根法

用C语言实现改进平方根法

用C语言实现改进平方根法改进平方根法是一种用于计算平方根的算法,它通过不断逼近平方根的值,最终得到一个接近于真实平方根的近似值。

这一算法是数值计算领域中非常重要的一个应用,可用于提高计算精度和效率。

改进平方根法的基本思想是根据牛顿迭代法推导出的迭代公式,通过迭代计算逼近平方根的值。

假设要求解的平方根为x,我们可以将其表示为迭代公式x=(x+n/x)/2,其中n是待求平方根的数值。

通过不断迭代计算,x的值越来越接近真实平方根。

下面是用C语言实现改进平方根法的代码:```c#include <stdio.h>double sqrtImproved(double n)double x = n; // 初始猜测值while (1)double y = (x + n/x) / 2; // 迭代计算,得到新的x值if (fabs(y - x) < delta) // 判断是否满足精度条件return y;x=y;//更新x值,进行下一次迭代}int maidouble n;printf("请输入一个正实数:");scanf("%lf", &n);double result = sqrtImproved(n);printf("改进平方根法计算结果:%.6lf\n", result);return 0;```在上述代码中,我们先定义了一个`sqrtImproved`函数,用于实现改进平方根法。

该函数接受一个正实数作为参数,返回其平方根的近似值。

在函数中,使用一个`while`循环来不断迭代计算平方根的近似值。

判断精度条件的方法是计算当前迭代得到的`y`值与上一次迭代得到的`x`值之差的绝对值是否小于给定的精度。

在`main`函数中,我们通过用户输入获取待求平方根的数值,然后调用`sqrtImproved`函数来进行计算并输出结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录摘要 (2)0 引言 (3)1 预备知识 (3)1.1 TLL分解理论 (3)1.2 Cholesky分解法 (4)1.3 算法描述 (5)2改进的平方根法 (6)3TLDL分解算法描述 (7)4 应用举例 (8)5 程序实现 (10)5.1 程序码源 (10)5.2 实例计算 (12)6 结束语 (13)参考文献 (14)致谢 (15)改进的平方根法及其程序实现摘要: 针对对称正定方程组的解法,本文先对Cholesky分解法进行了分析研究,在此基础上给出了改进的平方根法(即TLDL分解法),此方法有效地避免了原平方根法开方运算所带来的误差和不便,并通过算法描述、实例计算,用C程序实现了TLDL分解,进一步提高了矩阵运算的速度和精度.关键词: 对称正定矩阵, 平方根法, TLDL分解, 算法Improved Methods of Square Root and Realizationof Its ProgramAbstract: Aiming at studying solutions of symmetric positive definition matrix in linear equations. Initially, the text has conducted a series of analyses and researches towards decomposition proposed by Cholesky. Then based on theses researches and analyses, it offers the improved methods of square–root (also called TLDL decom- position), which effectively avoid some errors and inconvenience brought by the process of extracting root. At the same time, it achieves the TLDL decomposition through the means of algorithm description, example calculation as well as applicat- ion of C program, further enhancing the speed and accuracy in matrix operation.Key words: Symmetric positive definition matrix, method of square root,TLDL decomposition, algorithm0 引言很多工程中的科学计算,例如应用有限元法解结构力学问题时,最后往往归结为求解系数矩阵为对称正定方程组解的问题.由于对称正定矩阵各阶顺序主子式以及全部的特征值均大于零, 这种特征也使得其三角分解具有更为简单的形式, 不同的分解也导出了一些不同的解法. 平方根法(即Cholesky 分解法), 就是利用对称正定矩阵的三角分解而得到的求解对称正定方程组的一种有效方法, 其计算量和存储量约为普通消去法的一半, 且无需选主元就能求得较为精确的数值解, 但由于在平方根法中含有多次开方运算, 因此给计算带来了许多不便, 而在原平方根法的基础上, 给出改进的平方根法(即T LDL 分解法), 成功避免了开方运算带来的的麻烦, 因此在各种工程计算中应用更为广泛.1 预备知识1.1 T LL 分解理论定理 1.1(矩阵的LU 分解定理) 设A 为n 阶矩阵, 如果A 的顺序主子式0(1,2,,1)i D i n ≠=- , 则A 可分解为一个单位下三角矩阵L 和一个上三角矩阵U 的乘积, 且这种分解是唯一的.定理1.2(对称正定矩阵的T LL 分解定理) 设A 为n 阶对称正定矩阵, 则必存在非奇异下的三角矩阵L , 使T A LL = , (1.1) 并且当L 的对角线元素均为正数时, 这种分解是唯一的.证明 因为A 对称正定, 则它的各阶顺序主子式均大于零. 由LU 分解定理可知, 矩阵A 存在唯一的Doolitle 分解, 即 1A LU = 其中, 1L 为单位下三角矩阵, U 为上三角矩阵. 记 D =diag 11(,,)nn u u ,1P D U -=, 则P 为单位上三角矩阵, 且1A L DP =. 由A 的对称性有T A A =, 可得 11T T T T A P D L L DP A ===由于T P 为单位下三角矩阵, T D D =, 从而由分解的唯一性可知, 1T P L =, 于是 11T A L DL =显然有110,(1,2,)k k k k k kk A L U L U u u k n ==⋅=>= ,这样0kk u >,(1,2,)k n = , 故可令 12D =diag则111122221111()()T TT A L D D L L D L D LL ===其中,121L L D =为非奇异的下三角矩阵. 而知限定L 的对角元素为正数时,这种分解是唯一的, 定理得证.1.2 Cholesky 分解法设A 为对称正定矩阵, 由上面T LL 分解定理可知, 则存在一个实的非奇异下三角矩阵L , 使T A LL =, 当限定L 的对角线元素为正数时, 这时A 的分解是唯一的.设11212212n n nn l l l L l l l ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ (1.2) 其中, 0(1,2,,)ii l i n >= , 0()ij l i j =<.由T A LL =比较A 和T LL 的对应元素, 可求得L 的元素ij l 如下:由 21111a l =,1111i i a l l =, 得11l =,1111/,1,2,,i i l a l i n == .假设L 的第1k -列元素已经求得, 下面求L 的第k 列元素,,,ik l i k n = . 注意到 11k ik ij kj ik kk j a l l l l -==+∑,得计算公式, 对1,2,,j n = , 有121/2111(),(1,2,,)()/,(,1,,1)k kk kk kj j k ik ik ij kj kkj l a l k n l a l l l k n n -=-=⎧=-=⎪⎪⎨⎪=-=-⎪⎩∑∑ (1.3) 由此可逐行求得L 的全部元素, 从而由Ly b =及T L x y =得到求解方程组Ax b =的公式111()/,(1,2,,)()/,(,1,,1)k k k kj j kk j nk k jk j kk j k y b l y l k n x y l x l k n n -==+⎧=-=⎪⎪⎨⎪=-=-⎪⎩∑∑ (1.4) 上述方法称为Cholesky 分解法. 由于计算的对角线元素要作n 次开平方运算, 故Cholesky 分解法又称平方根法.1.3 算法描述步1 输入对称正定矩阵A 和右端向量b ; 步2 Cholesky 分解:11111111,/,2,,,i i d t a l a d i n ==== 对2,,k n = 计算: 11,k k kk kj kj j d a t l -==-∑11,/,1,,;k ik ik ij kj ik ik k j t a t l l t d i k n -==-==+∑步3 用向前消去法解下三角方程组Ly b =: 11y b =,对2,,k n = 计算 11k k k kj j j y b l y -==-∑;步4 解对角形方程组Dz y =:对1,,k n = 计算 /k k k z y d =;步5 用回代法解上三角形方程组T L x z =:n n x z =,对1,,1k n =- 计算 1nk k jkj j k x z lx =+=-∑.不难验证Cholesky 分解法的乘除计算总量约为32/6()n O n +, 为一般矩阵LU 分解计算量的一半. 虽然如此, 但其增加的n 次开平方运算是非常不利的,下面引出改进的平方根法—T LDL 分解法.2 改进的平方根法为了避免开方运算, 对A 作LU 分解, 即A LU =, 则111212122212111n n n n nn u u u l u u A l l u ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦/ 提出U 矩阵的对角元素 / 121112122212111111n n n n nn u u u l u u l l u ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦由A 对称正定, 可得0ii u >, 令111222nn n u d u d D u d ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 可证1212111n n Tu u u L ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦即T A LDL =.1121212212111111n n n n n d l l l d l A l l d ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ (1.5) L 是对角元素为1的单位下三角矩阵.对矩阵A 作LU 分解, 共计算2n 个矩阵元素; 对称矩阵的T LDL 分解, 只需计算(1)2n n -个元素, 减少了近一半的工作量. 借助LU 分解计算公式, 容易得到T LDL 分解计算公式.设A 有LU 分解形式111211~212221211()1n n T n n n d d l d l l d d l A L DL LU l l d ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥===⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦其中~ij i ij i ji u d l d l ==.在分解中可套用LU 分解公式, 只要计算下三角矩阵L 和D 的对角元素k d .计算中只需要保存()ij L l =的元素, T L 的i 行j 列的元素用L 的ji l 表示. 由于对称正定矩阵的各阶主子式均大于零, 直接调用LU 分解公式可完成T LDL 分解计算.对于1,,k n = ,有11~~11k k k kk kk kj jk kk kj j jk j j d u a l u a l d l --====-=-∑∑121k k kk j kj j d a d l -==-∑ (1.6)11~~11()/()/k k ik ik ij jk kk ik j ij kj k j j l a l u u a d l l d --===-=-∑∑11()/,1,,k ik ik j ij kj k j l a d l l d i k n -==-=+∑ . (1.7)3 T LDL 分解算法描述步1 输入方程组阶数n 、系数矩阵A 和常数项b . 步2 FOR :1k = TO n ;121:k k kk j kj j d a d l -==-∑;FOR :1i k =+ TO n ; 11:()/k ik ik j ij kj k j l a d l l d -==-∑;步3 解方程组的步骤从略.由()T L DL x b =, 解方程组Ax b =可分为三步完成: (1)解方程组Lz b =, 其中T z DL x =. 11,1,2,,i i i ij j j z b l z i n -==-=∑ (1.8)(2)解方程组Dy z =, 其中T y L x =. /,1,2,,i i i y z d i n == (1.9)(3)解方程组T L x y =. 1,,1,,1ni i jij j i x y lx i n n =+=-=-∑ . (1.10)可以看出, 改进后的T LDL 分解乘除运算量约为32/6()n O n +, 计算过程也无需开方运算, 使得其运算更加简单易行, 因此改进后的T LDL 分解法相对于原平方根法具有更好的实效性和可行性.4 应用举例例 试用T LDL 分解法求解方程组123164844543842210x x x -⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥-=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦ 解 由T A LDL =, 可得Ax b =的方程组T LDL x b =, 令T DL x y =, 则Ly b =.计算步骤:(1)将A 直接分解为T A LDL =, 求出,L D ; (2)求解方程组Ly b =; (3)求解方程组1T L x D y -=. 现有1.16d =, 1214d l =, 2114l =, 1318d l =, 3112l =2122.154d d l =-=, 21312.3214d l d l l =--, 3232l =-, 39d =即由Ly b =可得1231411341013122y y y ⎡⎤⎢⎥-⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥-⎣⎦解得1234418y y y -⎡⎤⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 由1T L x D y -=有21311212323132311648145411842211l l d A l d l l l d ⎡⎤⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=-=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦⎣⎦111413122L ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥-⎣⎦1649D ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦1231111424311221x x x ⎡⎤⎡⎤⎢⎥-⎢⎥⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥-=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎢⎥⎢⎥⎣⎦⎢⎥⎣⎦解得1232494x x x ⎡⎤⎢⎥⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦-⎢⎥⎣⎦5 程序实现5.1 程序码源应用TLDL 分解法解线性方程组, 为了便于计算, 编写如下程序, 通过计算机来实现线性方程组的求解, 简洁方便. 具体程序如下: Purpose :T LDL 分解法解方程组 # include <stdio.h> # include <math.h># define MAX_N 20 //(x_i,y_i)的最大维数//int main() { int n; int i,j,k;int mi;double mx,tmp;static double a[MAX_N][MAX_N],b[MAX_N],x[MAX_N],y[MAX_N],z[MAX_N];static double L[MAX_N][MAX_N],d[MAX_N];//输入Ax=b的维数//printf("\n Input n value(dim of Ax=b):");scanf("%d",&n);if(n>MAX_N){printf("The input n is larger then 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;}//输入Ax=b的A矩阵//printf("Now input the matrix a(i,j),i,j=0,…, %d:\n", n-1);for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%lf",&a[i][j]);//输入b矩阵//printf("Now input the matrix b(i),i=0,…, %d:\n", n-1);for(i=0;i<n;i++)scanf("%lf",&b[i]);for(i=0;i<n;i++)L[i][i]=1; //u矩阵对角元素为1//for(k=0;k<n;k++){d[k]=a[k][k]; //计算d_i//for(j=0;j<=k-1;j++)d[k]-=(L[k][j] *d[j]*L[k][j]);for(i=k+1;i<n;i++) //计算L矩阵// {L[i][k]=a[i][k];for(j=0;j<=k-1;j++)L[i][k]-=(L[i][j] *d[j]*L[k][j]);L[i][k]/=d[k];}}for(i=0;i<n;i++) //求解L′z=b的z// {z[i]=b[i];for(j=0;j<=i-1;j++)z[i]-=L[i][j]*z[j];}for(i=0;i<n;i++) //求解Dy=z的y//y[i]=z[i]/d[i];for(i=n-1;i>=0;i--) //求解Ly=x// {x[i]=y[i];for(j=i+1;j<n;j++)x[i]-=L[j][i]*x[j];}printf("Solve … x_i=\n"); //输出//for(i=0;i<n;i++)printf("%f\n",x[i]);return 0;}5.2 实例计算用T LDL 分解法求解方程组:123164844543842210x x x -⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥-=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦⎣⎦ 程序输入输出Input n value(dim of Ax=b): 3Now input the matrix a(i,j),i,j=0, (2)16 4 8 4 5 -4 8 -4 22Now input the matrix b(i),i=0, (2)-4 3 10Solve … x_i=2.0000004.000000-2.2500006 结束语从矩阵分解角度看, T LDL 分解法与消元法本质上没有多大的区别, 其基本思想还是通过等价变换将线性方程组化为结构简单、易于求解的形式. 在实际问题中经常遇到对称正定矩阵方程组的求解问题, 对于这种具有特殊性质的系数矩阵, 采用改进的平方根法是一种行之有效的计算方法, 它是在普通消去法的基础上建立起来的, 算法思想虽有些复杂, 但其计算量约为普通消去法的一半, 且有效地避免了开方运算所带来的不便, 因此改进后的T LDL 分解法相对于原平方根法具有更好的实效性和可行性. 并通过C 程序求解使得这类问题变得更加简单易行, 在大量工程计算中有着广泛而重要的应用.参考文献[1] 刘元亮. Matlab 在对称正定矩阵的改进平方根分解法中的应用[J]. 湖南: 怀化学院学报. 2004,(02).[2] 郭丽杰, 周硕, 秦万广. 对称矩阵的改进Cholesky 分解在特征值问题中的应用[J]. 吉林: 东北电力学院学报. 2003,(02).[3] 杜廷松,沈艳君,覃太贵.数值分析及实验[M].北京:科学出版社.2007.[4] 肖筱南,赵来军,党林立.数值计算方法与上机实习指导[M].北京:北京大学出版社. 2004.[5] 马昌凤,林伟川.现代数值计算方法[M].北京: 科学出版社.2008.[6] 张韵华,奚梅成,陈长松.数值计算方法与算法[M].北京:科学出版社.2000.[7] 李庆扬,王能超,易大义.数值分析(4版)[M].武汉:华中科技大学出版社.2006.[8]严克明,欧志英,刘树群.数值计算基础[M].甘肃:甘肃人民出版社.2006.[9] Ferenc Szidsrovzky, Sidney Yokowitz. Principles and procedures of numerical analysis[M].上海:上海科学技术文献出版社.1982.[10] Rainer Kress. Numerical analysis[M].北京:世界图书出版社.2003.致谢本论文经过将近半年的努力即将告以尾声, 从论文的选题到最后完稿, 整个过程都经过了认真地考虑、仔细地查阅和细心地修改. 在此, 我首先要感谢我的导师郭晓斌老师, 不管是我的论文选题还是论文的撰写, 以及资料的查阅等各方面, 他都给了我莫大的帮助与启发, 尤其是在论文的几次修改过程中, 郭老师以他广博的专业学识、严谨的治学精神和他耐心的指导态度, 才使我的论文能顺利完成. 谨再次向郭老师致以崇高的敬意和诚挚的感谢. 也祝愿郭老师身体健康、工作顺利, 在学术研究上取得更加辉煌的成就, 为更多的学子导航.同时, 我也要对给予本论文参考文献的所有学术专家和老师致以真挚的谢意, 是他们出版的书籍与发表的学术论文给了我很大的启示与指导, 才将论文完成.其次, 在即将毕业之际, 我要感谢数信学院所有的老师对我的细心教育与培养, 让我在四年的学习生涯中不仅学到了扎实的专业知识, 而且他们的言传身教使我受益匪浅, 他们严谨的治学态度和耐心教导学生的博爱精神也是我永远学习的榜样, 并将积极影响着我今后的学习和工作.最后, 我还要再次感谢我的母校——西北师范大学给了我发展的平台, 感谢各位老师四年来对我的耐心教导和栽培.张登科 2011年5月。

相关文档
最新文档