MATLAB解决数值分析问题

合集下载

Matlab中常见的数值计算问题及解答

Matlab中常见的数值计算问题及解答

Matlab中常见的数值计算问题及解答Matlab是一款强大的科学计算软件,被广泛应用于工程、物理、数学等领域的数值计算和数据分析。

然而,由于其高度灵活和多样化的功能,使用者可能会遇到一些数值计算问题。

在本文中,我们将讨论一些在Matlab中常见的数值计算问题,并提供解答。

1. 数值稳定性在进行数值计算时,一个重要的问题是数值方法的稳定性。

数值不稳定性可能导致计算结果不准确,甚至无法得到有意义的结果。

为了解决这个问题,我们可以采取以下措施:(1) 使用兼容的数值方法:在选择数值方法时,应考虑到数值方法是否适用于问题的特性和约束条件。

例如,对于矩阵运算,可以使用特殊的数值方法,如LU分解或QR分解,以提高计算的稳定性。

(2) 限制数值范围:在进行计算之前,可以通过对数据进行归一化或缩放,将数据限制在一个合理的范围内。

这样可以减小计算中的数值误差,并提高计算的稳定性。

2. 数值误差数值计算中常常会出现数值误差。

这些误差可能来自于浮点运算的舍入误差,计算中的截断误差,或者数值方法的近似误差。

为了最小化数值误差,可以采取以下措施:(1) 使用高精度计算:Matlab提供了许多高精度计算的工具,如sym工具箱。

通过使用这些工具,可以进行更精确的计算,并减小数值误差的影响。

(2) 选择适当的数值方法:在选择数值方法时,应考虑到这些方法是否适用于所求解的问题。

例如,在解决微分方程时,可以根据方程的特性选择合适的数值方法,如欧拉法、龙格-库塔法等。

3. 数值积分在数值计算中,求解积分是一项重要的任务。

然而,对于复杂的函数或高维问题,常规的积分方法可能无法得到准确的结果。

为了解决这个问题,可以采取以下措施:(1) 适当选择积分方法:Matlab提供了多种积分方法,如梯形法则、辛普森法则等。

在进行数值积分时,可以根据问题的特性选择适当的积分方法,以提高计算的准确性。

(2) 使用自适应积分方法:自适应积分方法可以根据需要对积分区域进行自适应划分,以提高计算的准确性。

数值分析matlab实验报告

数值分析matlab实验报告

数值分析matlab实验报告数值分析MATLAB实验报告引言:数值分析是一门研究利用计算机进行数值计算和解决数学问题的学科。

它在科学计算、工程技术、金融等领域中有着广泛的应用。

本实验旨在通过使用MATLAB软件,探索数值分析的基本概念和方法,并通过实际案例来验证其有效性。

一、插值与拟合插值和拟合是数值分析中常用的处理数据的方法。

插值是通过已知数据点之间的函数关系,来估计未知数据点的值。

拟合则是通过一个函数来逼近一组数据点的分布。

在MATLAB中,我们可以使用interp1函数进行插值计算。

例如,给定一组离散的数据点,我们可以使用线性插值、多项式插值或样条插值等方法,来估计在两个数据点之间的未知数据点的值。

拟合则可以使用polyfit函数来实现。

例如,给定一组数据点,我们可以通过最小二乘法拟合出一个多项式函数,来逼近这组数据的分布。

二、数值积分数值积分是数值分析中用于计算函数定积分的方法。

在实际问题中,往往无法通过解析的方式求得一个函数的积分。

这时,我们可以使用数值积分的方法来近似计算。

在MATLAB中,我们可以使用quad函数进行数值积分。

例如,给定一个函数和积分区间,我们可以使用quad函数来计算出该函数在给定区间上的定积分值。

quad函数使用自适应的方法,可以在给定的误差限下,自动调整步长,以保证积分结果的精度。

三、常微分方程数值解常微分方程数值解是数值分析中研究微分方程数值解法的一部分。

在科学和工程中,我们经常遇到各种各样的微分方程问题。

而解析求解微分方程往往是困难的,甚至是不可能的。

因此,我们需要使用数值方法来近似求解微分方程。

在MATLAB中,我们可以使用ode45函数进行常微分方程数值解。

例如,给定一个微分方程和初始条件,我们可以使用ode45函数来计算出在给定时间范围内的解。

ode45函数使用龙格-库塔方法,可以在给定的误差限下,自动调整步长,以保证数值解的精度。

