Matlab与方程组

1.线性方程组

1 syms x y%中间不可以是分号
2 [x y] = solve(x+y-1,x-y)%若不加前面的变量则得不到结果,不知为何

后来我发现我们更倾向于[x y] = solve('x+y=1','x - y=0')

2.同余方程组

1 sysm n
2 [n] = solve(rem(n,9)-8)
3 %不论怎么改动都没有结果

3.

(A-λE)x=0 其中E为单位矩阵   

这是n个未知数n个方程的齐次线性方程组,它有非零解的充要条件是系数行列式为0,

即   |A-λE|=0   

带入具体的数字或者符号,可以看出该式是以λ为未知数的一元n次方程,称为方阵A

的特征方程,左端 |A-λE|是λ的n次多项式,也称为方阵A的特征多项式。

1 %poly生成特征多项式,大多时用eig
2 %求解高次多项式,直接roots(系数)

4.cite from:http://bbs.seu.edu.cn/pc/pccon.php?id=950&nid=14498&tid=0

最近有多人问如何用matlab解方程组的问题,其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,

MATLAB中有两种方法: (1)x=inv(A)*b — 采用求逆运算解方程组;

(2)x=A\b — 采用左除运算解方程组。

例: x1+2x2=8 2x1+3x2=13

>>A=[1,2;2,3];b=[8;13];

>>x=inv(A)*b x =    2.00    3.00

>>x=A\b x =   2.00   3.00;

即二元一次方程组的解x1和x2分别是2和3。

对于同学问到的用matlab解多次的方程组,有符号解法,方法是:先解出符号解,然后用vpa(F,n)求出n位有效数字的数值解.

具体步骤如下:

  第一步:定义变量syms x y z ...;

  第二步:求解[x,y,z,...]=solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN');

  第三步:求出n位有效数字的数值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);...。

如:解二(多)元二(高)次方程组: x^2+3*y+1=0 y^2+4*x+1=0

解法如下: >>syms x y;

       >>[x,y]=solve('x^2+3*y+1=0','y^2+4*x+1=0');

      >>x=vpa(x,4);(我在matlab里试了试貌似没有效果,仍然是32位有效数字)

      >>y=vpa(y,4);

结果是: x =     1.635+3.029*i     1.635-3.029*i     -.283    -2.987 y =     1.834-3.301*i     1.834+3.301*i     -.3600    -3.307。

二元二次方程组,共4个实数根;

还有的同学问,如何用matlab解高次方程组(非符号方程组)?

举个例子好吗? 解答如下: 基本方法是:solve(s1,s2,…,sn,v1,v2,…,vn),即求表达式s1,s2,…,sn组成的方程组,

求解变量分别v1,v2,…,vn。

具体例子如下: x^2 + x*y + y = 3 x^2 - 4*x + 3 = 0

解法: >> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')

运行结果为 x =      1 3

    y =      1 -3/2

即x等于1和3;y等于1和-1.5

