How to use for loop when have syms inside the loop
    조회 수: 8 (최근 30일)
  
       이전 댓글 표시
    
Hello guys, 
I want to ask about, how to use for loop when I have syms and diff inside looping. Here is my code that I tried to solve. Thank you
Xmax     = 1410.34;                                           
conc      = [50 100 150]*1e-9;                    
ka          = 3.46e3; 
kd          = 1.46e-4; 
for i = 1:length(conc)
    syms t x(t)
    eqn = diff(x,t) == (ka*conc(:,i)*Xmax)-(ka*conc(:,i))*x-kd*x;
    cond = x(0) == 0;
    X_ass(t) = dsolve(eqn,cond);
    X_ass = matlabFunction(X_ass);
    t  = linspace(0, 1800, 600)'; 
    signal(:,i) = [X_ass(t)];        
end
When I used this code, MATLAB give me warning this:
Invalid indexing or function definition. Indexing must follow MATLAB indexing. Function arguments must be symbolic variables, and function
body must be sym expression.
댓글 수: 0
답변 (1개)
  Torsten
      
      
 2022년 5월 30일
        Try
syms t x(t)
Xmax = 1410.34;                                           
conc = [50 100 150]*1e-9;                    
ka   = 3.46e3; 
kd   = 1.46e-4; 
for i = 1:length(conc)
  eqn = diff(x,t) == (ka*conc(1,i)*Xmax)-(ka*conc(1,i))*x-kd*x;
  cond = x(0) == 0;
  X_ass(t) = dsolve(eqn,cond);
  X_ass = matlabFunction(X_ass);
  T  = linspace(0, 1800, 600)'; 
  signal(:,i) = X_ass(T);        
end
댓글 수: 2
  Torsten
      
      
 2022년 5월 31일
				Try
syms t x(t) c
Xmax = 1410.34;                                           
conc = [50 100 150]*1e-9;                    
ka   = 3.46e3; 
kd   = 1.46e-4; 
T  = linspace(0, 1800, 600)'; 
eqn = diff(x,t) == (ka*c*Xmax)-(ka*c)*x-kd*x;
cond = x(0)==0;
X_ass(t) = dsolve(eqn,cond);
for i = 1:numel(conc)
  X_ass_fun = matlabFunction(subs(X_ass,c,conc(i)));
  signal(:,i) = X_ass_fun(T);
end
참고 항목
카테고리
				Help Center 및 File Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

