matlab 同余解方程组,Matlab与方程组

"本文介绍了使用MATLAB解决不同类型的方程组的方法,包括线性方程组、同余方程组、特征方程以及非线性方程和方程组。详细阐述了solve函数和符号解法的应用,以及如何利用fzero和fsolve函数求解单变量和多变量非线性问题。此外,还提到了解方程组的数值近似方法,如inv和'运算符'。"
摘要由CSDN通过智能技术生成

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 n2 [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生成特征多项式,大多时用eig2 %求解高次多项式,直接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 thisfunction goes here4 %Detailed explanation goes here5 fx = 3*x - 10.^x +5;6

7

8 end9 %注意:建立保存后,指令窗口显示,但貌似不影响下面的使用10 %??? Input argument "x" isundefined.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 thisfunction goes here3 %Detailed explanation goes here4 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 end11

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 isnear zero21 as measured by the defaultvalue of the function tolerance, and22 the problem appears regular asmeasured by the gradient.23

24

25

26

27 x =

28

29 0.6354

30 0.3734

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值