如何在Matlab中求解上限设置为正弦函数的积分?

问题描述 投票:0回答:1

我在执行下面的代码以在 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')

错误

我收到的错误是 “???对于“double”类型的输入参数,未定义函数或方法“integral”。

==> MIT 中的错误 29 vs = 积分(fun,0,vg);""

matlab math numerical-integration calculus
1个回答
0
投票

再次阅读你的标题,听起来你想将常量从 0 积分到不同的边界。所以有两件事是错误的:

  1. 你的函数不是一个函数,只是一个双精度函数,要修复此更改,请使

    fun
    像这样的匿名函数

    fun=@(t) (1-(c_t/c_g))*ones(size(t));
    

    ones(size(t))
    只是让每个输入都有一个输出。

  2. 您需要有一个积分上限和下限,才能将积分固定在

    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')
© www.soinside.com 2019 - 2024. All rights reserved.