2015-07-26 3 views
0

Я получаю ошибку при выполнении кода ниже для вычисления одного простого интеграла в Matlab. Код приведен ниже.Как решить интеграл в 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') 

Ошибка

Ошибка я получаю «??? Неопределенная функция или метод„Интеграл“для входных аргументов типа„двойной“.

Ошибка = => MIT at 29 vs = integer (fun, 0, vg); ""

+1

вашей переменной 'fun' является двойным вектором, а не функция ручки. Первым вводом интеграла должен быть дескриптор функции. – Daniel

+0

@ Daniel .. Какой вид возможного решения, пожалуйста. –

+0

Я не знаю правильного решения, потому что я не знаю, какую функцию вы пытаетесь реализовать. – Daniel

ответ

0

Чтение вашего названия еще раз похоже на то, что вы хотите интегрировать константу t от 0 до разных границ. Так появились две ошибки:

  1. Ты функция не является функцией только дважды, чтобы исправить это изменение сделать fun анонимную функцию как этот

    [email protected](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 
[email protected](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') 
+0

@ user1543043 Я вывел код в соответствии с вашими добрыми инструкциями, но все еще получаю сообщение об ошибке «??? Неопределенная функция или метод« интеграл »для входных аргументов типа « function_handle ». Ошибка в интеграле ==> @ (xu) (fun, 0, xu) Спасибо за вашу помощь. Можете ли вы любезно помочь мне исправить эту ошибку. –

+0

Я вывел код в соответствии с вашими добрыми инструкциями, но все равно получаю сообщение об ошибке "??? Неопределенная функция или метод «интеграл» для входных аргументов типа «function_handle». Ошибка в ==> @ (xu) интеграле (fun, 0, xu) Спасибо за вашу помощь. можете ли вы любезно помочь мне исправить эту ошибку. –

+0

Какую версию Matlab вы используете, потому что она работает на моей машине. – user1543042