2015-09-10 2 views
0

Я пытаюсь работать с кодом, который включает ode45, в том, что в решении, которое будет решено, я должен ввести одно значение из вектора, который будет меняться в зависимости от времени решения уравнения , Я имею в виду, если это x = x (0), то u1 (1) и u2 (t), когда x = x (1), то u1 (2), u2 (2) ... Это мой код:MATLAB - Как читать одно значение из вектора? (ode45)

function [sal] = scobe1 
      clear 
      clc 
    global a; 
      a=1; 
      assignin('base','a',a) 
      tspan = [0; 180];    
      x0 = [80; 0]; 
      [t,x] = ode45(@f,tspan,x0);   
      sal=[t,x] 
      figure 
      subplot(2,1,1) 
      plot(t,x(:,1),'k-'); 
      subplot(2,1,2) 
      plot(t,x(:,2),'b-'); 
    function dxdt = f(t,x) 
     global a s1 u1 u2 newData; 
newData=importdata('datosnoembarazo.mat'); 
assignin('base','newData',newData); 
u1=getfield(newData,'glucosa4dias'); 
assignin('base','u1',u1); 
u2=getfield(newData,'insulina4dias'); 
assignin('base','u2',u2); 
u1=getfield(newData,'glucosa4dias'); 
assignin('base','u1',u1); 
u2=getfield(newData,'insulina4dias'); 
assignin('base','u2',u2); 
      if (a<=s1) 
      dxdt = [  
       (-4.9e-2-x(2))*x(1) + (4.42 + u1(a)) %(1) IN HERE u1 IS THE VECTOR'S NAME 
       -9.1e-2*x(2) + u2(a) %(2) IN HERE u2 IS THE VECTOR'S NAME 
       ]; 
      a=a+1 
      assignin('base','a',a); 
      else return 
      end 

Проблема в том, что он отправляет мне эту ошибку: И я не знаю, что не так с кодом, или что еще я могу сделать, чтобы он мог его прочитать, не могли бы вы мне помочь? Благодаря

Error in scobe1>f (line 36) 
     global a s1 s2 u1 u2 newData; 
Error using feval 
Output argument "dxdt" (and maybe others) not assigned during call to 
"C:\Users\AnnieA\Dropbox\Tesis (A. Olay)\GUI Examples\Resumen de Modelos\scobe1.m>f". 
Error in odearguments (line 87) 
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0. 
Error in ode45 (line 113) 
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ... 
Error in scobe1 (line 25) 
     [t,x] = ode45(@f,tspan,x0); 

ответ

0

Ваша функция function dxdt = f(t,x) имеет две ветви в if заявление: Если a<=s1, то dxdt получает правильно присвоенные. Если a>s1, dxdt не назначено вообще. Вы можете исправить ошибку, присвоив значение dxdt в филиале else вашего if статута перед вами return. Я не уверен, какое значение будет в этом случае. Возможно 0?

+0

Спасибо, я попробовал, и это сработало (: –

+0

В этом случае вам стоит поднять и выбрать мой ответ. Рад, что это помогло. –

+0

Есть ли у вас какие-либо представления о том, что не так: http://stackoverflow.com/ вопросы/33987704/how-to-interpolate-a-vector-and-work-with-variables-ode45? noredirect = 1 # comment55733662_33987704? Спасибо –

Смежные вопросы