WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matrix/Nullstellen Problem

 

Stephan83

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 10:48     Titel: Matrix/Nullstellen Problem
  Antworten mit Zitat      
Guten Morgen,

bin noch ziemlich unerfahren(Anfänger) mit Matlab und arbeite mich Stück für Stück ein. Bin jetzt an einem Punkt angelangt, wo ich Eure Hilfe benötige.

Und zwar habe ich eine etwas komliziertere komplexe 2x2 Matrix erstellt mit der Variable "f". Aus der Matrix soll die Determinante gebildet werden. Anschließend soll diese zu Null gesetzt werden und sämtliche Nullstellen der Variable "f" sollen ausgegeben werden. Da die Werte der Matrix tan, sin, usw. enthalten kommen wohl unendlich viele Nulsstellen raus.

Hier mein Programm code: ("M" ist hierbei meine komplexe Matrix, "M1" die Determinante und die Variable"e" soll alle Nullstellen wiedergeben )


Code:


syms f;

M=[j*tan(6.28*f*1.82*10^-6)/19+1/j*(tan(6.28*f*0.233*10^-6)*250),1/(j*250*sin(6.28*f*0.233*10^-6));1/(j*250*sin(6.28*f*0.233*10^-6)),j*tan(6.28*f*1.82*10^-6)/19+1/(j* tan(6.28*f*0.233*10^-6)*250)];

M1=det(M);
e=solve(M1,'f')

 


Als Lösung erhalte ich dann folgendes:

e =

matrix([[-2738.1785969727852105262081221762]])


Wenn ich einfache Zahlen eingebe klappt es.
Jetzt meine Fragen:

1. Ist der Code soweit in Ordnung oder gibt es bessere und schnelle Methoden?

2. Was bedeutet der Ausdruck der Lösung?

matrix([[-2738.1785969727852105262081221762]])

3. Kann man die Lösung für die Variable f eingerenzen (zum Beispiel zwischen 0 und 200)?

schonmal Danke im voraus

Gruß Stephan[/code]


bligg
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 15.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 11:16     Titel:
  Antworten mit Zitat      
Brauchst du tatsächlich einen symbolischen Ausdruck in Abhängigkeit von f? Dann probier dein Glück mit einem Mathe-Programm, das direkt für symbolisches Rechnen ausgelegt ist.

Willst du einfach nur für verschiedene Werte von f die Ergebnisse haben? Dann dürfte

Code:


das richtige für dich sein?!
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 11:48     Titel:
  Antworten mit Zitat      
Also der symbolische Ausdruck ist für mich natürlich unwichtig.
Wie kann ich den Befehl eig() den einbauen?

etwa so?

Code:


 syms f;
M=[j*tan(6.28*f*1.82*10^-6)/19+1/j*(tan(6.28*f*0.233*10^-6)*250),1/(j*250*sin(6.28*f*0.233*10^-6));1/(j*250*sin(6.28*f*0.233*10^-6)),j*tan(6.28*f*1.82*10^-6)/19+1/(j* tan(6.28*f*0.233*10^-6)*250)];

M1=eig(M)

 


Ergenis lautet dann:

M1 =

-(19*sin((36581*f)/25000000000)*i + 1187500*sin((36581*f)/25000000000)*tan((36581*f)/25000000000)^2*i - 1187500*(- sin((36581*f)/25000000000)^2*tan((36581*f)/25000000000)^4 + (sin((36581*f)/25000000000)^2*tan((36581*f)/25000000000)^2)/31250 - sin((36581*f)/25000000000)^2/3906250000 - tan((36581*f)/25000000000)^2/976562500)^(1/2) - 500*sin((36581*f)/25000000000)*tan((36581*f)/25000000000)*tan((14287*f)/1250000000)*i)/(9500*sin((36581*f)/25000000000)*tan((36581*f)/25000000000))
-(19*sin((36581*f)/25000000000)*i + 1187500*sin((36581*f)/25000000000)*tan((36581*f)/25000000000)^2*i + 1187500*(- sin((36581*f)/25000000000)^2*tan((36581*f)/25000000000)^4 + (sin((36581*f)/25000000000)^2*tan((36581*f)/25000000000)^2)/31250 - sin((36581*f)/25000000000)^2/3906250000 - tan((36581*f)/25000000000)^2/976562500)^(1/2) - 500*sin((36581*f)/25000000000)*tan((36581*f)/25000000000)*tan((14287*f)/1250000000)*i)/(9500*sin((36581*f)/25000000000)*tan((36581*f)/25000000000))


Wie kann ich denn daraus die Variable "f" einfach und schnell berechnen?
 
bligg
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 15.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 12:02     Titel:
  Antworten mit Zitat      
Soweit ich dein Problem verstehe, bist du auf der Suche nach den Eigenwerten deiner Matrix, richtig?