结论:本实验通过使用MATLAB软件,探索了数值分析的基本概念和方法,并通过实际案例验证了其有效性。

如何使用Matlab解决数学问题

如何使用Matlab解决数学问题

如何使用Matlab解决数学问题使用Matlab解决数学问题引言:数学作为一门基础学科,广泛应用于各个学科领域。

而Matlab作为一款数学软件,拥有强大的计算能力和丰富的函数库,成为了数学问题解决的得力工具。

本文将介绍如何使用Matlab解决数学问题,并通过实例来展示其强大的功能和灵活性。

一、Matlab的基本使用方法1. 安装和启动Matlab首先,我们需要从官方网站下载并安装Matlab软件。

安装完成后,打开软件即可启动Matlab的工作环境。

2. 变量和运算符在Matlab中,变量可以用来存储数据。

我们可以通过赋值运算符“=”将数值赋给一个变量。

例如,可以使用“a=5”将数值5赋给变量a。

Matlab支持常见的运算符,如加、减、乘、除等,可以通过在命令行输入相应的表达式进行计算。

3. Matirx和向量的操作Matlab中,Matrix和向量(Vector)是常用的数据结构。

我们可以使用方括号将数值组成的矩阵或向量输入Matlab,比如“A=[1 2; 3 4]”可以创建一个2x2的矩阵。

4. 函数和脚本Matlab提供了丰富的内置函数和函数库,可以通过函数来解决各种数学问题。

同时,我们还可以自己编写函数和脚本。

函数用于封装一段可复用的代码,而脚本则是按照特定的顺序执行一系列的命令。

二、解决线性代数问题1. 线性方程组求解Matlab提供了“solve”函数用于求解线性方程组。

例如,我们可以使用“solve([2*x + y = 1, x + 3*y = 1], [x, y])”来求解方程组2x + y = 1和x + 3y = 1的解。

2. 矩阵运算Matlab提供了丰富的矩阵运算函数,如矩阵的加法、乘法、转置等。

通过这些函数,我们可以快速进行矩阵运算,解决线性代数问题。

三、解决数值计算问题1. 数值积分对于某些无法解析求解的积分问题,Matlab可以通过数值积分方法求得近似解。

Matlab提供了“integral”函数用于数值积分,我们只需要给出被积函数和积分区间即可。

Matlab中常见数据处理中的错误与解决方法

Matlab中常见数据处理中的错误与解决方法

Matlab中常见数据处理中的错误与解决方法在科学研究和工程领域中,数据处理是一个非常重要的环节。

Matlab作为一种常用的数学软件工具,被广泛应用于数据处理和分析。

然而,由于操作失误或者对Matlab不够熟悉,常常出现一些常见的错误。

本文将介绍一些常见的错误,并提供相应的解决方法,以帮助读者更加高效地使用Matlab进行数据处理。

错误一:维度不匹配在进行矩阵运算或者数据处理时,经常会遇到维度不匹配的错误。

这可能是因为输入数据的维度不一致,或者在操作过程中没有按照预期进行维度变换。

解决这个问题的方法是使用Matlab的函数reshape(),可以根据需要将数据进行维度变换,使其匹配。

错误二:数组越界在处理数组或矩阵时,经常会出现数组越界的错误。

这通常是由于索引值超过了数据的有效范围所致。

解决这个问题的方法是在进行索引操作前,先检查索引值是否超过了数组的范围,可以使用函数size()和length()获取数组的大小,然后进行合理的判断和处理。

错误三:代码逻辑错误在编写Matlab程序时,常常会遇到代码逻辑错误。

这可能是由于错误的条件判断、错误的循环控制或者错误的变量使用所致。

解决这个问题的方法是仔细检查代码的逻辑,确保条件判断和循环控制的正确性,同时进行适当的变量命名和使用,使程序的逻辑结构清晰可读。

错误四:数据格式转换问题在进行数据处理时,可能需要进行不同格式的数据之间的转换,比如将字符串转换为数值型数据。

错误的数据格式转换会导致程序出错或者得到错误的结果。

解决这个问题的方法是使用Matlab提供的函数str2num()、num2str()等,根据需要进行正确的格式转换,避免数据类型不匹配导致的错误。

错误五:数值精度问题在进行数值计算时,由于浮点数的精度限制,可能会出现数值计算结果不准确的问题。

例如,两个浮点数相等时会出现不相等的情况。

