2017-07-08 4 views
0

J'ai un problen dans Scilab Comment puis-je tracer des fonctions contenant si et < commeScilab complotant fonctions avec si

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 

et

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

Lorsque j'utilise

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

J'ai reçu le message d'erreur

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 

Désolé pour le mélange allemand. Je vous remercie.

Répondre

0

Si vous vérifiez la sortie de votre alpha(x), vous verrez que c'est juste un scalaire (pas un vecteur). Je suppose que vous vouliez quelque chose comme ça, il est donc nécessaire de itérer t pour calculer chaque valeur de y en fonction de la valeur de t:

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)); 

Si vous trouvez la réponse utile, s'il vous plaît ne pas oublier de l'accepter, alors les autres verront que votre problème est résolu.

1

Vous pouvez éviter la boucle explicite et être plus efficace en utilisant le code followin

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

Avant que vos réponses (merci) ma solution était une combinaison de fonctions indicateur composé avec plancher et 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