Dann erzeugst du deine Matrix (ganz ohne symbolisches Rechnen, einfach nur, indem du deine Matrix m für gegebenes f ausrechnest), und wendest darauf eig() wie in der Dokumentation erklärt an.
Deine Ergebnisse sind Eigenvektoren und Eigenwerte in der in der Dokumentation beschriebenen Form.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 12:42     Titel:
  Antworten mit Zitat      
eigendlich suche ich nicht direkt die eigenwerte sonden eher die Nullstellen von f nach dem ich die Determinante gebildet habe. Also wenn ich zum beispeil eine einefache 2x2 Matrix habe wie:

5*f 3

3*f 4*f

ist die Determinante ja:

D=20*f^2-9*f

Das ganze ist dann mit 0 gleichzusetzen:

20*f^2-9*f =0

und als nächstes soll die Variable "f" berechnet werden.

Als Ergebnis kommt 3/4 (symbolisch) und 0 raus

Symbolisch klappt das auch mit dem meinem ersten Code von mir. Nur sobald der Ausdruck in der Matrix komplizierter wird (mit sin, tan, 10x10 Matrix usw), kommt mist raus oder busy wird angezeigt oder die Rechnung dauert ne gute stunde.

eig() ergibt hierbei nicht meine gesuchten Nullstellen.
Wie gesagt mit würds ja schon reichen, wenn mein Code keine symbolischen Ergebnisse anzeigt sondern nur den Zahlenwert der Nullstelle.
 
bligg
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 15.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 12:59     Titel:
  Antworten mit Zitat      
Oh, sorry, das mit dem Eigenwert war natürlich Blödsinn. Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.09.2010, 14:06     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Dann probier dein Glück mit einem Mathe-Programm, das direkt für symbolisches Rechnen ausgelegt ist.

Die Symbolic Math Toolbox ruft intern einen MuPAD-Kernel auf und ist für symbolisches Rechnen ausgelegt. Bessere Ergebnisse wird man in anderen Sprachen nur in Einzelfällen erhalten.

Wenn es letztlich um eine numerische Lösung geht (und bei der Komplexität der Aufgabenstellung macht wohl nichts anderes sinn), sollte man das auch numerisch angehen:

Code:
M=@(f) det( [j*tan(6.28*f*1.82*10^-6)/19+1/j*(tan(6.28*f*0.233*10^-6)*250),1/(j*250*sin(6.28*f*0.233*10^-6));1/(j*250*sin(6.28*f*0.233*10^-6)),j*tan(6.28*f*1.82*10^-6)/19+1/(j* tan(6.28*f*0.233*10^-6)*250)] );
fzero(M, 1)
Private Nachricht senden Benutzer-Profile anzeigen
 
Stephan83

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2010, 14:22     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke erstmal. Genau das was ich suche. Nur zeigt die Lösung mir nur eine Nullstelle an. Was muss ich am Code verändern damit z.B. die ersten 10 Nullstellen dargestellt werden.
 
Stephan83

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2010, 08:45     Titel:
  Antworten mit Zitat      
Hallo,
habe nun ein Programm geschrieben, welches mir aus einer 21x21 matrix die Determinante mit der Variable f berechnet. Anschließen sollen die Nullstellen von berechnet werden.

z_u45=19;
t_u45=10*10^-6;

z_u23=19;
t_u23=10*10^-6;

z_u22=19;
t_u22=10*10^-6;

z_netzwest=19;
t_netzwest=10*10^-6;

z_322=19;
t_322=10*10^-6;

z_16=19;
t_16=10*10^-6;

z_24=19;
t_24=10*10^-6;

z_29=19;
t_29=10*10^-6;

z_netzost=19;
t_netzost=10*10^-6;

z_u21=19;
t_u21=10*10^-6;

z_521=19;
t_521=10*10^-6;

z_u1=19;
t_u1=10*10^-6;

z_u2=19;
t_u2=10*10^-6;

z_422=19;
t_422=10*10^-6;

z_312=19;
t_312=10*10^-6;




z_12=250;
t_12=5*10^-6;

z_23=250;
t_23=5*10^-6;

z_34=250;
t_34=5*10^-6;

z_45=250;
t_45=5*10^-6;

z_56=250;
t_56=5*10^-6;

z_510=250;
t_510=5*10^-6;

z_67=250;
t_67=5*10^-6;

z_89=250;
t_89=5*10^-6;

z_910=250;
t_910=5*10^-6;

z_1011=250;
t_1011=5*10^-6;

z_1112=250;
t_1112=5*10^-6;

z_1213=250;
t_1213=5*10^-6;

z_1314=250;
t_1314=5*10^-6;

z_1415=250;
t_1415=5*10^-6;

z_1516=250;
t_1516=5*10^-6;

