Matlab 用公式画图 求导函数的问题 请帮看看这个公式如果求导后再画图? 公式中其他参数值已经 只有x是变
x=(-0.4:0.02:1.0);%x有71列z=(sqrt(2*Es*KT*Ppo))*((exp((-P).*x)+(P.*x)-1)+(ni/Ppo)^(2).*...
x=(-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个参数所对应的值画成图
Cs 是应该等于 z对其中的x求导,其他的参数都已经有具体的数值在之前赋值过了。我觉得问题出在这一步 我直接用的 Cs=diff(z) 来对其求导的
非常感谢一楼的回答 我按你的方式试了 除了x其他值我都在之前赋值了 但是syms x定义时候那个x是紫色的,然后运行结果是??? Undefined function or variable 'x'. 还说说x 没定义是怎么回事呢?我的全部程序在问题补充里面,请你再帮我看看谢谢!
全部程序如下:
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);
z=(sqrt(2*Es* KT*Ppo))*((exp((-P) .* x) + (P .* x) - 1) + (ni/Ppo)^(2) .*(exp(P .* x)- P .* x -1)).^(1/2);
syms 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));
x=(-0.4:0.02:1.0);
C=(Cs)./(Cs+1);
Vi = abs(z);
V=Vi+x;
plot(V,C) 展开
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个参数所对应的值画成图
Cs 是应该等于 z对其中的x求导,其他的参数都已经有具体的数值在之前赋值过了。我觉得问题出在这一步 我直接用的 Cs=diff(z) 来对其求导的
非常感谢一楼的回答 我按你的方式试了 除了x其他值我都在之前赋值了 但是syms x定义时候那个x是紫色的,然后运行结果是??? Undefined function or variable 'x'. 还说说x 没定义是怎么回事呢?我的全部程序在问题补充里面,请你再帮我看看谢谢!
全部程序如下:
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);
z=(sqrt(2*Es* KT*Ppo))*((exp((-P) .* x) + (P .* x) - 1) + (ni/Ppo)^(2) .*(exp(P .* x)- P .* x -1)).^(1/2);
syms 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));
x=(-0.4:0.02:1.0);
C=(Cs)./(Cs+1);
Vi = abs(z);
V=Vi+x;
plot(V,C) 展开
展开全部
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=(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)
上面是程序,你先定义好符号运算的式子,在运算完毕后再将里面的数带入就行了!
祝你学习愉快!
追问
恩 按你这么改程序是没有问题了 但是我想再问问eval是什么意思呢?
追答
eval是给符号表达式带入具体的数值。
EVAL Execute string with MATLAB expression.
EVAL(s), where s is a string, causes MATLAB to execute
the string as an expression or statement.
[X,Y,Z,...] = EVAL(s) returns output arguments from the
expression in string s.
The input strings to EVAL are often created by
concatenating substrings and variables inside square
brackets.
展开全部
因为你首先赋值了,所以求出来的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); 后面的工作就好弄了。呵呵
你将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); 后面的工作就好弄了。呵呵
追问
谢谢你的回答,出x之外的值我事先都赋值了只是我没粘贴出来,我试了你的方式,先用syms x定义 我不太懂这个syms的意思但是定义后 x 是紫色的 然后diff(z),之后再x=(-0.4:0.02:1.0);但是运行就说??? Undefined function or variable 'x'. 请看截图是怎么回事?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
=(-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个参数所对应的值画成图
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个参数所对应的值画成图
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询