Matlab函数绘图问题

4
我是Matlab的初学者,想要绘制系统浓度与时间之间的曲线,在特定的时间间隔内。以下是我编写的代码:

%输入函数包括9个样本的活性和时间,校准后的值为1.856,来自3名患者的所有9个输入值。

function c_o = Sample_function(td,t_max,A,B)

   t   =(0 : 100  :5000); % time of the sample post injection in mins
   c   =(0 : 2275.3 :113765);

   A_max= max(c);   %Max value of Concentration (Peak of the curve)

   if (t >=0 && t <= td)
      c_o(t)=0;
   else if(td <=t && t<=t_max)
      c_o(t)= A_max*(t-td);
   else if(t >= t_max)
      c_o(t)=(A(1)*exp(-B(1)*(t-t_max)))+(A(2)*exp(-B(2)*(t- t_max)))+...
             (A(3)*exp(-B(3)*(t-t_max)));
   end

   fprintf('plotting Data ...\n');
   hold on;
   figure;
   plot(c_o);
   xlabel('Activity of the sample Ba/ml ');
   ylabel('time of the sample in minutes');
   title (' Input function: Activity sample VS time ');
   pause;
   end

我遇到了以下错误:
"||" 和 "&&" 运算符的操作数必须可以转换为逻辑标量值。
Error in Sample_function (line 18)
if (t >=0 && t <= td)

请告知我是否我的逻辑有误


你能看到我在上一个问题中评论的意思吗?在这种情况下,其他人花时间编辑了您的问题并正确格式化/缩进了您的代码,以便每个人都可以阅读。对于后续的问题,请考虑自己进行格式设置,以节省其他人的时间。噢,谢谢你关心我的学生 :-) - Luis Mendo
3个回答

2

您的t不是一个可以与0进行比较的单一值,因此它无法评估为true或false。


1
它被写成一组数字的数组形式。因此,它不能与标量值(例如0)进行比较。 在for循环中尝试使用它。
for i=1:length(t)
   if (t(i) >=0 && t(i) <= td)
      c_o(t(i))=0;
   else if(td <=t(i) && t(i)<=t_max)
      c_o(t(i)))= A_max*(t(i)-td);
   else if(t(i) >= t_max)
      c_o(t)=(A(1)*exp(-B(1)*(t(i)-t_max)))+(A(2)*exp(-B(2)*(t(i)- t_max)))...
      +  (A(3)*exp(-B(3)*(t(i)-t_max)));

   end
end 

1
你想使用逻辑索引来完成这个任务。
c_o = zeros(size(t));

c_o(t>=0 & t<=td) = 0; % this line is actually redundant and unnecessary since we initialized the vector to zeros
c_o(t>td & t<=t_max) = A_max*(t(t>td & t<=t_max)-td);
c_o(t>t_max) = (A(1)*exp(-B(1)*(t(t>t_max)-t_max)))+(A(2)*exp(-B(2)*(t(t>t_max)- t_max)))...
      +  (A(3)*exp(-B(3)*(t(t>t_max)-t_max)));

你还可以通过将逻辑索引分配给变量来使其更美观(并且更易于阅读):

reg1 = (t>=0 & t<=td);
reg2 = (t>td & t<=t_max);
reg3 = (t>t_max);

例如,第二个任务变得更易读:

c_o(reg2) = A_max*(t(reg2)-td);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接