Dibujar función a trozos en Mathematica

Hola, tengo un problema.

Estoy con el Mathematica intentando dibujar una función definida a trozos, concretamente (para los que seais telecos, os pido ayuda especialmente a vosotros) la curva de transferencia teórica de un amplificador inversor, vamos una función que desde menos infinito a -12 vale 12 voltios, desde 12 a infinito que valga 12 voltios, y entre estos dos intervalos una recta de pendiente -x.

A ver, resumiendo y que se vea mejor, quiero dibujar una función con estas carácteristicas:

-En el intervalo (-Infinito, -12] su valor es constante, tiene que valer 12 voltios
-En el intervalo [-12,12] tiene que ser una recta decreciente de pendiente 1, es decir, la recta cuya ecuación es f(x)=-x
-En el intervalo [12,Infinito) su valor es constante, tiene que valer -12 voltios.

Eso es lo que quiero dibujar, y no soy capaz (también es porque es la primera vez en mi vida que uso este programa), he intentado definir funciones a trozos pero hay algo que se me escapa.

Si no sabéis dibujarla con Mathematica, pues que sea con otro programa (gratuito a poder ser), pero el caso es que hay que dibujarla.

Un saludo.
#77782# está baneado del subforo por "flames continuados"
Oh, una configuración inversora, qué recuerdos xD

¿Has probado el Matlab o el Maple? Hay millones de tutoriales para esos dos, que son de los más utilizados. Gratis, gratis, lo que se dice gratis no son, pero versiones de prueba habrá a patadas...

Más fácil aún, ¿por qué no vas a las aulas de informática de tu facultad? Seguro que allí tienen Matlab y esas mierdas. Y si tienen Linux mejor, porque así podrás pillarte el programa para casa.

PD: En mi vida había oído hablar del Mathematica xD
El Matlab también lo tengo, pero ese programa me parece aún más difícil que el Mathematica...

¿Tú sabes dibujar esto con Matlab?

Un saludo.
#77782# está baneado del subforo por "flames continuados"
Es que estas cosas las hicimos con Maple en primero [+risas]

Te recomiendo que cogas el Pspice y simules el circuito. Supongo que un estudio en tiempo dará esa función de transferencia. Digo yo que salida entre entrada ya saldrá lo que tú quieres.

Lo que deberías aclarar es para qué quieres dibujar la función por ordenador. Si no es nada crítico podrías probar el Paint xD
Claro que se puede decir. Es para una práctica de electrónica analógica, del amplificador operacional 741 en configuración inversora. Esto es para redactar el informe de prácticas.

Tengo que dibujar la curva de transferencia teórica, para contrastarla con los valores experimentales. En las dos primeras prácticas (filtro paso bajo y filtro paso alto, respectivamente) el Mathemática representaba con una línea los valores teóricos, y le superponíamos a esa función la función de los valores experimentales, expresada con puntos, en base a unas tablas.

Los tutoriales de Matlab para esto no me sirven, no me aclaro...

Un saludo.
Como no lo tengo instalado, tampoco estoy seguro de que esta sea la forma exacta, pero puedes usar la directiva If.

If funciona de la siguiente forma: If[condición, resultado1, resultado2] . Si la condición se evalúa a cierto, se toma resultado1 como resultado, y si no, se toma resultado2.

Una forma de escribir esta función sería f[x_]:=If[x>-inf & x<-12, 12, If[x>=-12 & x < 12, -x, -12]]. Es decir, encadenas los if para ir filtrando las condiciones.

No estoy seguro de que la sintaxis de If sea exactamente así. Con el comando ?If puedes saberlo. Otra cosa de la que no estoy seguro es del uso del operador and en las condiciones lógicas. Pero, consideraciones de sintaxis aparte, así se modela la función.

Saludos.
Yo le pongo esto:

Plot[If[-12 <= x <= 12, -x & x <= -12, 12 & x >= 12, -12], {x, -15, 15}]

Lo meto y me salen errores como este:

Plot::"plnr": "\!\(If[\(\(\(\(\(\(-12\)\) <= x <= 12\)\), \
\(\(\(\(\(\(\(\(-x\)\) &\)\)\\ x\)\) <= \(\(-12\)\)\)\), \(\(\(\(\(\(12 &\)\)\
\\ x\)\) >= 12\)\), \(\(-12\)\)\)\)]\) is not a machine-size real number at \
\!\(x\) = \!\(-14.99999875`\)."

Y vamos, así, ni función ni pollas...
Wola!

A ver:

1. Método cutre (sólo válido cuando uno no tiene tiempo y las funciones a empalmar son todas lineales):

puntos={{-20,-12},{-12,12},{12,-12},{20,-12}}
ListPlot[puntos,PlotJoined->True]

2. Método ok:

f1=[12,{x,-20,-12},DisplayFunction->Identity]
f2=[-x,{x,-12,12},DisplayFunction->Identity]
f3=[-12,{x,12,20},DisplayFunction->Identity]
Show[f1,f2,f3,DisplayFunction->$DisplayFunction]

3. Método perfect:

f[x_]:=Which[x<-12,12,-12<=x<12,-x,x>=12,-12]
Plot[f[x],{x,-20,20}]

Este último es de filosofía parecida al de Maestro Yoda, aunque la función if no la he usado en el (muy poco) tiempo que trabajé con Mathematica.

A ver si te sale con alguno. Un saludo
Con el PSpice en teoría también podrías sacarlo. Si no lo sacas como dice el Maestro Yoda hazte el circuito y has una simulación TRANS (transitoria XD)

Ya que estais, yo uso el maple (que además está para linux) pero creis que el Mathematica es mejor? En mi facultad como digo usamos el maple aunque también nos han hablado del Mathematica entre otros [toctoc]

Si te urge mucho también podrías usar el paint. No será exacto pero si te lo curras puede dar el pego (buscate una imagen de unos ejes de cordenadas retoca un poco por aquí y por allá y voilá). Imaginación al poder, cosas más raras hago yo en física!! xDDD
Pues no se como será el matemathica pero con el maple es usando la función "picewise(condición1, expresión1, condición2, expresión2,....,expresión por defecto);

Aunque sólo es válido para funciones en R
He estado preguntando a una amiga, esa amiga me ha intentado explicar y no ha sido capaz, así que me ha mandado a otro compañero suyo que me ha pasado sus archivos de prácticas con este programa, y ya he encontrado la forma, es esta:

f[x_]:=12/; x<-12 INTRO
f[x_]:=-x/; -12f[x_]:=-12/; x>12 INTRO
Plot[f[x],{x,-20,25}] INTRO DEL TECLADO NUMÉRICO

Matizar que he puesto la tecla a pulsar al lado de cada línea, porque el intro normal no ejecuta la acción, es el intro del teclado numérico (o Shift+intro) para que se ejecute.

Bueno, he logrado dibujar la función teórica, ahora me toca crear todos los puntos correspondientes a los valores experimentales, para luego superponer la función teórica con los puntos de la función de los valores experimentales...

Ya os contaré... Un saludo.

P.D: Curioso que estos dos amigos estudian Agrónomos, y les han enseñado a hacer esto, y a mi que estudio Telemática no...
#77782# está baneado del subforo por "flames continuados"
Uy, si dices que es EA lo tienes chupado: tu amigo el Pspice.

Ni programas de mates ni pollas, Pspice al poder.
Bueno, ahora lo que me toca es dibujar mediante puntos discretos los valores experimentales, eso creo que se hace definiendo una tabla.

O con el comando ListPlot, que le pones ListPlot[{{x1,y1},{x2,y2},...}]. El problema de esto es que, me hace todo perfectamente, los puntos están bien colocados, pero el eje Y me lo saca en el rango [-10, 40], cuando el valor máximo de Y es 12.269 y el valor mínimo es -10.872...

A ver como me apaño con esto...

EDITO: He conseguido ajustar el rango de representación con PlotRange, ahora me falta el último paso, que es suporponer la gráfica teórica y la experimental, supuestamente se hace con Show[funcion1,funcion2], pero me sale este error:

Show::"gcomb": "An error was encountered in combining the graphics objects in \
\!\(Show[\(\(f, \*TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\
\), False, Rule[Editable, False]]\)\)]\)."

Poco a poco...
12 respuestas