解决这个问题的方法是使用Matlab提供的函数eps()进行浮点数的比较,或者采用更加精确的数值计算方法,如符号计算工具箱。

matlab实现数值分析插值及积分

matlab实现数值分析插值及积分

数值分析学院:计算机专业:计算机科学与技术班级:xxx学号:xxx姓名:xxx指导教师:xxx数值分析摘要:数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。

在实际生产实践中,常常将实际问题转化为数学模型来解决,这个过程就是数学建模。

学习数值分析这门课程可以让我们学到很多的数学建模方法。

分别运用matlab数学软件编程来解决插值问题和数值积分问题。

题目中的要求是计算差值和积分,对于问题一,可以分别利用朗格朗日插值公式,牛顿插值公式,埃特金逐次线性插值公式来进行编程求解,具体matlab代码见正文。

编程求解出来的结果为:P4x=x4+1。

其中Aitken插值计算的结果图如下:对于问题二,可以分别利用复化梯形公式,复化的辛卜生公式,复化的柯特斯公式编写程序来进行求解,具体matlab代码见正文。

编程求解出来的结果为:0.6932其中复化梯形公式计算的结果图如下:问题重述问题一:已知列表函数表格分别用拉格朗日,牛顿,埃特金插值方法计算P4x 。

问题二:用复化的梯形公式,复化的辛卜生公式,复化的柯特斯公式计算积分121xdx ,使精度小于5×10-5。

问题解决问题一:插值方法对于问题一,用三种差值方法:拉格朗日,牛顿,埃特金差值方法来解决。