z_1617=250;
t_1617=5*10^-6;

z_1718=250;
t_1718=5*10^-6;

z_1819=250;
t_1819=5*10^-6;

z_1920=250;
t_1920=5*10^-6;

z_2021=250;
t_2021=5*10^-6;

syms f

for k=10000:1000:500000

%Matrix 21x21


M=@(f) det([ i.*tan(2.*pi.*f.*t_u45)./z_u45+1./(i.*z_12.*tan(2.*pi.*f.*t_12)), -1/(i.*z_12.*sin(2.*pi.*f.*t_12)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

-1/(i.*z_12.*sin(2.*pi.*f.*t_12)), i.*tan(2.*pi.*f.*t_u23)./z_u23+1./(i.*z_12.*tan(2.*pi.*f.*t_12))+1./(i.*z_23.*tan(2.*pi.*f.*t_23)), -1/(i.*z_23.*sin(2.*pi.*f.*t_23)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, -1/(i.*z_23.*sin(2.*pi.*f.*t_23)), i.*tan(2.*pi.*f.*t_u22)./z_u22+1./(i.*z_23.*tan(2.*pi.*f.*t_23))+1./(i.*z_34.*tan(2.*pi.*f.*t_34)), -1/(i.*z_34.*sin(2.*pi.*f.*t_34)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, -1/(i.*z_34.*sin(2.*pi.*f.*t_34)), i.*tan(2.*pi.*f.*t_netzwest)./z_netzwest+1./(i.*z_34.*tan(2.*pi.*f.*t_34))+1./(i.*z_45.*tan(2.*pi.*f.*t_45)), -1/(i.*z_45.*sin(2.*pi.*f.*t_45)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, -1/(i.*z_45.*sin(2.*pi.*f.*t_45)), 1./(i.*z_45.*tan(2.*pi.*f.*t_45))+1./(i.*z_56.*tan(2.*pi.*f.*t_56))+1./(i.*z_510.*tan(2.*pi.*f.*t_510)), -1/(i.*z_56.*sin(2.*pi.*f.*t_56)), 0, 0, 0, -1/(i.*z_510.*sin(2.*pi.*f.*t_510)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, -1/(i.*z_56.*sin(2.*pi.*f.*t_56)), i.*tan(2.*pi.*f.*t_322)./z_322+1./(i.*z_56.*tan(2.*pi.*f.*t_56))+1./(i.*z_67.*tan(2.*pi.*f.*t_67)), -1/(i.*z_67.*sin(2.*pi.*f.*t_67)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, -1/(i.*z_67.*sin(2.*pi.*f.*t_67)), i.*tan(2.*pi.*f.*t_16)./z_16+1./(i.*z_67.*tan(2.*pi.*f.*t_67)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, i.*tan(2.*pi.*f.*t_24)./z_24+1./(i.*z_12.*tan(2.*pi.*f.*t_12)), -1/(i.*z_89.*sin(2.*pi.*f.*t_89)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, -1/(i.*z_89.*sin(2.*pi.*f.*t_89)), i.*tan(2.*pi.*f.*t_29)./z_29+1./(i.*z_89.*tan(2.*pi.*f.*t_89))+1./(i.*z_910.*tan(2.*pi.*f.*t_910)), -1/(i.*z_910.*sin(2.*pi.*f.*t_910)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, -1/(i.*z_510.*sin(2.*pi.*f.*t_510)), 0, 0, 0, -1/(i.*z_910.*sin(2.*pi.*f.*t_910)), 1./(i.*z_910.*tan(2.*pi.*f.*t_910))+1./(i.*z_1011.*tan(2.*pi.*f.*t_1011))+1./(i.*z_510.*tan(2.*pi.*f.*t_510)), -1/(i.*z_1011.*sin(2.*pi.*f.*t_1011)), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1011.*sin(2.*pi.*f.*t_1011)), i.*tan(2.*pi.*f.*t_netzost)./z_netzost+1./(i.*z_1011.*tan(2.*pi.*f.*t_1011))+1./(i.*z_1112.*tan(2.*pi.*f.*t_1112)), -1/(i.*z_1112.*sin(2.*pi.*f.*t_1112)), 0, 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1112.*sin(2.*pi.*f.*t_1112)), i.*tan(2.*pi.*f.*t_u21)./z_u21+1./(i.*z_1112.*tan(2.*pi.*f.*t_1112))+1./(i.*z_1213.*tan(2.*pi.*f.*t_1213)), -1/(i.*z_1213.*sin(2.*pi.*f.*t_1213)), 0, 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1213.*sin(2.*pi.*f.*t_1213)), i.*tan(2.*pi.*f.*t_521)./z_521+1./(i.*z_1213.*tan(2.*pi.*f.*t_1213))+1./(i.*z_1314.*tan(2.*pi.*f.*t_1314)), -1/(i.*z_1314.*sin(2.*pi.*f.*t_1314)), 0, 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1314.*sin(2.*pi.*f.*t_1314)), 1./(i.*z_1314.*tan(2.*pi.*f.*t_1314))+1./(i.*z_1415.*tan(2.*pi.*f.*t_1415)), -1/(i.*z_1415.*sin(2.*pi.*f.*t_1415)), 0, 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1415.*sin(2.*pi.*f.*t_1415)), 1./(i.*z_1415.*tan(2.*pi.*f.*t_1415))+1./(i.*z_1516.*tan(2.*pi.*f.*t_1516)), -1/(i.*z_1516.*sin(2.*pi.*f.*t_1516)), 0, 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1516.*sin(2.*pi.*f.*t_1516)), i.*tan(2.*pi.*f.*t_u1)./z_u1+1./(i.*z_1516.*tan(2.*pi.*f.*t_1516))+1./(i.*z_1617.*tan(2.*pi.*f.*t_1617)), -1/(i.*z_1617.*sin(2.*pi.*f.*t_1617)), 0, 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1617.*sin(2.*pi.*f.*t_1617)), i.*tan(2.*pi.*f.*t_u2)./z_u2+1./(i.*z_1617.*tan(2.*pi.*f.*t_1617))+1./(i.*z_1718.*tan(2.*pi.*f.*t_1718)), -1/(i.*z_1718.*sin(2.*pi.*f.*t_1718)), 0, 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1718.*sin(2.*pi.*f.*t_1718)), 1./(i.*z_1718.*tan(2.*pi.*f.*t_1718))+1./(i.*z_1819.*tan(2.*pi.*f.*t_1819)), -1/(i.*z_1819.*sin(2.*pi.*f.*t_1819)), 0, 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1819.*sin(2.*pi.*f.*t_1819)), 1./(i.*z_1819.*tan(2.*pi.*f.*t_1819))+1./(i.*z_1920.*tan(2.*pi.*f.*t_1920)), -1/(i.*z_1920.*sin(2.*pi.*f.*t_1920)), 0;

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_1920.*sin(2.*pi.*f.*t_1920)), i.*tan(2.*pi.*f.*t_422)./z_422+1./(i.*z_1920.*tan(2.*pi.*f.*t_1920))+1./(i.*z_2021.*tan(2.*pi.*f.*t_2021)), -1/(i.*z_2021.*sin(2.*pi.*f.*t_2021));

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1/(i.*z_2021.*sin(2.*pi.*f.*t_2021)), i.*tan(2.*pi.*f.*t_312)./z_312+1./(i.*z_2021.*tan(2.*pi.*f.*t_2021))
]);

