function F =my_fun(x)F(1)=exp(-exp(-(x(1)+x(2))))-x(2)*(1+x(1)^2);F(2)=x(1)*cos(x(2))+x(2)*sin(x(1))-0.5;
end
1. 简单符号变量的创建
syms x % 观察工作区, sym是symbolic的缩写
syms a b c
2.符号方程的创建,两种方法
syms a x
y = a*x+x^2% y =str2sym('a*x+x^2')%Matlab 2017b 版本后推出
% 符号矩阵
syms alpha
M =[cos(alpha)-sin(alpha);sin(alpha)cos(alpha)]
二.简单运算
syms a b c d e
y = a + b
% a + b
x = c - d
% c - d
y1 = x*y
%(a + b)*(c - d)
y2 = y1/y
% c - d
y3 = y1^3%(a + b)^3*(c - d)^3
y4 =sqrt(y3)%((a + b)^3*(c - d)^3)^(1/2)
y5 =exp(y4)%exp(((a + b)^3*(c - d)^3)^(1/2))
三.符号表达式的整理
1.化简
% 化简
syms a
y=(cot(a/2)-tan(a/2))*(1+tan(a)*tan(a/2))simplify(y)%2/sin(a)
2.因式分解
%% 因式分解
factor(12)% 对常数进行因式分解
%223
syms m n x
y =-24*m^2*x-16*n^2*x
factor(y)%[-8, x,3*m^2+2*n^2]
y1=m^3-n^3factor(y1)%[ m - n, m^2+ m*n + n^2]
3.多项式展开
%% 多项式展开
syms a x
y = a*(x^2-a)^2+(x-2)expand(y)% a^3-2*a^2*x^2+ a*x^4+ x -2
4.合并
%% 合并
syms x y
z =(x+y)^2*y+5*y*x-2*x^3%expand(z)-2*x^3+ x^2*y +2*x*y^2+5*x*y + y^3collect(z,x)% y*x^2-2*x^3+(2*y^2+5*y)*x + y^3collect(z,y)% y^3+2*x*y^2+(x^2+5*x)*y -2*x^3
5.计算分子与分母
%[z1,z2]=numden(2.5)% 会报错,因为numden的输入变量不能是数值,只能是符号变量
% ans =sym(2.5);% sym函数可以将数值2.5转换为符号
[z1,z2]=numden(sym(2.5))% 对常数计算分子与分母
% z1 =5% z2 =2
syms x y
z =1/x*y+x/(x^2-2*y)[z1,z2]=numden(z)%z1分子,z2分母
% z1 =- x^2*y - x^2+2*y^2% z2 = x*(- x^2+2*y)
7.让结果显示的更加自然
syms x y
M =(1/x*y+x/(x^2-2*y)-x^2/(3+y)^2)^2;expand(M)% y^2/x^2+ x^4/(y^4+12*y^3+54*y^2+108*y +81)+(2*x^3)/(- x^2*y^2-6*x^2*y -9*x^2+2*y^3+12*y^2+18*y)-(2*y)/(- x^2+2*y)+ x^2/(x^4-4*x^2*y +4*y^2)-(2*x*y)/(y^2+6*y +9)
mupad % 未来的版本可能会移除这个工具箱,可以点击Matlab的主页,新建实时脚本
四.符号函数的求导
1.一元函数的导数
% 一元函数的导数
syms x
y = x^4-5*x^2+6diff(y)%求一阶导数
%4*x^3-10*x
diff(y,2)%求二阶导数
%12*x^2-10
y =cos(x)*tan(x)
dy =diff(y,10)%求十阶导数
simplify(dy)
y =sin(x)*tan(x)
dy =diff(y,10)%求十阶导数
simplify(dy)
%% 例题2: 多变量方程求解
clear;clc
syms a b c x
eqn =(a*x^2+ b*x + c ==0);
answ1 =solve(eqn, x)% 将x视为未知数求解
%-(b +(b^2-4*a*c)^(1/2))/(2*a)%-(b -(b^2-4*a*c)^(1/2))/(2*a)
answ2 =solve(eqn, a)% 将a视为未知数求解
%-(c + b*x)/x^2
【3】例题3:方程组求解
%% 例题3:方程组求解
clear;clc
syms u v a
eqn =[2*u + v == a, u - v ==1];
answ =solve(eqn,[u, v])
answ.u
answ.v
[answ_u, answ_v]=solve(eqn,[u, v])
2.其他类型
%% solve 可能会警告
syms x
eqn =(sin(x)== x^2-1);solve(eqn, x)% 警告: Cannot solve symbolically. Returning a numeric approximation instead.% 画图看看
fplot(sin(x),[-22])% fplot函数可绘制表达式的图形
hold on
fplot(x^2-1,[-22])
3.vpasolve函数求解
%% vpasolve函数求解
% 用vpasolve函数指定求[02]上的解
syms x
eqn =sin(x)== x^2-1;vpasolve(eqn, x,[02])vpasolve(eqn, x,[-10])vpasolve(eqn, x,[-1010])% vpasolve returns all solutions only for polynomial equations.% For nonpolynomial equations, there is no general method of finding all solutions.% When you look for numerical solutions of a nonpolynomial equation or system that has several solutions,% then, by default, vpasolve returns only one solution,if any.% To find more than just one solution, set random to true.% Now, calling vpasolve repeatedly might return several different solutions.vpasolve(eqn, x,'random',true)vpasolve(eqn, x,-5)% 给定搜索的起始点
4.ezplot函数
%% 来看一个更复杂的例子
syms x y
eqn =[x^2-2*x -3*x*y ==10, y^4==exp(-2*x/3*y)][answ_x, answ_y]=vpasolve(eqn,[x, y],'random',true)% 画图看看
ezplot(x^2-2*x -3*x*y ==10,[-1010])
hold on
ezplot(y^4==exp(-2*x/3*y),[-1010])
close % 关闭图形
5.fimplicit函数
% ezplot函数比较鸡肋,下面这个函数比较厉害哦
fimplicit(x^2-2*x -3*x*y ==10,[-1010],'r')% R2016b版本之后才有
hold on
fimplicit(y^4==exp(-2*x/3*y),[-1010],'b')% R2016b版本之后才有
[answ_x, answ_y]=vpasolve(eqn,[x, y],[-4-1;15])% 指定搜索的范围:x位于[-4-1], y位于[15]
hold on
plot(answ_x, answ_y,'ko','MarkerSize',10)%plot(double(answ_x),double(answ_y),'ko','MarkerSize',10)%double可以将我们的符号变量转换为数值变量