matlab怎么对函数求导
时间:2022-12-01 23:14 来源:未知 作者:永春小孩 点击:载入中...次
t=0:0.02:0.18 y=[415.7 415.68 415.65 415.55 415.38 415.2 415.07 414.96 414.85 414.5 ] n=5 p=polyfit(t,y,n)%5次多项式 dp=polyder(p)%导函数 tt=linspace(-.05,0.2); plot(t,y,'ro');hold on a=plotyy(tt,polyval(p,tt),tt,polyval(dp,tt) 在分析函数的时候,往往需要求解函数的导数,用matlab其实是可以求解导数的,本文以arctan的求导为例。 材料/工具 matlab软件 用matlab对函数求导及其极值 ,可以先用diff()函数求出y',然后令y'=0,用vpasolve()解出x值。实现代码如下: syms x z=exp(4.1399-0.0235*x); y=0.000157*z*(1-z)*(1+z)^3/((1+z)^4+0.00004476*z^2)^(3/2); dy=diff(y,1) x=vpasolve(dy==0) 方法 打开matlab软件; 首先,求导属于符号运算,对于一般的数值型的变量是不能进行求导的。 其次,用@ 定义的匿名函数只是一个函数句柄,必需对其进行调用才能真正使得函数生效。 其实,也并非用@ 定义的函数就不能求导,重要的是满足上面的两点:要调用函数,而且得 输入一下指令,清空工作空间; 本来不想说的。 你的前几个数据的y是相同的,也就是说是它们的数值导数肯定为零。但不意味着这些点都是极值点,这些绝对是你的数据精度的问题。 解析式比数值的优势,我觉得就是“精度”,解析式能求出任何一点的值,而数值只是有限的几个点是己知 clear; matlab求导命令diff调用格式: diff(函数) , 求的一阶导数; diff(函数, n) , 求的n阶导数(n是具体整数); diff(函数,变量名), 求对的偏导数; diff(函数, 变量名,n) ,求对的n阶偏导数; clc; 输入一下指令定义一个符号变量,如图所示; matlab的求导命令与求导法 建立符号变量命令sym和syms调用格式: x=sym('x'), 建立符号变量x; syms x y z , 建立多个符号变量x,y,z; matlab求导命令diff调用格式: diff(函数) , 求的一阶导数; diff(函数, n) , 求的n阶导数(n是具体整数 sysm x; MATLAB中,diff函数用于求一阶导数 例如y=x^2+3*x 求在x=2下的一阶导数值 程序为:x = 2;subs(diff(y,x)); 具体到题主的问题,程序为 syms t m=0.650; b=0.97; g=9.79; h=7.86; y=h+(g-0.2233)*(1-exp(-b*t))/b^2-(g-0.2233)*t/b; T=0:0.1:1.5; 输入一下指令,定义一个函数; dy=diff(y);plot(x(2:end),dy,'b');xlim([0,86]); f1=atan(x); diff(f,v,n) %对符号函数f以v为自变量求n阶导,返回的是符号函数(表达式)。 代码案例: y1 = 'log((2*tan(x)+1)/(tan(x)+2))' %log在matlab中求自然对数 y11=diff(y1) %求导 simple(y11) %化简 y2 = 'sin(e^(x^2+3*x-2))' y21=diff(y2) simple 输入一下指令求解导函数的符号解; diff(f,v,n) %对符号函数f以v为自变量求n阶导,返回的是符号函数(表达式)。 代码案例: y1 = 'log((2*tan(x)+1)/(tan(x)+2))' %log在matlab中求自然对数 y11=diff(y1) %求导 simple(y11) %化简 y2 = 'sin(e^(x^2+3*x-2))' y21=diff(y2) simple df1=diff(f1,x); 在matlab中,可以利用diff函数对隐函数求导。其调用格式如下: diff(函数) % 求一阶导数;diff(函数, n) % 求n阶导数(n是具体整数);diff(函数,变量名) % 求偏导数;diff(函数, 变量名,n) % 求n阶偏导数; 下面通过示例来说明diff函数对隐函 输入一下指令查看求导的结果,如图所示; 你好! 我依照你举得例子,简单编写了一个程序,为了清晰起见,语句写得比较简单,你看看: syms x1 x2 x3 f = x1^2+x2^2+x3^2; fx1 = diff(f,x1); fx2 = diff(f,x2); fx3 = diff(f,x3); x11 = input('请输入整数x1:'); x22 = input('请输入整 subplot(1,2,1); 可通过syms将函数句柄转换为符号函数用diff求导后再通过matlabFunction转换为函数句柄 clc;clearf = @(x) x.^2 + 2.* x + 1 % 通过函数句柄建立匿名函数syms x % 通过符号变量将匿名函数转换为符号函数y = f(x)g = matlabFunction(diff(y)) % 通 ezplot(f1),grid on; 你写个函数就行了。F求导看都能看出来,用啥diff,求导后函数为: f=exp(x)+3*x^2; 你可以写个函数 function f=fdiff(x) f=exp(x)+3*x^2; 然后在写你的循环: for i=1:50 f(i)=feval(fdiff,i); end 即可。 subplot(1,2,2); >> sol=dsolve('DI=I*(100-I)') sol = 0 100 -100/(exp(C3 - 100*t) - 1) >> I=str2func(['@(t,C3)',vectorize(char(sol(3)))]) I = @(t,C3)-100./(exp(C3-100.*t)-1) >> C3=1;t=-0:0.01:0.5; plot(t,I(t,C3)) 应该有初值,有初值就简单了,我假 ezplot(df1),grid on; 例如: 如果e是自然对数的底,那么 syms x y; y=(exp(x)-exp(-x))/(exp(x)+exp(-x)); diff(y) ans = 1-(exp(x)-exp(-x))^2/(exp(x)+exp(-x))^2 如果e是某常量,那么 syms x y e; y =(e^x-e^(-x))/(e^x+e^(-x)); diff(y) ans = (e^x*log(e)+e^(-x 查看求导结果如下 可以用syms命令先令未知量为符号变量。然后对符号式子diff求导 再用subs命令将符号未知量代为数值,进式子里。 具体用法参见 help syms help subs 为什么非要把求导的东西放在函数里调用呢。试试能不能把求导放在主函数里。 扩展阅读,以下内容您可能还感兴趣。 matlab语言怎样表示x的导数 diff(f,v,n) %对符号函数f以v为自变量求n阶导,返回的是符号函数(表达式)。 代码案例: y1 = 'log((2*tan(x)+1)/(tan(x)+2))' %log在matlab中求自然对数 y11=diff(y1) %求导 simple(y11) %化简 y2 = 'sin(e^(x^2+3*x-2))' y21=diff(y2) simple(y21)。 如何用matlab对隐函数求导 在matlab中,可以利用diff函数对隐函数求导。其调用格式如下: diff(函数) % 求一阶导数; diff(函数, n) % 求n阶导数(n是具体整数); diff(函数,变量名) % 求偏导数; diff(函数, 变量名,n) % 求n阶偏导数; 下面通过示例来说明diff函数对隐函数求导的方法。 题目:隐函数y^3 - x^3 - 1 = 0的导数。 syms x y % 定义变量F = y^3 - x^3 - 1 % 隐函数 F = y^3 - x^3 - 1 = 0 dy1 = - diff(F,x)/diff(F,y) % 一阶导数 dy2 = diff(dy1,x) + diff(dy1,y)*dy1; % 二阶导数 dy2 = simplify(dy2); 计算结果: dy1 = x^2/y^2 dy2 = -2*x*(-y^3+x^3)/y^5 matlab中,一个函数有多个自变量,怎么分别求导并代入具体数值,举个例子f=x1+x2+x3,分 你好! 我依照你举得例子,简单编写了一个程序,为了清晰起见,语句写得比较简单,你看看: syms x1 x2 x3 f = x1^2+x2^2+x3^2; fx1 = diff(f,x1); fx2 = diff(f,x2); fx3 = diff(f,x3); x11 = input('请输入整数x1:'); x22 = input('请输入整数x2:'); x33 = input('请输入整数x3:'); subs(fx1,x1,x11) subs(fx2,x2,x22) subs(fx3,x3,x33) 输出的subs就是赋值之后的每一个偏导的结果,你可以试着运行一下。 diff默认对x求导,如果有好几个x,则默认对x1求导,默认求一介导。 祝好~更多追问追答追问可是我有7个变量,这样写程序是不是太长了,老师说可以简化,能不能用循环或者向量简化追答我觉得是可以的,不过我自己没法尝试,你可以试试~追问多谢 matlab 用句柄传入的函数如何应用diff函数对其求导数?或者有无替代方法把一个函数传进来并且求导。 可通过syms将函数句柄转换为符号函数 用diff求导后 再通过matlabFunction转换为函数句柄 clc;clearf = @(x) x.^2 + 2.* x + 1 % 通过函数句柄建立匿名函数 syms x % 通过符号变量将匿名函数转换为符号函数 y = f(x) g = matlabFunction(diff(y)) % 通过matlabFunction将符号函数转换为匿名函数 matlab对函数求导后的调用 你写个函数就行了。F求导看都能看出来,用啥diff,求导后函数为: f=exp(x)+3*x^2; 你可以写个函数 function f=fdiff(x) f=exp(x)+3*x^2; 然后在写你的循环: for i=1:50 f(i)=feval(fdiff,i); end 即可。 (责任编辑:ku987小孩) |