首页 > 编程笔记 > MATLAB笔记 阅读:34

MATLAB用solve()解方程组(附带实例)

从学习代数开始,就一直在探索关于方程的求解理论,从最初的代入消元法和加减消元法,到数值计算中的牛顿迭代法、高斯消元法,一直到微分方程的求解理论,方程在数学中的重要性就包含在这漫长的探索、深化过程中。

由于代数方程只涉及符号对象的代数运算,所以相对比较简单。它还可以细分为线性方程和非线性方程两类。前者往往可以很容易地求得所有解;但是后者经常丢掉一些解,这时就必须借助函数绘制图形,通过图形来判断方程解的个数。

这里所讲的一般代数方程包括线性方程、非线性方程和超越方程等,求解函数是 solve()。当方程组不存在符号解而又无其他自由参数时,solve() 将给出数值解。

solve() 的调用格式如下:
对于上面的 4 种调用格式,输出的解有以下 3 种情况:
【实例】符号代数方程求解示例。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> clear
>> syms a b c x;
>> f=sym(a*x+b*x^-1+c)
f =
    c + a*x + b/x
>> solve(f)
ans =
    -(c + (c^2 - 4*a*b)^(1/2))/(2*a)
    -(c - (c^2 - 4*a*b)^(1/2))/(2*a)

继续在命令行窗口中输入以下语句,并显示相应的输出结果:
>> syms a b c x;
>> f=sym(a*x^2+b*x+c)
f =
    a*x^2 + b*x + c
>> solve(f,x)
ans =
    -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
    -(b - (b^2 - 4*a*c)^(1/2))/(2*a)
>> solve(f,a)
ans =
    -(c + b*x)/x^2

继续在命令行窗口中输入以下语句,并显示相应的输出结果:
clear
syms x y;
f1=sym(x^2+y^2==25)
f1 =
    x^2 + y^2 == 25
f2=sym(x*y==12)
f2 =
    x*y == 12
[x,y]=solve(f1,f2)
x =
    -3
    -4
    4
    3
y =
    -4
    -3
    3
    4

继续在命令行窗口中输入以下语句,并显示相应的输出结果:
>> clear
>> syms x y a b;
>> f1=sym(x^2+y^2==a^2)
f1 =
    x^2 + y^2 == a^2
>> f2=sym(x*y==b)
f2 =
    x*y == b
>> S=solve(f1,f2,x,y)
S =
    包含以下字段的 struct:
    x: [4x1 sym]
    y: [4x1 sym]

继续在命令行窗口中输入以下语句,并显示相应的输出结果:
>> S.x
ans =
    -((a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2))^(1/2)/2)^(3/2) - a^2*(a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2))/b
    -((a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(3/2) - a^2*(a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2))/b
    ((a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(3/2) - a^2*(a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2))/b
    ((a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(3/2) - a^2*(a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2))/b
>> S.y
ans =
    (a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2)
    (a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2)
    -(a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2)
    -(a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2)

相关文章