fzero(M, k)

end


Leider gibt das Programm mir folgenden Fehler aus:

??? Error using ==> fzero at 334
Funktion value at starting guess must be finite and real

Was bedeutet die Fehlermeldung? Und weiss jemand evtl. was ich falsch gemacht habe?

danke schonmal
 
Stephan83

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2010, 10:31     Titel:
  Antworten mit Zitat      
Habt den fehler gefunden. Matrixist ungerade deswegen ist das Ergebnis kompex.

Hat fzero propleme mit komplexen Werten? Wenn ich die Matrix auf

20 X 20 reduziere funktioniert fzero.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.09.2010, 19:14     Titel:
  Antworten mit Zitat      
Hallo,

fzero ist nur für reellwertige Funktionen gedacht und sucht eine Nullstelle in der Nähe des Startwertes. Wenn du mehrere Nullstellen brauchst, brauchst du mehrere Startwerte.
Gute Startwerte könntest du z.B. bekommen, in dem du das auf einem Gitter auswertest und die Vorzeichenwechsel als Startwerte nimmst.
Etwa so:

Code:
M=@(f) det( [j*tan(6.28*f*1.82*10^-6)/19+1/j*(tan(6.28*f*0.233*10^-6)*250),1/(j*250*sin(6.28*f*0.233*10^-6));1/(j*250*sin(6.28*f*0.233*10^-6)),j*tan(6.28*f*1.82*10^-6)/19+1/(j* tan(6.28*f*0.233*10^-6)*250)] );

x = -10000:10:10000; %betrachteter Bereich
dets = zeros(size(x));
for I = 1:length(x)
    dets(I) = M(x(I));
end
plot(x, dets)
ylim([-10 10])

% hier gibts wohl nur eine Wurzel?
% zumindest in dem Intervall
Startwerte = x (diff(sign(dets)) ~= 0 & ~isnan(dets(1:end-1)));
Wurzeln = zeros(size(Startwerte));
for J = 1:length(Startwerte)
    Wurzeln(J) = fzero(M, Startwerte(J));
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.