用mAtlAB求函数在指定点的数值导数
clear; clc; syms x f = sqrt(x^2+1); diff_f = diff(f); y1 = subs(diff_f,x,1) y2 = subs(diff_f,x,2) y3 = subs(diff_f,x,3) 结果:y1 = 0.7071 y2 = 0.8944 y3 = 0.9487
syms xy=x^2;dy=diff(y);x=3;eval(dy)自己测试下看
f(x)=根号(x^2+1) x=1,2,3.1、MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点
>> syms x>> y=x^2+3*x y = x^2+3*x>> subs(y,1) ans = 4
diff函数求导,产生的导数是字符型的,不是数字型的;也就是说,diff函数求导产生的是函数的导函数,不是具体的某一点的数值;diff(函数) , 求函数的一阶导数; diff(函数, n) , 求函数的n阶导数(n是具体整数); diff(函数, 变量名) ,对变量的偏导数;diff(函数, 变量名,n) ,对变量的n阶偏导数;
因为你没有说明是什么具体的函数,我就以多项式函数为例吧!matlab中有个函数叫polyval,用来计算多项式在某点的函数值.示例程序:我们有多项式:f(x)=3*x^2 + 2*x +1 计算此函数在x=5处的值的代码:p = [3 2 1]; polyval(p,5) 计算结果为:ans=86
MATLAB中,diff函数用于求一阶导数例如y=x^2+3*x 求在x=2下的一阶导数值程序为:x = 2;subs(diff(y,x));具体到题主的问题,程序为syms tm=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;t_1 = subs(diff(y),t,T);
这是一些离散的点,导数的概念要看怎样定义.一般的做法是采用某种方法进行插值,然后对插值的曲线求导数.插值方法可以用分段三次插值或样条插值,但类似线性插值之类的方法不太适合.
用diff()来求导函数,用eval()来计算导数值.具体代码如下:运行结果为: