1.定义变量:
syms x
>> x+ x + x
ans =
3*x
同样, 包含变量x 的表达式也会变成一个变量:
>> y = x ^ 2 - 2 * x - 8
y =
x^2 - 2*x - 8
2.使用solve求根:
syms x
y = x* sin(x) - x;
solve(y, x)
ans =
0
pi/2
syms x
y1 = (cos(x))^2 - (sin(x))^2; y2 = (cos(x))^2 + (sin(x))^2;
solve(y1, x)
ans =
pi/4
solve(y2, x)
ans =
Empty sym: 0-by-1
使用solve 解出二元一次联立方程
syms x y
eq1 = x - 2*y -5;
eq2 = x + y - 6;
A = solve(eq1, eq2, x, y)
>> A.x
ans =
17/3
>> A.y
ans =
1/3
R2018b 需要去掉引号
>> syms x a b
solve(a * x ^ 2 - b)
% 用a 和b 表示 x
ans =
b^(1/2)/a^(1/2)
-b^(1/2)/a^(1/2)
>> syms x a b
solve(a * x ^ 2 - b, b)
% 用a 和x 表示 b
ans =
a*x^2
第十课课后练习1:
syms x y a b r
solve((x-a)^2+(y-b)^2-r^2, x)
ans =
a + (b + r - y)^(1/2)*(r - b + y)^(1/2)
a - (b + r - y)^(1/2)*(r - b + y)^(1/2)
% 第二题的弹幕大佬做法
syms a b c d x1 x2 x3 x4
eq1=a*x1+b*x3-1; eq2=a*x2+b*x4; eq3=c*x1+d*x3; eq4=c*x2+d*x4-1;
A=solve(eq1,eq2,eq3,eq4,x1,x2,x3,x4)
>> A.x1
ans =
d/(a*d - b*c)
>> A.x2
ans =
-b/(a*d - b*c)
>> A.x3
ans =
-c/(a*d - b*c)
>> A.x4
ans =
a/(a*d - b*c)
>> inv([a b;c d])
ans =
[ d/(a*d - b*c), -b/(a*d - b*c)]
[ -c/(a*d - b*c), a/(a*d - b*c)]
% 和用MATLAB内置函数的方法求出的答案相同
3.使用diff 函数计算某个变量的微分:
syms x
y = 4 * x ^ 5;
yprime = diff(y)
yprime =
20*x^4
第十课课后练习2:
syms x y
f = (exp(x^2))/(x^3-x+3); g = (x^2+x*y-1)/(y^3+x+3);
fprime = diff(f)
gprime = diff(g)
fprime =
(2*x*exp(x^2))/(x^3 - x + 3) - (exp(x^2)*(3*x^2 - 1))/(x^3 - x + 3)^2
gprime =
(2*x + y)/(y^3 + x + 3) - (x^2 + y*x - 1)/(y^3 + x + 3)^2
一个尝试:(结论写在前面:看来直接对g 不做指示地求微分,是直接对x 求微分了。
dgx = diff(g, x)
dgy = diff(g, y)
dgx =
(2*x + y)/(y^3 + x + 3) - (x^2 + y*x - 1)/(y^3 + x + 3)^2
dgy =
x/(y^3 + x + 3) - (3*y^2*(x^2 + y*x - 1))/(y^3 + x + 3)^2
积分: int 函数
syms x; y = x^2*exp(x);
z = int(y); z = z-subs(z, x, 0)
% 因为求出来之后如果要满足另一个条件,z 就必须减掉一个常数2
% 因此后面那个式子的意思是:对于一个式子z,其中有一个变量为x,把x用0取代,求出z(0)
% 再用z-z(0),得到最符合条件的z 值
z =
exp(x)*(x^2 - 2*x + 2) - 2
第十课课后练习3:
例题是不定积分,这个题是定积分了
syms x
y = (x^2-x+1)/(x+3);
z = int(y)
subs(z, x, 10) - subs(z, x, 0)
z =
13*log(x + 3) - 4*x + x^2/2
ans =
13*log(13) - 13*log(3) + 10
上图中:f2: inline function (内联函数) 还有,一定要加上初始猜测数值。
>> f2 = @(x) (1.2*x + 0.3 + x * sin(x))
fsolve(f2, 0)
f2 =
包含以下值的 function_handle:
@(x)(1.2*x+0.3+x*sin(x))
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.
<stopping criteria details>
ans =
-0.3500
第十课课后练习4:
f = @(x) ([2*x(1)-x(2)-exp(-x(1)); -x(1)+2*x(2)-exp(-x(2))]);
A = fsolve(f, [-5,-5])
A =
0.5671 0.5671
即:当且仅当该图像穿过x 轴时,这个函数fzero 才能解出来。
roots([1 -3.5 2.75 2.125 -3.875 1.25])
ans =
2.0000 + 0.0000i
-1.0000 + 0.0000i
1.0000 + 0.5000i
1.0000 - 0.5000i
0.5000 + 0.0000i
注意:
roots([1 -6 -12 81])
ans =
-3.5969
5.5097
4.0872
MATLAB找根的方法:
二分法;
步骤:x0 -> f(x0) -> f’(x0) -> x1 -> f(x1) -> f’(x1) -> x2…
(迭代快于递归):
递归法:
讲到递归时最常用的阶乘实例: