2017-07-08 86 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