如何在具有上限设置为正弦函数的 Matlab 中求解积分?
How to solve integral in Matlab having an upper limit set as the sine function?
我在执行下面的代码以在 matlab 中计算一个简单积分时出错。代码如下。
%Parameter Innitizlation
epsilon0=8.85*10^-12;
d_mos=6*10^-9;
epsilon_mos=5*epsilon0;
d_g=30*10^-9;
epsilon_g=19*epsilon0;
vt=-2;
e=1.6*10^-19;
n=[];
i=1;
t2=[];
u=60; % cm^2/v*S
h=1.05*10^-34; % ev*s
%Capacitor Calaculation
c_g=(epsilon_g/d_g);
c_mos=(epsilon_mos/d_mos);
c_t=1/((1/c_g)+(1/c_mos));
%Input Voltage
t = 0:0.2:10;
vg = 5*sin(t);
%Surface Voltage
fun=1-(c_t/c_g);
vs = integral(fun,0,vg);
figure
plot(t,vs)
title('vs vs time')
错误
我得到的错误是
“???未定义的函数或方法 'integral' 用于 'double' 类型的输入参数。
错误 ==> MIT 在 29
vs = 积分(乐趣,0,vg);“”
再次阅读您的标题,听起来您想对从 0 到不同边界的常数进行积分。所以有两处错误:
你的函数不是一个函数,只是一个双精度函数,要修复这个变化,请fun
一个像这样的匿名函数
fun=@(t) (1-(c_t/c_g))*ones(size(t));
ones(size(t))
只是为了让每个输入都有一个输出。
你需要有一个单一的积分上限和下限,为了解决这个问题,你的积分在 arrayfun
中,像这样:
vs = arrayfun(@(xu) integral(fun,0,xu), vg);
有关arrayfun
的更多信息。
完整代码在这里
epsilon0=8.85*10^-12;
d_mos=6*10^-9;
epsilon_mos=5*epsilon0;
d_g=30*10^-9;
epsilon_g=19*epsilon0;
vt=-2;
e=1.6*10^-19;
n=[];
i=1;
t2=[];
u=60; % cm^2/v*S
h=1.05*10^-34; % ev*s
%Capacitor Calaculation
c_g=(epsilon_g/d_g);
c_mos=(epsilon_mos/d_mos);
c_t=1/((1/c_g)+(1/c_mos));
%Input Voltage
t = 0:0.2:10;
vg = 5*sin(t);
%Surface Voltage
fun=@(t) (1-(c_t/c_g))*ones(size(t));
vs = arrayfun(@(xu) integral(fun,0,xu), vg);
figure
plot(t,vs)
title('vs vs time')
我在执行下面的代码以在 matlab 中计算一个简单积分时出错。代码如下。
%Parameter Innitizlation
epsilon0=8.85*10^-12;
d_mos=6*10^-9;
epsilon_mos=5*epsilon0;
d_g=30*10^-9;
epsilon_g=19*epsilon0;
vt=-2;
e=1.6*10^-19;
n=[];
i=1;
t2=[];
u=60; % cm^2/v*S
h=1.05*10^-34; % ev*s
%Capacitor Calaculation
c_g=(epsilon_g/d_g);
c_mos=(epsilon_mos/d_mos);
c_t=1/((1/c_g)+(1/c_mos));
%Input Voltage
t = 0:0.2:10;
vg = 5*sin(t);
%Surface Voltage
fun=1-(c_t/c_g);
vs = integral(fun,0,vg);
figure
plot(t,vs)
title('vs vs time')
错误
我得到的错误是 “???未定义的函数或方法 'integral' 用于 'double' 类型的输入参数。
错误 ==> MIT 在 29 vs = 积分(乐趣,0,vg);“”
再次阅读您的标题,听起来您想对从 0 到不同边界的常数进行积分。所以有两处错误:
你的函数不是一个函数,只是一个双精度函数,要修复这个变化,请
fun
一个像这样的匿名函数fun=@(t) (1-(c_t/c_g))*ones(size(t));
ones(size(t))
只是为了让每个输入都有一个输出。你需要有一个单一的积分上限和下限,为了解决这个问题,你的积分在
arrayfun
中,像这样:vs = arrayfun(@(xu) integral(fun,0,xu), vg);
有关
arrayfun
的更多信息。
完整代码在这里
epsilon0=8.85*10^-12;
d_mos=6*10^-9;
epsilon_mos=5*epsilon0;
d_g=30*10^-9;
epsilon_g=19*epsilon0;
vt=-2;
e=1.6*10^-19;
n=[];
i=1;
t2=[];
u=60; % cm^2/v*S
h=1.05*10^-34; % ev*s
%Capacitor Calaculation
c_g=(epsilon_g/d_g);
c_mos=(epsilon_mos/d_mos);
c_t=1/((1/c_g)+(1/c_mos));
%Input Voltage
t = 0:0.2:10;
vg = 5*sin(t);
%Surface Voltage
fun=@(t) (1-(c_t/c_g))*ones(size(t));
vs = arrayfun(@(xu) integral(fun,0,xu), vg);
figure
plot(t,vs)
title('vs vs time')