2017-07-08 59 views
0

我有SCILAB 我如何可以绘制包含函数的一点改进绘图函数,如果和<像Scilab的使用,如果

function y = alpha(t) 
    if (t < 227.8) then 
     y = 0.75; 
    elseif (t < 300) then 
     y = 2.8 - 0.009 .* t; 
    else 
     y = 0.1; 
    end 
endfunction 

function [r]=minus_alpha(t) 
    r = 1 - alpha(t) 
endfunction 

当我使用

x = linspace(0,300) 
plot(x, alpha(x)) 

我收到了错误讯息

WARNING: Transposing row vector X to get compatible dimensions 
plot2d: falsche Größe für Eingangsargument: inkompatible Größen. 
Error 999 : in plot2d called by plot 

对不起德国混合。谢谢。

回答

0

如果您检查alpha(x)的输出,您会发现它只是一个标量(而不是矢量)。我想你想这样的事情,所以通过t迭代计算的基础上t价值y每个值有必要:

clc; 
clear; 
function y = alpha(t) 
    for i=1:size(t,"*") 
     if t(i) < 227.8 then 
      y(i) = 0.75; 
     elseif t(i) < 300 then 
      y(i) = 2.8 - 0.009 * t(i); 
     else 
      y(i) = 0.1; 
     end 
    end 
endfunction 

x = linspace(0,300); 
plot2d(x,alpha(x)); 

如果你找到答案有用的,请不要忘记去接受它,所以其他人会看到你的问题解决了。

1

您可以避免显式循环,并更有效地使用跟随着代码

function y = alpha(t) 
    y=0.1*ones(t); 
    y(t<227.8)=0.75; 
    i=t>=227.8&t<300; 
    y(i)=2.8 - 0.009 .* t(i); 
endfunction 
0

你的答案(谢谢)我的解决方法是与地板和EXP(-t^2)组成的指示功能的组合之前:

function y = alpha(t) 
    y = floor(exp(-(t .* (t-T1))/(T1*T1))) * 0.75 
     + floor(exp(-((t-T2) .* (t- T1)/(2000)))) .* (2.8-0.009 .* t) 
     + floor(exp(-((t-T2) .* (t-1000)/(200000))))*0.1 
endfunction