精华内容
下载资源
问答
  • Matlab 符号函数

    2013-06-21 12:54:12
    化简符号表达式计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简. collect(f): 函数用途是合并多项式中相同的项, 如: syms x t f=...

    Matlab化简符号表达式

    化简符号表达式计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简.
    1. collect(f): 函数用途是合并多项式中相同的项, 如: syms x t
      f=(1+x)*t+x*t;
      collect(f)
    2. expand(f):展开多项式, syms x
      f=x*(x*(x-1)+3)+2;
      expand(f);
    3. horner(f) 对转换多项式为Horner形式, 这种形式的特点是乘法嵌套, 其有着不错的数值计算性质. syms x;
      f=x^3+2*x^2+5*x-2
      horner(f)
    4. factor(f): 多项式的因式分解. 如果无法在有理数的范围内作分解, 那么返回的结果还是输入值. syms x;
      f=x^3-6*x^2+11*x-6;
      factor(f)
    5. simplify(f): 通过数学运算化简符号表达式 syms x;
      f=cos(x)^2+sin(x)^2
      simplify(f)
    6. simple(f): 威力比较强大, 它会尝试各种办法来化简符号表达式, 其化简的标准是使得符号表达式的长度最短. syms x
      f=sin(x)^2+cos(x)^2;
      simple(f)
    7. subexpr(f): 通过计算机自动寻找, 将表达式中多次出现的因式用简短的符号表示, 返回的结果中包含替换之后的表达式, 以及被替换的因式. syms x a;
      f=solve(x^2+a*x-1);
      r=subexpr(f);
    8. pretty(f): 用"我们人能看到懂"的表示方法表示出符号表达式. 不过做好心理准备, 可能这样显示出来的表达式更发指! syms a x;
      f=solve(x^2+a*x-1);
      pretty(f);
    展开全文
  • MATLAB符号函数的求导

    千次阅读 2020-07-06 21:27:05
    文章目录MATLAB符号函数的求导1、符号函数求导1.1 一元符号函数求导1.2 多元函数的导数2、差分2.1 向量的差分2.2 矩阵的差分 MATLAB符号函数的求导 MATLAB中可以使用命令diff对符号函数进行求导,并且当diff作用到...

    声明:本文章中数据来自清风老师数学建模课程

    MATLAB符号函数的求导

    MATLAB中可以使用命令diff对符号函数进行求导,并且当diff作用到向量或者是矩阵时还可以求差分

    1、符号函数求导

    1.1 一元符号函数求导

    先定义一元符号函数

    syms x
    y = x^4-5*x^2+6
    

    进行求导,当diff作用到符号函数上时可以对符号函数进行求导

    • 第一个参数传入符号函数
    • 第二个参数传入要求几阶导,第二个参数空着默认求1一阶导
    diff(y,1) %求一阶导数  diff(y)默认求一阶导
    % 4*x^3 - 10*x
    diff(y,2) %求二阶导数
    % 12*x^2 - 10
    

    求导后分析结果遇到的问题
    下面我们用diff对cos(x)*tan(x)进行求导

    syms x
    y = cos(x)*tan(x)
    dy = diff(y,10)  %求十阶导数
    
    240*sin(x)*(tan(x)^2 + 1)^2 - cos(x)*tan(x) - 4032*sin(x)*(tan(x)^2 + 1)^3 + 32640*sin(x)*(tan(x)^2 + 1)^4 - 79360*sin(x)*(tan(x)^2 + 1)^5 - 10*sin(x)*(tan(x)^2 + 1) - 3360*cos(x)*tan(x)*(tan(x)^2 + 1)^2 + 57120*cos(x)*tan(x)*(tan(x)^2 + 1)^3 - 1680*cos(x)*tan(x)^3*(tan(x)^2 + 1) - 357120*cos(x)*tan(x)*(tan(x)^2 + 1)^4 + 353792*cos(x)*tan(x)*(tan(x)^2 + 1)^5 + 6720*cos(x)*tan(x)^5*(tan(x)^2 + 1) - 5760*cos(x)*tan(x)^7*(tan(x)^2 + 1) + 512*cos(x)*tan(x)^9*(tan(x)^2 + 1) + 480*sin(x)*tan(x)^2*(tan(x)^2 + 1) - 4032*sin(x)*tan(x)^4*(tan(x)^2 + 1) + 7680*sin(x)*tan(x)^6*(tan(x)^2 + 1) - 2560*sin(x)*tan(x)^8*(tan(x)^2 + 1) + 87360*cos(x)*tan(x)^3*(tan(x)^2 + 1)^2 - 1105920*cos(x)*tan(x)^3*(tan(x)^2 + 1)^3 + 1841152*cos(x)*tan(x)^3*(tan(x)^2 + 1)^4 - 345600*cos(x)*tan(x)^5*(tan(x)^2 + 1)^2 + 1304832*cos(x)*tan(x)^5*(tan(x)^2 + 1)^3 + 128512*cos(x)*tan(x)^7*(tan(x)^2 + 1)^2 - 22176*sin(x)*tan(x)^2*(tan(x)^2 + 1)^2 + 345600*sin(x)*tan(x)^2*(tan(x)^2 + 1)^3 - 1372160*sin(x)*tan(x)^2*(tan(x)^2 + 1)^4 + 218880*sin(x)*tan(x)^4*(tan(x)^2 + 1)^2 - 1858560*sin(x)*tan(x)^4*(tan(x)^2 + 1)^3 - 316160*sin(x)*tan(x)^6*(tan(x)^2 + 1)^2 + 90*cos(x)*tan(x)*(tan(x)^2 + 1)
    

    我们看到对其求10阶导后的结果是无比的长,那么我们看看能不能用mupad工具箱来让结果显示的更加自然呢?
    然而并不理想,见下图:
    在这里插入图片描述
    mupad工具箱仅能对待整理的式子进行整理,显示出“人能容易看懂的”,但是无奈我们的结果太麻烦了
    这时候我们可以尝试一下simplify来进行化简整理

    如下图所示,结果很明显,是我们想要的形式
    在这里插入图片描述

    那么为什么我们使用diff对cos(x)*tan(x)求导的结果这么复杂呢,其实它的求导算法就是莱布尼兹公式的展开。其实我们知道cos(x)*tan(x)等于sin(x),求高次导数一定是一个简单的式子

    1.2 多元函数的导数

    参数:

    • 第一个参数是待求导符号函数
    • 第二个参数是要对那个自变量求偏导
    • 第三个参数是要求几阶偏导数

    当连续对自变量求偏导时,放在前面的自变量先求偏导,后面的自变量后求偏导

    syms x1 x2 x3
    y1 = x1^5*x2+x2*x3-x1^2*x3
    py1 = diff(y1,x1,1) % 对x1求一阶偏导
    % 5*x2*x1^4 - 2*x3*x1
    py2 = diff(y1,x1,2) % 对x1求二阶偏导
    % 20*x2*x1^3 - 2*x3
    py3 = diff(y1,x1,x2) % 先对x1求偏导,再对x2求偏导
    % 5*x1^4
    py4 = diff(y1,x2,x1) % 先对x2求偏导,再对x1求偏导
    % 5*x1^4
    

    2、差分

    注意,如果diff函数作用的对象不是符号函数,而是矩阵,那么对应的功能是求差分。

    2.1 向量的差分

    默认求1阶差分

    A=[4 5 6 3 2 1];
    diff(A)  % 求向量A的一阶差分     1     1    -3    -1    -1
    diff(A,2)  % 在一阶差分的基础上再差分一次     0    -4     2     0
    

    2.2 矩阵的差分

    默认是列的方向上求差分(下一行减上一行),且默认求一阶差分。
    第三个参数指定为2时,在行的方向上求差分(后一列减前一列)
    第二个参数用于指定求几阶差分,默认一阶差分

    A=[4 5 6; 
         7 4 2;
         5 6 2]
    A1=diff(A)  % 下一行减去上一行求一阶差分
    %      3    -1    -4
    %     -2     2     0
    A2=diff(A,2) % 下一行减去上一行求二阶差分(在一阶差分的基础上再差分一次)
    %     -5     3     4
    A3=diff(A,2,1) % 最后面的1表示在行上进行差分(在列的方向上进行差分)
    %     -5     3     4
    A4=diff(A,1,2)  % 后一列减去前一列求一阶差分, 最后面的2表示在列上进行差分(在行的方向上进行差分)
    %      1     1
    %     -3    -2
    %      1    -4
    A4=diff(A,2,2) % 后一列减去前一列求二阶差分
    %      0
    %      1
    %     -5
    
    
    展开全文
  • 存在两个主要函数,分别是 `fprintMatPy.m` 和 `fprintMatPy2.m`,它们将符号表达式转换为 Python 函数。 `fprintMatPy.m` 按原样提取函数,其中 `fprintMatPy2.m` 能够拆分长方程(st 由比给定值多的字符组成),使...
  • MATLAB 符号函数转换为数值函数?

    千次阅读 2019-07-17 16:06:04
    利用 matlabFunction 例如  syms x  fun = @(x) exp(-x.^2).*log(x).^2;  g = matlabFunction(fun )

    利用 matlabFunction
    例如

      syms x
      fun = @(x) exp(-x.^2).*log(x).^2;
      g = matlabFunction(fun )
    
    展开全文
  • MATLAB 函数内参(常量)替换 有的时候函数初定义的时候会包含常量或内参,如下列代码所示 syms x(t) r xm t0 x0 eqns=diff(x)==r*(1-x/xm)*x; cons=x(t0)==x0; y=simplify(dsolve(eqns,cons)) 那需要替换只需要一...

    MATLAB 符号函数变量替换为常量

    有的时候函数初定义的时候会包含常量或内参,如下列代码所示

    syms x(t) r xm t0 x0
    eqns=diff(x)==r*(1-x/xm)*x;
    cons=x(t0)==x0;
    y=simplify(dsolve(eqns,cons))
    

    那需要替换只需要一行语句即可

    r=0.01;
    y(t)=subs(y);
    

    在这里插入图片描述

    Fig 1.替换前后效果如图
    展开全文
  • 1.求解二元一次方程组 syms x y; s=solve(a*x+b*y==10,a*x-b*y==20,x,y); sol_x = s.x; sol_y = s.y; 其中s为结构体 2.求解微分方程组 y=dsolve('Dy=(10-0.02*t)*t','y(0)=4','t');...其中“Dy”表示对y的1阶导数...
  • Matlab符号函数练习

    千次阅读 2015-05-30 12:05:49
    1.用2种方式创建符号表达式f=sin(x)+e^x 方法一 clear clc x=sym('x'); f=sin(x)+exp(x) 结果 f = exp(x) + sin(x) >> 方法二 clear clc syms x; f=sin(x)+exp(x)结果 f = exp(x) + sin(x) >> 2....
  • 首先来赋值先,用 syms 可以声明符号变量,然后用符号变量,可构建符号函数: syms u1x u2x u3x u4x syms x0 x1 x2 x3 x4 x5 syms u0 u1 u2 u3 u4 syms x syms h u1x = (x-x0)*(u1-u0)/h + u0; u2x = (x-x1)*(u2-u1)...
  • MATLAB符号函数运算与conj

    千次阅读 2016-11-07 09:02:13
    clc clear syms x1 x2 x3 x4 x5 x6 ... % 注意,在使用符号函数运算时,在变量后面需要加一个点“.” %否则默认是复数运算,结果含有conj % dxx=kron(x',x')的运算结果为: % dxx = % % [ conj(x1)^2, conj(x1
  • syms P U I TP = (1000*I)/1001 - (5*U)/2002 - U/((2796735368597078016000000*T*exp(-((7378697629483820646400*I)/9009 + (18446744073709551616000*U)/9009 - 6364126705429795*T*lambertw(0, (2*exp((576460752...
  • Linux下使用Matlab符号函数出错的解决办法(转)[@more@]在教新版本Linux中使用Matlab的符号函数库及相关功能时,有时候可能会出错,错误的代码大致为:Unable to load mex file: /us...
  • 1 符号函数的等高线图 1) ezcontour(f) : 画出二元符号函数 f=f(x,y) 的等高线图。 函数 f 将被显示于默认的平面区域 [-2pi<x<2pi, -2pi<y<2pi]内。 系统将根据函数变动的激烈程度自动选择相应的计算...
  • 先打开MATLAB软件界面 第一步打开simulink 第二步在command windows输入 simulink然后enter,等待 有很多模块库 第三步:常用的simulink库 打开以后会看到simulink library browser这个界面 最常用的就是simulink和...
  • 计算条件 主要是以隐极感应电机为例,以隐极机为例是因为隐极机的气隙是均匀的,所以定子方绕组之间的互感是相同的(均为-1/2ms,其中ms为两相绕组“重合”时候的互感,也是两绕组之间最大的互感,又ms=sqrt(L1L2),...
  • 如何打开simulink:启动simulink:先打开MATLAB软件界面第一步打开simulink第二步在command windows输入 simulink然后enter,等待有很多模块库第三步:常用的simulink库打开以后会看到simulink library browser这个...
  • 1.求极限 limit(f,x,a) 计算f(x)当x趋向于a的极限 limit(f,x,a,'right’) 计算右极限 limit(f,x,a,'left’) 计算左极限 2.求导数 diff(s,‘v’) 求s... taylor(exp(x),x,0,‘order’,8) 函数exp(X)在0点进行7次泰勒展开

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,185
精华内容 874
关键字:

matlab符号函数

matlab 订阅