一、拉格朗日插值法:拉格朗日插值多项式如下:首先构造1+n 个插值节点n x x x ,,,10 上的n 插值基函数,对任一点i x 所对应的插值基函数)(x l i ,由于在所有),,1,1,,1,0(n i i j x j +-=取零值,因此)(x l i 有因子)())(()(110n i i x x x x x x x x ----+- 。

又因)(x l i 是一个次数不超过n 的多项式,所以只可能相差一个常数因子,固)(x l i 可表示成:)())(()()(110n i i i x x x x x x x x A x l ----=+-利用1)(=i i x l 得:)())(()(1110n i i i i i i x x x x x x x x A ----=+-于是),,2,1,0()())(()()())(()()(110110n i x x x x x x x x x x x x x x x x x l n i i i i i i n i i i =--------=+-+-因此满足i i n y x L =)( ),2,1,0(n i =的插值多项式可表示为:∑==nj j j n x l y x L 0)()(从而n 次拉格朗日插值多项式为:),,2,1,0()()(0n i x l y x L nj i j j i n ==∑=matlab 编程:编程思想:主要从上述朗格朗日公式入手:依靠循环,运用poly ()函数和conv ()函数表示拉格朗日公式,其中的poly (i )函数表示以i 作为根的多项式的系数,例如poly (1)表示x-1的系数,输出为1 -1,而poly (poly (1))表示(x-1)*(x-1)=x^2-2*x+1的系数,输出为1 -2 1;而conv ()表示多项式系数乘积的结果,例如conv (poly (1),poly (1))输出为1 -2 1;所以程序最后结果为x^n+x^n-1+……+x^2+x+1(n 的值据结果的长度为准)的对应系数。

数值分析中求解非线性方程的MATLAB求解程序

数值分析中求解非线性方程的MATLAB求解程序

数值分析中求解非线性方程的MATLAB求解程序1. fzero函数:fzero函数是MATLAB中最常用的求解非线性方程的函数之一、它使用了割线法、二分法和反复均值法等多种迭代算法来求解方程。

使用fzero函数可以很方便地求解单变量非线性方程和非线性方程组。

例如,要求解方程f(x) = 0,可以使用以下语法:``````2. fsolve函数:fsolve函数是MATLAB中求解多维非线性方程组的函数。

它是基于牛顿法的迭代算法来求解方程组。

使用fsolve函数可以非常方便地求解非线性方程组。

例如,要求解方程组F(x) = 0,可以使用以下语法:``````3. root函数:root函数是MATLAB中求解非线性方程组的函数之一、它采用牛顿法或拟牛顿法来求解方程组。

使用root函数可以非常方便地求解非线性方程组。

例如,要求解方程组F(x) = 0,可以使用以下语法:``````4. vpasolve函数:vpasolve函数是MATLAB中求解符号方程的函数。

它使用符号计算的方法来求解方程,可以得到精确的解。

vpasolve函数可以求解多变量非线性方程组和含有符号参数的非线性方程。

例如,要求解方程组F(x) = 0,可以使用以下语法:```x = vpasolve(F(x) == 0, x)```vpasolve函数会返回方程组的一个精确解x。

5. fsolve和lsqnonlin结合:在MATLAB中,可以将求解非线性方程转化为求解最小二乘问题的形式。

可以使用fsolve函数或lsqnonlin函数来求解最小二乘问题。

例如,要求解方程f(x) = 0,可以将其转化为最小二乘问题g(x) = min,然后使用fsolve或lsqnonlin函数来求解。

具体使用方法可以参考MATLAB官方文档。

6. Newton-Raphson法手动实现:除了使用MATLAB中的函数来求解非线性方程,还可以手动实现Newton-Raphson法来求解。

数值分析matlab实验报告

数值分析matlab实验报告

数值分析matlab实验报告《数值分析MATLAB实验报告》摘要:本实验报告基于MATLAB软件进行了数值分析实验,通过对不同数学问题的数值计算和分析,验证了数值分析方法的有效性和准确性。

实验结果表明,MATLAB在数值分析领域具有较高的应用价值和实用性。

一、引言数值分析是一门研究利用计算机进行数值计算和分析的学科,其应用范围涵盖了数学、物理、工程等多个领域。

MATLAB是一种常用的数值计算软件,具有强大的数值分析功能,能够进行高效、准确的数值计算和分析,因此在科学研究和工程实践中得到了广泛的应用。

二、实验目的本实验旨在通过MATLAB软件对数值分析方法进行实验验证,探究其在不同数学问题上的应用效果和准确性,为数值分析方法的实际应用提供参考和指导。

三、实验内容1. 利用MATLAB进行方程求解实验在该实验中,利用MATLAB对给定的方程进行求解,比较数值解和解析解的差异,验证数值解的准确性和可靠性。

2. 利用MATLAB进行数值积分实验通过MATLAB对给定函数进行数值积分,比较数值积分结果和解析积分结果,验证数值积分的精度和稳定性。

3. 利用MATLAB进行常微分方程数值解实验通过MATLAB对给定的常微分方程进行数值解,比较数值解和解析解的差异,验证数值解的准确性和可靠性。

四、实验结果与分析通过对以上实验内容的实际操作和分析,得出以下结论:1. 在方程求解实验中,MATLAB给出的数值解与解析解基本吻合,验证了MATLAB在方程求解方面的高准确性和可靠性。

2. 在数值积分实验中,MATLAB给出的数值积分结果与解析积分结果基本吻合,验证了MATLAB在数值积分方面的高精度和稳定性。

3. 在常微分方程数值解实验中,MATLAB给出的数值解与解析解基本吻合,验证了MATLAB在常微分方程数值解方面的高准确性和可靠性。

五、结论与展望本实验通过MATLAB软件对数值分析方法进行了实验验证,得出了数值分析方法在不同数学问题上的高准确性和可靠性。

MATLAB在数值分析中的应用

MATLAB在数值分析中的应用

MATLAB在数值分析中的应用
matlab是一种高级计算及可视化软件,在数值分析方面有着广泛的应用。

其特点是完整的数学和统计功能,强大的可视化和计算能力,易于使用的环境和脚本语言,使得matlab在数值分析领域变得非常流行。

首先,matlab具有强大的符号计算功能,可以求解复杂的多项式及微分方程,进行多项式拟合和矩阵计算等,从而支持数值分析中的基本操作。

其次,matlab还提供了一系列的工具箱,如数值分析工具箱,控制系统工具箱和数据分析工具箱等,这些工具箱可以作为matlab的拓展工具,为数值分析提供支持,有助于研究者解决复杂的问题。

此外,matlab 在多种算法的支持上也拥有全面的支持,包括线性规划、非线性规划、自动微分、数值积分、拟合优化、最优化及矩阵分解,可以用于几乎所有的数值分析任务。

最后,matlab还提供了极强的可视化功能,可以处理矩阵、标量和向量的可视化,包括3D和4D图表,可以帮助研究者快速分析结果。

因此,matlab支持的数值分析功能强大,提供了非常丰富的工具箱和算法支持,并有强大的可视化功能,使其在数值分析领域得到了广泛应用。

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

1.使用444(x)对数据进行插值,并写出误差分析理论。

建立脚本x1=[0.2 0.4 0.6 0.8 1.0];y1=[0.98 0.92 0.81 0.64 0.38];n=length(y1);c=y1(:);for j=2:n %求差商for i=n:-1:jc(i)=(c(i)-c(i-1))/(x1(i)-x1(i-j+1));endendsyms x df d;df(1)=1;d(1)=y1(1);for i=2:n %求牛顿差值多项式df(i)=df(i-1)*(x-x1(i-1));d(i)=c(i)*df(i);enddisp('4次牛顿插值多项式');P4=vpa(collect((sum(d))),5) %P4即为4次牛顿插值多项式,保留小数点后5位数figureezplot(P4,[0.2,1.08]);输出结果为P4 =- 0.52083*x^4 + 0.83333*x^3 - 1.1042*x^2 + 0.19167*x + 0.98插值余项:R4(x)=f(5)( ξ)/ (5!)* (x - 0.6)*(x - 0.4)*(x - 0.8)*(x - 1)*(x-0.2)新建一个M-filesyms x l;x1=[0.2 0.4 0.6 0.8 1.0];y1=[0.98 0.92 0.81 0.64 0.38];n=length(x1);Ls=sym(0);for i=1:nl=sym(y1(i));for k=1:i-1l=l*(x-x1(k))/(x1(i)-x1(k));endfor k=i+1:nl=l*(x-x1(k))/(x1(i)-x1(k));endLs=Ls+l;endLs=simplify(Ls) %为所求插值多项式Ls(x).figureezplot(Ls,[0.2,1.08]);输出结果为Ls =- (25*x^4)/48 + (5*x^3)/6 - (53*x^2)/48 + (23*x)/120 + 49/50插值余项:R4(x)=f(5)( ξ)/ (5!)* (x - 0.6)*(x - 0.4)*(x - 0.8)*(x - 1)*(x-0.2) 2.试求3次、合曲线,用图示数据曲线及相应的三种拟合曲线。

建立脚本X=[0.0 0.1 0.2 0.3 0.5 0.8 1.0];Y=[1.0 0.41 0.50 0.61 0.91 2.02 2.46];p1=polyfit(X,Y,3)p2=polyfit(X,Y,4)Y1=polyval(p1,X)Y2=polyval(p2,X)plot(X,Y,'b*',X,Y1,'g-.',X,Y2,'r--')f1=poly2sym(p1)f2=poly2sym(p2)plot(X,Y,'b*',X,Y1,'m-.',X,Y2,'c--')legend('数据点','3次多项式拟合','4次多项式拟合') xlabel('X轴'),ylabel('Y轴')另一个拟合曲线,新建一个M-filefunction [C,L]=lagran(x,y)w=length(x);n=w-1;L=zeros(w,w);for k=1:n+1V=1;for j=1:n+1if k~=jV=conv(V,poly(x(j)))/(x(k)-x(j));endendL(k,:)=V;endC=y*Lend%在命令窗口中输入以下的命令:x=[0.0 0.1 0.2 0.3 0.5 0.8 1.0];y=[1.0 0.41 0.50 0.61 0.91 2.02 2.46];cc=polyfit(x,y,4);xx=x(1):0.1:x(length(x));yy=polyval(cc,xx);plot(xx,yy,'r');hold on;plot(x,y,'x');xlabel('x');ylabel('y');x=[0.0 0.1 0.2 0.3 0.5 0.8 1.0];y=[0.94 0.58 0.47 0.52 1.00 2.00 2.46]; %y中的值是根据上面两种拟合曲线而得到的估计数据,不是真实数据function [C,L]=lagran(x,y);xx=0:0.01:1.0;yy=polyval(C,xx);hold on;plot(xx,yy,'b',x,y,'.');命令窗口运行p1 =-6.6221 12.8147 -4.6591 0.9266p2 =2.8853 -12.3348 16.2747 -5.2987 0.9427Y1 =0.9266 0.5822 0.4544 0.5034 0.9730 2.0103 2.4602 Y2 =0.9427 0.5635 0.4399 0.5082 1.0005 1.9860 2.4692 f1 =- (3727889208212549*x^3)/562949953421312 +(3607024445890881*x^2)/281474976710656 -(1311410561049893*x)/281474976710656 +4172976892199517/4503599627370496f2 =(406067862549531*x^4)/140737488355328-(6943889465038337*x^3)/562949953421312 +(4580931990070649*x^2)/281474976710656 -(2982918465844219*x)/562949953421312 +8491275464650319/9007199254740992C =40.6746 -110.2183 110.3671 -57.3264 23.4994 -5.4764 0.94003.对于积分149xdx=-,取不同的步长h。

分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的h,使得精度不能再被改善?syms xx=0:0.001:1; % h 为步长,可分别令h=0.1,0.05,0.001,0.005y=sqrt(x).*log(x+eps);T=trapz(x,y);T=vpa(T,7)f=inline('sqrt(x).*log(x)',x);S=quadl(f,0,1);S=vpa(S,7)运行结果:T =-0.4443875S =-0.444444由结果(1度要高,且当步长取不同值时即n 越大、h 越小时,积分精度越高。

实验结果说明不存在一个最小的h ,使得精度不能再被改善。

又两个相应的关于h 的误差(余项)其中h 属于a 到b 。

可知h h 愈小,余项愈小,从而积分精度越高。

4.用LU 分解及列主元高斯消去法解线性方程组123410701832.09999962 5.9000015151521021x x x x ⎡⎤⎡⎤⎡⎤-⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦输出Ax=b 中系数A=LU 分解的矩阵L 及U ,解向量x 及detA;列主元法的行交换次序,解向量x 及detA;比较两种方法所得的结果。

LU 分解法建立函数function h1=zhijieLU(A,b) %h1各阶主子式的行列式值[n n]=size(A);RA=rank(A);if RA~=ndisp('请注意:因为A 的n 阶行列式h1等于零,所以A 不能进行LU 分解。

A 的秩RA 如下:')RA,h1=det(A);returnendif RA==nfor p=1:nh(p)=det(A(1:p,1:p));endh1=h(1:n);for i=1:nif h(1,i)==0disp('请注意:因为A的r阶主子式等于零,所以A不能进行LU 分解。

A的秩RA和各阶顺序主子式h1依次如下:')h1;RAreturnendendif h(1,i)~=0disp('请注意:因为A的r阶主子式都不等于零,所以A能进行LU分解。

A的秩RA和各阶顺序主子式h1依次如下:')for j=1:nU(1,j)=A(1,j);endfor k=2:nfor i=2:nfor j=2:nL(1,1)=1;L(i,i)=1;if i>jL(1,1)=1;L(2,1)=A(2,1)/U(1,1);L(i,1)=A(i,1)/U(1,1);L(i,k)=(A(i,k)-L(i,1:k-1)*U(1:k-1,k))/U(k,k);elseU(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j);endendendendh1;RA,U,L, X=inv(U)*inv(L)*bendendend命令窗口运行A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];b=[8;5.900001;5;1];h1=zhijieLU(A,b)请注意:因为A的r阶主子式都不等于零,所以A能进行LU分解。

A的秩RA 和各阶顺序主子式h1依次如下:RA =4U = 10.0000 -7.0000 0 1.00000 2.1000 6.0000 2.30000 0 -2.1429 -4.23810 -0.0000 0 12.7333L = 1.0000 0 0 0-0.3000 1.0000 0 00.5000 1.1905 1.0000 -0.00000.2000 1.1429 3.2000 1.0000X = -0.2749-1.32981.29691.4398h1 = 10.0000 -0.0000 -150.0001 -762.0001列主元法建立函数function [RA,RB,n,X]=liezhu(A,b)B=[A b];n=length(b);RA=rank(A);RB=rank(B);zhicha=RB-RA;if zhicha>0disp('请注意:因为RA~=RB,所以方程组无解')returnwarning off MATLAB:return_outside_of_loopendif RA==RBif RA==ndisp('请注意:因为RA=RB,所以方程组有唯一解')X=zeros(n,1);C=zeros(1,n+1);for p=1:n-1[Y,j]=max(abs(B(p:n,p)));C=B(p,:);B(p,:)=B(j+p-1,:);B(j+p-1,:)=C;for k=p+1:nm=B(k,p)/B(p,p);B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以方程组有无穷多解') endendend命令窗口运行A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];b=[8;5.900001;5;1];[RA,RB,n,X]=liezhu(A,b),H=det(A)请注意:因为RA=RB ,所以方程组有唯一解RA =4RB =4n =4X = 0.0000-1.00001.00001.0000H = -762.00015.线性方程组Ax=b 的A 及b 为1078732756523,86109337591031A b ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦则解T x (1,1,1,1)=.用MATLAB 内部函数求detA 及A 的所有特征值和cond(A)2。

相关文档
最新文档