Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2007-08-13, 14:58   #1
spy1120
普通会员
 
spy1120 的头像
 
注册日期: 2007-05-18
年龄: 38
帖子: 77
声望力: 19
spy1120 正向着好的方向发展
箭头 【文章】**线性方程组求解在Excel和Matlab中的实现**

一、用Excel求解线性方程组

   x1+x2+2x3+3x4=1
  3x1-x2-x3-2x4=-4
  2x1+3x2-x3-x4=-6
  x1+2x2+3x3-x4=-4
  可按如下的步骤来解这个方程组:
  1.打开Excel。
  2.由于在本方程组中未知数有4个,所以预留4个可变单元格的位置A1-A4。
  3.将活动单元格移至B1处,从键盘键入:=A1+A2+2*A3+3*A4:然后回车(此时B1显示0)。即在B1处输入方程组中第一个方程等号左边的表达式。
  4.在B2处从键盘键入:=3*A1-A2-A3-2*A4;然后回车(此时B2显示0)。即在B2处输入方程组中第二个方程等号左边的表达式。
  5.在B3处从键盘键入:=2*A1+3*A2-A3-A4;然后回车(此时B3显示0)。即在B3处输入方程组中第三个方程等号左边的表达式。
  6.在B4处从键盘键入:=A1+2*A2+3*A3-A4;然后回车(此时B4显示0)。即在B4处输入方程组中第四个方程等号左边的表达式。
  7.点击工具?规划求解,出现规划求解参数对话框。
  8.对话框中第一栏为:设置目标单元格,在相应的框中填入$B$1。
  9.对话框中第二栏为:等于;后有三个选项,依次为最大值,最小值,值为。根据题意B1表示方程组中第一个方程等号左边的表达式,它的值应为1,因此点击值为前的圆圈,输入1。
  10.对话框中第三栏为:可变单元格;我们预留的可变单元格为A1-A4,所以在可变单元格框内键入 A 1: A 4。
  11.对话框中最后一栏为:约束;首先点击添加按钮,屏幕出现添加约束对话框。
  12.在添加约束对话框的单元格引用位置键入:B2;在中间的下拉式菜单中选取=;在约束值处键入:-4;然后按添加按钮,屏幕出现空白的添加约束对话框。
  13.在添加约束对话框的单元格引用位置键入:B3;在中间的下拉式菜单中选取=;在约束值处键入:-6;然后按添加按钮,屏幕出现空白的添加约束对话框。
  14.在添加约束对话框的单元格引用位置键入:B4;在中间的下拉式菜单中选取=;在约束值处键入:-4;然后按确定键,返回规划求解参数对话框。特别注意在最后一个约束条件键入后,按确定键(而不是像前面一样按添加键)。
  15.按求解键,出现求解结果对话框。此时在A1-A4的位置依次为:-1,-1,0,1;这就是说,原方程组的解为:X1=-1,X2=-1,X3=0,X4=1。这样我们就求出了方程组的解。


二、用Matlab求解线性方程组

MATLAB中线性方程组的求解用矩阵除法计算,只要输入系数矩阵A和常数矩阵B,方程组就成为矩阵方程AX=B,则该矩阵方程的解为X=A\B。
实例、求线性方程组 的解。
由线性方程组可知:
系统矩阵为 ,常数矩阵为 。操作如下:
>> A=[2 4 6;9 6 3;4 3 7]; %输入系数矩阵A
>> B=[7;9;6]; %输入常数矩阵B
>> X=A\B %求未知矩阵X
X =
0.0250
1.3250
0.2750
如果系数矩阵A是非奇异方阵,也可以先用inv命令求出A的逆阵NA,再用X=NA*B求出方程组的解。
>> NA=inv(A) %求矩阵A的逆阵
NA =
-0.2750 0.0833 0.2000
0.4250 0.0833 -0.4000
-0.0250 -0.0833 0.2000
>> X=NA*B %求未知矩阵X
X =
0.0250
1.3250
0.2750
__________________
吾幼学文,10年不就,怒,遂习武,校场骑射,中鼓吏,乃逐,闭门研医良久,自攥一良方,服之,卒!!!
spy1120 当前离线   回复时引用此帖
旧 2007-08-21, 17:13   #2
summer1986
初级会员
 
