Matlab 用公式画图 求导函数的问题 请帮看看这个公式如果求导后再画图? 公式中其他参数值已经 只有x是变 怎么用matlab对复杂分段公式求导和对导数作图?

作者&投稿:令迫 (若有异议请与网页底部的电邮联系)
syms x q Es KT P Ppo LD B ni

z=(sqrt(2*Es* KT*Ppo))*((exp((-P) .* x) + (P .* x) - 1) + (ni/Ppo)^(2) .*(exp(P .* x)- P .* x -1)).^(1/2);
Cs=diff(z,x);
C=(Cs)./(Cs+1);

q = 1.6 * 10^(-19);
Es = 9.7*8.85418*10^(-12);
KT = 0.0259*1.6 * 10^(-19);
P = q/KT;
Ppo = 4 * 10^(21);
LD = sqrt(Es/(q*Ppo*P))* 10^(2);
B = (2*KT/q).*log(Ppo/(1.45*10^(16)));
ni=1.45*10^(16);

x=(-0.4:0.02:1.0);

C=eval(C);
z=eval(z);
Vi=abs(z);
V=Vi+x;

plot(V,C)

上面是程序,你先定义好符号运算的式子,在运算完毕后再将里面的数带入就行了!
祝你学习愉快!

因为你首先赋值了,所以求出来的z是一个71列的数,也就是一个向量,然后用diff求则是[X(2)-X(1) X(3)-X(2) ... X(71)-X(70)],所以只有70个。改进的方法是这样的
你将z=(sqrt(2*Es* KT*Ppo))*((exp((-P) .* x) + (P .* x) - 1) + (ni/Ppo)^(2) .*(exp(P .* x)- P .* x -1)).^(1/2); 中除了x之外的值在程序前面赋值出来,然后用syms x定义,再用diff(z),之后再x=(-0.4:0.02:1.0); 后面的工作就好弄了。呵呵

=(-0.4:0.02:1.0); %x 有71列
z=(sqrt(2*Es* KT*Ppo))*((exp((-P) .* x) + (P .* x) - 1) + (ni/Ppo)^(2) .*(exp(P .* x)- P .* x -1)).^(1/2); % z 有 71 和 x 一样

Cs=diff((sqrt(2*Es* KT*Ppo))*((exp((-P) .* x) + (P .* x) - 1) + (ni/Ppo)^(2) .*(exp(P .* x)- P .* x -1)).^(1/2)); %Cs 是对z的微分 奇怪的是微分后Cs的值只有 70 列了,不知道是不是求导函数用得不对;

C=(Cs)./(Cs+1); % C 有 70列与 x 一样;
Vi = abs(z); % Vi 有 71 列与 x 一样;
V=Vi+x; % V 有 71 列与 x 一样
plot(V,C) %这样 V 和 C 的值的列数就不一样了 所以不能plot。请帮看看是什么问题 我需要把这2个参数所对应的值画成图

matlab求导后作图~

利用diff求差分之后,得到的数列总比原来的数列的长度减少一
因为是后一个数减去前一个数
diff(y) 相当于y(2:end)-y(1:end-1)

而你的t是和原来的y一样长的,而a=diff(y)的长度比y少一
随意,t和a的长度不一致,报错


你可以再生成一个tt,让它等于原来t相邻两点的中点
那么tt就会和a长度相等,就可以画图
还有一点要注意,导数是dy/dx,
差分计算的时候只是计算了dy而没有除以dx
这正获得导数的图像,需要给dy的结果除以t的增量

t=[0:pi/20:2*pi];
y=atan((3*sin(pi*t))/4);
a=diff(y)/(pi/20);
tt=(t(2:end)+t(1:end-1))/2;

plot(tt,a)

y=-2:0.01:5;
f=(0.7*(y+1).^2).*(1+(0.011+y*0.02)*8).*tanh(0.5./y*8).*(y>0)+0*(y<=0);

df=diff(f);
plot(y(2:end),df)
按上面语句试试