syms和sym:定义/声明一个变量
syms x %方法一
x=sym('x') %方法二
解析解
一元一次方程求解示例
求方程式 y = x • s i n ( x ) − x y=x•sin(x)-x y=x•sin(x)−x的根,即令 y = 0 y=0 y=0求 x 的值
syms x
y = x*sin(x)-x;
solve(y, x)
练习
求方程式 c o s ( x ) 2 − s i n ( x ) 2 = 0 cos(x)^2-sin(x)^2=0 cos(x)2−sin(x)2=0和 c o s ( x ) 2 + s i n ( x ) 2 = 0 cos(x)^2+sin(x)^2=0 cos(x)2+sin(x)2=0
syms x
y1 = cos(x)^2-sin(x)^2;
y2 = cos(x)^2+sin(x)^2;
z1=solve(y1,x);
z2=solve(y2,x);
二元一次方程求解示例
求解
x − 2 y = 5 x-2y=5 x−2y=5 且 x + y = 6 x+y=6 x+y=6
syms x y
eq1 = x - 2*y - 5;
eq2 = x + y - 6;
A = solve(eq1,eq2,x,y)
多元方程求解示例
a • x 2 − b = 0 a•x^2-b=0 a•x2−b=0
syms x a b
solve(a*x^2-b)
syms x a b
solve(a*x^2-b,b)
练习1
求解x的方程式 ( x − a ) 2 + ( y − b ) 2 = r 2 (x-a)^2+(y-b)^2=r^2 (x−a)2+(y−b)2=r2
syms x y a b r
solve((x-a)^2+(y-b)^2-r^2,x)
%%
%更好的一种写法
syms x y a b r;
eq=(x-a)^2+(y-b)^2-r^2;
solve(eq,x)
注意:矩阵的同行元素之间用空格(或”,”)隔开;矩阵的行与行之间用”;”(或回车符)隔开。
syms a b c d;
A=[a b;c d];
inv(A)
示例
用symbolic的方式计算 y = 4 x 5 y=4x^5 y=4x5的微分
syms x
y = 4*x^5;
yprime = diff(y)
%对diff()的使用要注意,此处的x是symbolic的,所以,diff(y)可以求导
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)
示例
求解
z = ∫ y d x = ∫ x 2 e x d x , z ( 0 ) = 0 z = \int ydx\,=\int x^2e^xdx\,,z(0)=0 z=∫ydx=∫x2exdx,z(0)=0
求得的 z = e x ( x 2 − 2 x + 2 ) z = e^x(x^2-2x+2) z=ex(x2−2x+2),
z ( x ) = z ( 0 ) = e 0 ( 0 2 − 2 ∗ 0 + 2 ) = 2 z(x) =z(0) = e^0(0^2-2*0+2)=2 z(x)=z(0)=e0(02−2∗0+2)=2,
所以需要令 z = z − 2 z=z-2 z=z−2 才能满足 z ( 0 ) = 0 z(0)=0 z(0)=0
syms x; y = x^2*exp(x);
z = int(y);
z = z-subs(z, x, 0)
练习
求
∫ 0 10 x 2 − x + 1 x + 3 d x \int_0^{10} \frac{x^2-x+1}{x+3} {\rm d}x\, ∫010x+3x2−x+1dx
syms x;
y = @(x) (x.^2-x+1)./(x+3);
z = integral(y,0,10)
%不定积分用int方便,定积分用integral更方便
f ( x ) = 1.2 x + 0.3 + x . s i n ( x ) f(x)=1.2x+0.3+x.sin(x) f(x)=1.2x+0.3+x.sin(x)
代码
f2 = @(x) (1.2*x+0.3+x*sin(x));
fsolve(f2,0)
f ( x , y ) = { 2 x − y − e − x − x + 2 y − e − y f(x,y)= \begin{cases} 2x-y-e^{-x} \\ -x+2y-e^{-y} \end{cases} f(x,y)={2x−y−e−x−x+2y−e−y使用初始值(x,y)=(-5,-5)
%首先定义函数root2d.m
function F = root2d(m)
F(1)=2*m(1)-m(2)-exp(-m(1));
F(2)=-m(1)+2*m(2)-exp(-m(2));
end
%将上列代码保存为函数文件,再运行下列程序
f2 = @root2d;
m0=[-5,-5];
m=fsolve(f2,m0);
x=m(1),y=m(2)
fzero()和fsolve()很类似,两个求解的精确度一般不一样,但是fzero的一个缺点是求导可能遇到不可导点的问题,所以初始值应该小心设置,同时这个方程估计不止一个0点,所以可以同时输出fval值。
项目 | 多项式型 | 非多项式型 | 一维 | 高维 |
---|---|---|---|---|
fzero() | 由初值得到一个实根 | 由初值得到一个实根 | 支持 | × \times × |
fsolve() | 由初值得到一个实根 | 由初值得到一个实根 | 支持 | 支持 |
示例
f=@(x)x.^2
fzero(f,0.1)
%结果输出NaN
fsolve(f,0)
%结果输出0.0063
f=@(x)x.^2
options=optimset('MaxIter',1e3,'TolFun',1e-10);
fsolve(f,0.1,options) %结果是1.9532e-04
fzero(f,0.1,options)%结果是NaN
求解
(1) f ( x ) = x 5 − 3.5 x 4 + 2.75 x 3 + 2.125 x 2 − 3.875 x + 1.25 f(x)=x^5-3.5x^4+2.75x^3+ 2.125x^2 -3.875x+1.25 f(x)=x5−3.5x4+2.75x3+2.125x2−3.875x+1.25
(2) f ( x ) = x 3 − 6 x 2 − 12 x + 81 f(x)=x^3-6x^2-12x+81 f(x)=x3−6x2−12x+81
%代码
roots([1 -3.5 2.75 2.125 -3.875 1.25])
roots([1 -6 -12 81])
Bracketing methods (e.g., bisection method): 二分法:
假设值所在的区间为 [ l , u ] [l,u] [l,u],且 f ( l ) f ( u ) < 0 f(l)f(u)<0 f(l)f(u)<0
Open methods (e.g., Newton-Raphson method)牛顿法:
假设 f ( x ) f(x) f(x)是连续的,且 f ′ ( x ) f'(x) f′(x)可导
n ! = 1 ∗ 2 ∗ 3 ∗ . . . ∗ n = f a c t ( n ) n!=1*2*3*...*n=fact(n) n!=1∗2∗3∗...∗n=fact(n)
n ! = n ∗ ( n − 1 ) ! = n ∗ f a c t ( n − 1 ) n!=n*(n-1)!=n*fact(n-1) n!=n∗(n−1)!=n∗fact(n−1)
n ! = n ∗ ( n − 1 ) ∗ ( n − 2 ) ! = n ∗ ( n − 1 ) ∗ f a c t ( n − 2 ) n!=n*(n-1)*(n-2)!=n*(n-1)*fact(n-2) n!=n∗(n−1)∗(n−2)!=n∗(n−1)∗fact(n−2)
……
function output = fact(n)
% fact recursively finds n!
if n==1
output = 1;
else
output = n * fact(n-1);
end
end