ich will dass er nur die real pol und nullstellen anzeigt. die imaginären sollen außen vor gelassen werden.
desweiteren hab ich eine frage, wie man die definitionslücken berechnet. mathematisch macht man das ja mit dem limes soweit ich weiß.
bloß wie schreibt man den code für matlab?
es ist ein neues problem aufgetreten wobei ich nicht weiter weiß. mir wurde gesagt dass ich die Nullstellen mit den polstellen vergleichen soll, dabei soll ich eine for schleife einbauen. mein programm für die aufgabe sieht wie folgt aus:
Code:
clc format bank
disp('');
disp(' >>>>>>>>>>>>>>>Darstellung gebrochenrationaler Funktionen<<<<<<<<<<<<<<<') disp('');disp('');
disp(' Gegeben sei die Funktion:') disp('');
disp(' f(x)= (x³+a1x²+a2x+a3)/(b1x²+b2x+b3)') disp('');
%Eingabe der Koeffizienten
a=input('Geben Sie die Werte der Koeffizienten im Zähler ein! Hinweis: [a1 a2 a3]');
b=input('Geben Sie die Werte der Koeffizienten im Nenner ein! Hinweis: [b1 b2 b3]');
x=-5:0.1:5;
zaehler=(x.^3+a(1)*x.^2+a(2)*x+a(3));
nenner=(b(1)*x.^2+b(2)*x+b(3));
y=(zaehler./nenner);
%Nullstellen berechnen
Zcoeff=[1 a(1) a(2) a(3)];
null=roots(Zcoeff);
null=null(imag(null)==0);
disp('');
disp('Nullstellen:') disp('');
disp(null(:))
%Polstellen
Ncoeff=[b(1) b(2) b(3)];
pol=roots(Ncoeff);
%pol=pol(imag(pol)==0);
disp('');
ifisreal(pol) & (pol.^3+a(1)*pol.^2+a(2)*pol+a(3)~=0) disp('Polstellen:') disp('');
disp(pol(:)) else disp('Es gibt keine Polstellen!') end disp('');
%Definitionsluecken
luecke=roots(Ncoeff);
DL=(pol.^3+a(1)*pol.^2+a(2)*pol+a(3));
disp('');
if DL==0 disp('Definitionslücke:') disp('');
disp(luecke(:)) else disp('Es gibt keine Definitionslücken!') end disp('');
%Grafikausgabe
axis([-5,5,-5,5]) plot(x,y) hold on
plot(real(pol), 0, 'go',real(null), 0, 'r+')
%plot(real(pol), 0, 'bo')
%plot(real(null), 0, 'r+') xlabel('X-Achse') ylabel('Y-Achse') title('Darstellung gebrochenrationaler Funktionen') grid on
pause close
ich hab überhaupt keine ahnung wie ich die nullstellen mit den polstellen vergleiche, denn daraus folgt eine lücke.
habe für
a=[-2 -5 6]
b=[1 3 2]
eingegeben, dabei zeigt er 3 nullstellen, aber die eine nullstele ist eine lücke. die nullstellen und polstellen werden in matlab in vektoren ausgegeben damit sie verglichen werden können.
kannst du herausfinden, welche Zahlen in beiden Vektoren auftauchen. Dann ist aber immer noch das Problem, dass das Verhalten um den Punkt herum von der Vielfachheit abhängt. Soll das auch ermittelt werden?
Eine Bitte übrigens: versuche, die Frage übersichtlich zu stellen. Was soll man denn mit dem ellenlangen Code??
sorry, dachte nur dass damit jemand was anfangen kann.
mein prof meinte dass ich in den code noch eine for schleife einfügen muss damit die nullstellen und polstellen verglichen werden können. wenn eine nullstelle mit einer polstelle übereinstimmt, dann ist es eine lücke.
er meinte mit solch einem beispiel würde ich wissen wie es geht:
ich weiß nur nicht was i=1:3 und j=1:2 zu bedeuten hat. mein erster gedanke war dass es die null- und polstellen sind, aber ich habe beide stellen mit roots errechnet. deswegen frage ich mich wie er auf die zahlen kommt? er hatte für das beispiel die nullstellen=[1 2 3] und polstellen=[-1 1]
das bedeutet, dass i die Werte 1,2,3 annehmen soll, und j die Werte 1,2. Allgemeiner sollte man statt 3 length(null) und statt 2 length(pol) verwenden. Dann sieht es so aus:
Fällt dir auf, dass da das gleiche rauskommt? Siehe also Antwort davor.
Ich würde dich ernsthaft bitten, die komplette Antwort zu lesen und ggf. Fragen dazu zu stellen, bevor du deine nächste Frage postest.
ok...
sorry...
wie ich sehe hast du die null- und polstellen definiert. mein problem ist aber dass ich ja durch roots
null=roots(Zcoeff)
pol=roots(Ncoeff)
die stellen ausrechne. d.h. ich weiß ja gar nicht welche nullstellen ich genau habe. ich kann ja nicht einfach
null=[null1 null2 null3]
schreiben. ich weiß, hier kann ich mich nich genau ausdrücken, es wäre auch besser wenn man den code oben mal abspielen lässt und dann für a=[-2 -5 6] und für b=[1 3 2] eingibt, kann die m-file datei auch hochladen. wenn man die werte für a und b eingibt dann erhält man 3 nullstellen und zwei polstellen, dabei ist aber die eine null- und die eine polstelle eine definitionslücke. er gibt mir aber keine lücke an und die "wahre" lücke soll nich als null- und polstelle angezeigt werden. sondern als lücke...sorry wenn das so kompliziert beschrieben is, aber ich hab selber keine ahnung von matlab, hatte mal mit delphi programmiert.
Diese wird auf ALLE Polstellen gleichzeitig angewandt. D.h. wenn eine Polstelle eine Lücke ist, werden die anderen auch nicht ausgegeben.
Zudem ist ~= 0 oder == schlecht, da es zu numerischen Ungenauigkeiten kommen kann.
Dasselbe gilt auch für die Lücken. Gib nach deinem Code mal
ich seh da irgendwie überhaupt nich druch, bin das nicht gewohnt dass nullstellen als matrix/vektor angegeben werden. kenne das halt nich von delphi. kannst du mir vllt die befehle reinschreiben und die datei dann schicken? sorry, aber mit matlab stehe ich irgendwie auf kriegsfuss...anfänger halt
Einen Punkt nach dem anderen durchgehen und gegebenenfalls Rückfragen stellen.
Zitat:
bin das nicht gewohnt dass nullstellen als matrix/vektor angegeben werden
als was sollen sie denn sonst dargestellt werden? als Array? ein Vektor ist letztlich auch nichts anderes.
Zitat:
kenne das halt nich von delphi.
Für Delphi kann ich es nicht sagen, aber zumindest bei C würdest du auf genau die gleichen Probleme stoßen. Es sind nämliche keine Probleme von MATLAB, sondern numerische Probleme.
Anbei der gewünschte Lösungsvorschlag. Ich kann dir aber nur raten, selbstständiges Arbeiten zu lernen (das kann Fragen einschließen, aber dann zumindest Antworten aufzunehmen und selber umzusetzen).
vielen dank...du hast auch vollkommen recht, aber ich habe matlab seit 1 monat, in den übungsstunden komme ich kaum mit, ich habe ein skript wo nur kurze stichpunkte und unverständlich beispiele sind. habe auch schon oft gegoogelt, aber dadurch dass du mir das jetzt gezeigt hast, verstehe ich das besser als wenn ich irgendwelche bruchteile aus meinem skript verwende. danke nochmal.
gast von heute
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 08.11.2009, 19:06
Titel: hilfe
kann einer vielleicht einen kompletten lösungsvorschlaf für das programm reinstellen ?
gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 08.11.2009, 19:20
Titel: polstelle als grade
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
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.