MATLAB方程求解:1.线性方程组

线性方程组

一.直接解法

例如:

方程组:

x+2y+3z=5

x+4y+9z=-2

x+8y+27z=6

可知:

A=[1 2 3;1 4 9;1 8 27]

b=[5;-2;6]

x=A\b

代码:

matlab 复制代码
A=[1 2 3;1 4 9;1 8 27];
b=[5;-2;6];
x=inv(A)*b;

线性方程组是线性代数研究的主要对象之一。

求解线性方程组的问题,不但在自然科学和工程技术中有所涉及,而且在数值计算方法的其它分支研究中,比如样条插值、最佳平方逼近、微分方程数值解,也往往需要求解线性方程组;

MATLAB软件最早也是起源于对线性方程组的研究;

直接解法

Ax=b

x=A^-1*b

MATLAB矩阵求逆函数:inv(A)

方程的解法为:x=inv(A)*b

从执行时间和数值准确性方面而言,一种更好的方法是使用矩阵反斜杠运算符,即:

x=A\b

这会使用高斯消去法来求解线性方程组,不必求逆矩阵。

二.矩阵分解法

矩阵分解法是指将线性方程组Ax=b分解为矩阵A的一些基本子式,然后利用这些子式来求解线性方程组。

LU分解法

  1. [L,U] = lu(A)
    LU分解法是将矩阵A分解为下三角矩阵L和上三角矩阵U,并使得L的对角线元素为1。注意:这里的矩阵A必须是方阵。
  2. [L,U,P] = lu(A)
    产生一个上三角矩阵U和一个下三角矩阵L,并使得L的对角线元素为1。P是一个置换矩阵,使得PA=LU。这里的矩阵A必须是方阵。

LU分解:

实现LU分解后,线性方程组Ax=b的解为

x=U(L\b)

x=U(L\Pb)

这样可以大大提高运算速度。

QR分解法

QR分解:对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角阵R的乘积形式;QR分解只能对方阵进行。

  1. MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式为:
    [Q,R]=qr(X)
  2. 产生一个正交矩阵Q和一个上三角阵R,使之满足X=QR.
    [Q,R,E]=qr(X)
  3. 产生一个正交矩阵Q、一个上三角阵R以及一个置换矩阵E,使之满足XE=QR. 实现QR分解后,线性方程组Ax=b的解为:
    x=R(Q\b)或x=E(R(Q\b))

三.迭代解法

  • 线性方程组的直接解法:精确解;对大型线性方程组的计算效率高:
  • 迭代法是一种不断用变量的旧值递推新值的过程,是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让一组指令重复执行,在每次执行这组指令时,都从变量的原值推出它的新值。
  • 迭代解法非常适合求解大型稀疏矩阵的方程组。在数值分析中,迭代解法主要包括:
    • Jacobi迭代法;
    • Gauss--Serdel迭代法;
    • 超松弛迭代法;

线性方程组的迭代解法一Jacobii迭代法

于是Ax=b转化为:

x=D^-1(L+U)x +D^-1b

与之对应的迭代公式为:

x^(k+1)=D^-1(L+U)x^(k)+D^-1b

这就是Jacobi迭代公式。

如果序列{xk+1}收敛于x,则x必是方程Ax=b的解;

matlab 复制代码
function [y,n]=jacobi(A,b,x0,ep)
if nargin==3
    ep=l.0e-6;
elseif nargin<3
    error
    return
end

D=diag(diag(A)):%求A的对角矩阵
L=-tril(A,-1);%求A的下三角阵
U=-triu(A,1);%求A的上三角阵

B=D\(L+U);
f=D\b;
y=B*x0+f:
n=l;%迭代次数
while norm(y-x0)>=ep
    x0=y;
    y=B*x0+f;
end
相关推荐
翔云API6 分钟前
人证合一接口:智能化身份认证的最佳选择
大数据·开发语言·node.js·ocr·php
jimmy.hua6 分钟前
C++刷怪笼(5)内存管理
开发语言·数据结构·c++
xiaobai12 310 分钟前
二叉树的遍历【C++】
开发语言·c++·算法
DieSnowK17 分钟前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver
Freak嵌入式17 分钟前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
java·开发语言·数据结构·python·接口·抽象基类
冷凝女子20 分钟前
【QT】基于HTTP协议的网络应用程序
开发语言·qt·http
知识分享小能手23 分钟前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发
鸽芷咕31 分钟前
【Python报错已解决】libpng warning: iccp: known incorrect sRGB profile
开发语言·python·机器学习·bug
吱吱鼠叔35 分钟前
MATLAB数学规划:2.线性规划
算法·机器学习·matlab
白总Server37 分钟前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php