如何解决Matlab中具有上限设置为正弦函数的积分?

时间:2015-07-26 07:35:55

标签: matlab math integration calculus

我在执行下面的代码时遇到错误,在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'类型的输入参数。

==>中的错误麻省理工学院29岁 vs = integral(fun,0,vg);“”

1 个答案:

答案 0 :(得分: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

  3. 的更多信息

    这里有整个代码

    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')