或 >>[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3= 0','x','y')

 x =      1  3  

y =      1 -3/2

结果一样,二元二方程都是4个实根。

 

5.单变量非线性方程求解

z=fzero('fname',x0,tol,trace)

  其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace指定迭

代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。

例 求f(x)=3*x-10^x+2=0在x0=0.5附近的根

 1 %建议function函数
 2 function fx = fun( x )
 3 %UNTITLED Summary of this function goes here
 4 %   Detailed explanation goes here
 5 fx = 3*x - 10.^x +5;
 6
 7
 8 end
 9 %注意:建立保存后,指令窗口显示,但貌似不影响下面的使用
10 %??? Input argument "x" is undefined.
11
12 %Error in ==> fun at 4
13 %fx = 3*x - 10.^x +5;
14
15 %在指令窗口调用
16 >> z = fzero('fun',0.5)
17
18 z =
19
20     0.8837

6.非线性方程组的求解(cite from:http://blog.sina.com.cn/s/blog_56ef652d0100ebew.html)

  对于非线性方程组F(X)=0,用fsolve函数求其数值解。

fsolve函数的调用格式为X=fsolve('fun',X0,option) 其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供 了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数

来完成。

  例 如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。 optimset(‘Display’,‘off’)将设定Display选项为‘off’。

例  求下列非线性方程组在(0.5,0.5) 附近的数值解。

 1 function fx = fun( p )
 2 %UNTITLED Summary of this function goes here
 3 %   Detailed explanation goes here
 4 x = p(1);
 5 y = p(2);
 6 fx(1) = x-0.6*sin(x)-0.3*cos(y);
 7 fx(2) = y-0.6*cos(x)+0.3*sin(y);
 8
 9
10 end
11
12
13
14
15
16 >> x = fsolve('fun',[0.5 0.5]')
17
18 Equation solved.
19
20 fsolve completed because the vector of function values is near zero
21 as measured by the default value of the function tolerance, and
22 the problem appears regular as measured by the gradient.
23
24 <stopping criteria details>
25
26
27 x =
28
29     0.6354
30     0.3734

 注意:x = [1 2 3]和x = [1,2,3]是一样的都是行向量

 

写得有些乱,不过也从侧面反映出我思考了这个问题,但由于见识有限,还望大神不吝赐教。

时间: 2024-09-23 05:09:54

Matlab与方程组的相关文章

matlab 数据处理-matlab微分方程组中未知参数求解

问题描述 matlab微分方程组中未知参数求解 x,y,z关于t的微分方程组中存在未知参数,已知x,y,z,t的多组离散数据,能求出方程组中各个参数值么 解决方案 以MATLAB牛B的功能,解个微分方程组还是很容易的.用dsolve命令,你可以使用help查一下各种情形下的用法,自然就知道了.

matlab实现牛顿迭代法求解非线性方程组

已知非线性方程组如下 3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0 exp(-x1*x2)+20*x3+(10*pi-3)/3=0 求解要求精度达到0.00001 ---------------------------------------------------------分--割--线--------------------------------------------------------- 首先建立函数fun 储存方

程序-如何用matlab求解带约束方程的微分方程组?

问题描述 如何用matlab求解带约束方程的微分方程组? 类似于如下,x1(0)=1,x2(0)=x3(0)=x4(0)=0 x1'=-3*x1*x2; x2'=8*x3+x4; x3'=7*x4; x4'=-4*x1*x3 x1+x2+x3+x4=1,求程序应该如何编写? 解决方案 这就是用matlab做数学题,你查有本书好象是matlab在高等数学中的应用,里面有例题

精通VC与MATLAB联合编程(八)

在上一章中对MATLAB 编译器做了简要介绍,并介绍了如何将m文件转换成VC可调用的dll文件,在这章中介绍如何利用编译器将m文件转换成对应的C\C++文件,并在VC中调用.这章节中的例子是在第四章中介绍过的解线形方程组. 首先要保证编译器设置正确,编译器的设置可以参考前面两章的内容.如果以前已经进行了配置就不需要这一步. 1.在MATLAB中编写如下函数: function [x]=gjfcz(A,b) %A=[-1.5 1 2; 4 2 3 ; -3 2 8] %b=[3;5;6] x=A\

浅析VC与MATLAB联合编程(四)

在浅析VC与MATLAB联合编程<一>.浅析VC与MATLAB联合编程<二>和浅析VC与MATLAB联合编程<三>中简单介绍了VC和MATLAB接口的两种方法,初学者可能会问为什么要用VC和MATLAB接口,接口的实质又是什么,本文就通过一个例子来回答这两个问题. 首先来介绍一下MATLAB.MATLAB名字由MATrix和 LABoratory 两词的前三个字母组合而成.那是20世纪七十年代后期的事:时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于

《数值分析(原书第2版)》—— 2.7 非线性方程组

2.7 非线性方程组 第1章中包含求解一个未知变量的方程,该方程通常是非线性方程.在本章中,我们已经研究了方程组的求解,但是要求方程组是线性的.结合非线性和"多于一个方程"的因素,大大提高了求解问题的难度.本节中我们将描述牛顿方法及其变体,并用于求解非线性方程组.130 2.7.1 多元牛顿方法 单变量的牛顿方法xk+1=xk-f(xk)f′(xk)提供了多元牛顿方法的主要轮廓.两种方法都是根据泰勒展开的线性近似推导得到,例如,令f1(u,v,w)=0 f2(u,v,w)=0(2.49

MATLAB 之特征值与特征向量、jordan标准形

实验六  特征值与特征向量.若当标准形 [实验目的] 1.了解特征值与特征向量基本概念及其性质: 2.了解若当标准型的基本概念: 3.学习.掌握MATLAB软件有关的命令. [实验准备] 1.特征多项式 设A为n阶方阵, 如果数" "和n维列向量x使得关系式 成立, 则称 为方阵A的特征值, 非零向量x称为A对应于特征值" "的特征向量. poly(A),返回矩阵A的特征多项式的向量表示形式,例如: >> clear >> A=[1 0;2

matlab-求助,MATLAB如何根据x,y的微分方程求x,y的关系曲线

问题描述 求助,MATLAB如何根据x,y的微分方程求x,y的关系曲线 方程组是这样的 y''= -10.01476+0.20811*(0.0587* x'-0.9983* y') x''= -0.20811* (0.0587*y'+0.9983 * x') 都是二阶导和一阶导,在t=0时x为0,y为10600,不想要x,y关于t的曲线.想直接要x,y之间的曲线. 求作图,感激不尽,时间紧迫,我知道方法很重要但是有曲线就更好了,只求一个曲线 解决方案 先将a=x',b=y',进行转换,分别得到了

《MATLAB智能算法超级学习手册》一一1.4 线性方程组的求解

1.4 线性方程组的求解 MATLAB智能算法超级学习手册 线性方程组的求解在日常生活中的应用较多,特别是解决企业规划.任务分配等问题.线性方程组的求解一般分为两类:一类是求唯一解或求特解,另一类是求通解.可以通过由MATLAB求解线性方程组系数矩阵的秩来判断: 若系数矩阵的秩r=n(n为方程组中未知变量的个数),则有唯一解: 若系数矩阵的秩r<n,则可能有无穷解: 线性方程组的通解(无穷解) = 对应齐次方程组的通解 + 非齐次方程组的一个特解,其特解的求法属于解的第一类问题,通解部分属第二类