MATLAB中偏导数的计算
可以调用 diff 函数求导。
举例说明:
先定义符号 x、y 以及符号二元函数表达式 z,然后调用 diff 函数求偏导,代码如下:
clc;clear;
syms x y
z=x^2+y^2+exp(x*y);
z_x=diff(z,x,1)
z_y=diff(z,y,1)
z_x2=diff(z,x,2)
z_y2=diff(z,y,2)
z_xy=diff(z,x,y)
结果如下:
z_x =
2*x + y*exp(x*y)
z_y =
2*y + x*exp(x*y)
z_x2 =
y^2*exp(x*y) + 2
z_y2 =
x^2*exp(x*y) + 2
z_xy =
exp(x*y) + x*y*exp(x*y)
图中调用了5次diff函数,分别计算了 z 对 x 的一阶偏导,z 对 y 的一阶偏导,z 对 x 的二阶偏导,z 对 y 的二阶偏导,以及 z 对 x,y 都求一次偏导。
例子中所用的调用格式为: diff(f,var,n)
f 为符号表达式,也可以是符号函数(这个数据类型低版本的matlab没有)。n 为求导次数,缺省为1。var 为求导的符号变量,可以缺省(matlab会根据表达式自己选择一个),但不建议缺省,除非表达式只含有一个符号变量。
此外,matlab还允许 diff(f,n,var)与 diff(S,v1,v2,…,vn)的调用形式。
diff(f,v1,v2,…,vn) 会把表达式 f 对变量 v1,v2 等 n 个变量都求一次偏导,得到 f 的 n 阶偏导。
matlab求导后赋值计算
MATLAB 函数先求导再赋值
简单的说就是建立如下m文件
function j=myfun(x)
j=diff(x^2-1)
进行如下调用
s=myfun(2)
得到
s=[ ]
也就是说在函数myfun调用时,是先赋值后求导的。
MATLAB 函数先求导再赋值
可以用syms命令先令未知量为符号变量。然后对符号式子diff求导
再用subs命令将符号未知量代为数值,进式子里。
具体用法参见 help syms
help subs
为什么非要把求导的东西放在函数里调用呢。试试能不能把求导放在主函数里。
求助MATLAB求偏导之后赋值的问题
我运行时不会,或者你试试vpa函数
vpa(g,6)
输出六位数字
matlab 关于求偏导数具体值的问题
把
for i = 2:100
a(i)=1; %a2=a3=a4=…=a_num=1
end
改成
for i = 2:100
eval([\’a\’,num2str(i) \’=1;\’])
end
你原来的写法是把数组a的第2到第100个元素(即a(2)-a(100))赋值为1,而符号变量a2-a100仍然存在。
评论0