注册日期: 2007-08-21
帖子: 2
声望力: 0
summer1986 正向着好的方向发展
默认

你好,请问在matlab中 如果A的列数大于行数 情况是怎么样呢?
谢谢
summer1986 当前离线   回复时引用此帖
旧 2007-12-02, 21:47   #3
fanxing39
高级会员
 
注册日期: 2007-12-02
年龄: 44
帖子: 303
声望力: 31
fanxing39 是一位成功的新星fanxing39 是一位成功的新星fanxing39 是一位成功的新星fanxing39 是一位成功的新星
默认

引用:
作者: summer1986 查看帖子
你好,请问在matlab中 如果A的列数大于行数 情况是怎么样呢?
谢谢
如果A的列数比行数大,说明方程的增广矩阵的秩小于方程未知量的个数,方程有无数个解,在数学上可以用"伪逆"来进行计算.
我找下想关的论文传上来哦
fanxing39 当前离线   回复时引用此帖
旧 2007-12-07, 05:56   #4
水易
初级会员
 
注册日期: 2007-12-07
帖子: 3
声望力: 0
水易 正向着好的方向发展
默认

请问如果其中的四个变量前的系数也是可变量,该如何设置呢?
例: Y1=PX1+P^2X2-2PX3-0
Y2=.....
Y3=.....
y4=......
水易 当前离线   回复时引用此帖
旧 2007-12-25, 20:44   #5
warrenlin
初级会员
 
注册日期: 2007-12-22
帖子: 8
声望力: 0
warrenlin 正向着好的方向发展
默认

谢谢分享!
warrenlin 当前离线   回复时引用此帖
旧 2007-12-26, 11:45   #6
luruiliu
初级会员
 
注册日期: 2007-12-26
帖子: 4
声望力: 0
luruiliu 正向着好的方向发展
默认

好,谢谢搂住
luruiliu 当前离线   回复时引用此帖
旧 2008-01-22, 15:59   #7
peterpy8
初级会员
 
注册日期: 2008-01-21
年龄: 37
帖子: 2
声望力: 0
peterpy8 正向着好的方向发展
难过 不明白

还是不知道如果m<n时如何求方程组的通解!
__________________
孜孜不倦,勤学好问!
peterpy8 当前离线   回复时引用此帖
旧 2008-01-22, 17:01   #8
dnping
高级会员
 
注册日期: 2007-07-26
年龄: 40
帖子: 268
声望力: 24
dnping 是一个将要出名的人
默认

引用:
作者: peterpy8 查看帖子
还是不知道如果m<n时如何求方程组的通解!
如果一个方程的列数大于行数,则说明这个方程有无数个解,那我们可以对矩阵A进行分析,你可以对矩阵A进行高斯消去,那我们则得到了一个[m*m]的对角阵D和消去后剩余的m*(n-m)的一个矩阵B,
则原方程变为:
[D B]*x=f

对于最后一行:
d(m,m)*x(m)+b(m,m+1)*x(m+1)+...+b(m,n)*x(n)=f(n)

那我们就可以对剩余的x(m:n)个变量进行求解,因为有无穷个解,所以需要利用带入法来求解,将这个向量依次赋值为[1,0,...0](n-m+1);[0,1,...0](n-m+1),……相当于是赋值为单位向量,而这些量就是我们这个方程的一组基,得到了一组基之后,每组基代进原方程,剩余的不就可以求出来了么?

如果还不明白,请仔细看线性代数教材。
dnping 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 11:39


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.