上一节我们说了说多项式的根,这一篇我们讨论一下方程组,超越方程等的求根。
方程组求解:
首先看一下最简单的多元一次方程:
3x+2y=7.5
5x+7y=23.5
直接运用克拉默法则:
ans=inv(a)*b,这里inv(a)=1/a
这样解得x=0.5,y=3
完整代码:
a=[3 2;5 7];
b=[7.5;23.5];
ans=inv(a)*b;
fprintf(' x = %g, y = %g',ans(1),ans(2));
结果:
注意几点:
1、a矩阵存放等式左边的系数,b存放等式右边的常数
2、系数为0也要补上
这是一个最简单的版本,但是好多情况下我们还会碰到多元也多次的方程(比如高中的解析几何),这时候我们需要借助solve()函数。
solve函数用途很多,这里只介绍两种。
一个就是求解多元多次方程
x^2+y^2=4
y-x+1=0
求交点,一个正常的高中解析几何题,这次我们尝试用matlab解决
卑微的代码:
syms x y
f=(x^2 + y^2 == 4)
g=(y - x + 1 == 0)
[x,y]=solve(f,g)
a=[x,y]
pretty(a)
这里还是细致的说一下吧
1、定义符号变量x,y
2、定义解析式f,g
3、运用solve函数
4、pretty()美化一下结果
solve函数:
solve(f,g)两个参数,代表两个解析式,返回值为一个矩阵[x,y],代表求的值x,y
我们看一下结果:
这里注意几点:
1、解析式的等号是==,不要写成=
2、solve的返回值是个矩阵
3、答案中每一列代表一个变量的取值,以这个答案为例:
x1,y1
x2,y2
所以排布是这个样的。
超越方程:
solve函数解决超越方程是有一定局限性的,只能接触一些值比较特殊的解,比如有理数,一些根式,复杂一些的比如e,sin1这些解决不了
我们来看一个例子:
这个代入x=1是成立的
代码很简单:
syms x
f=(log(x)==2.^x-2)
ans=solve(f)
这个只有一个参数,返回值是一个矩阵,代表所有解
结果ans=1.0
但是一作图,会发现其实有两个根:
其中一个根无法简单表示出来,solve就解决不了,自动忽略了(???)所以solve函数求解超越方程是有一定局限性的。
这一节我们说了说matlab其它的求解方法,下一节再回到多项式和符号计算。
欢迎喜欢的朋友点赞关注收藏啊:)