das sind die Eingaben wenn das Programm ausgeführt wird:
[1] Nullstellen berechnen
[2] Programm beenden
1
Startwert:-10
Endwert:10
Abstand d X:0.1
Genauigkeit:0.00001
erhoehte Genauigkeit?
[1]=ja
[0]=nein
1
>>
Eine Ausgabe oder Fehlermeldung erfolgt nicht.
Mehr als den unten stehenden Quellcode (ja, habs nochmal neu gemacht, damit alles erstmal in einer File drin steht und dieser find Befehl wegfällt) bekomme ich nicht hin. Matritzen/Vektoren erstellen, manipulieren usw. habe ich nie gelernt und kenne mich folglich nicht aus. Die Syntax zeigen hilft aber auch nichts, wenn mans nicht versteht.
Code:
menue=input('[1] Nullstellen berechnen \n[2] Programm beenden\n');
switch menue
case1
xStart=input('Startwert:');
xEnd=input('Endwert:');
Schrittweite=input('Delta X:');
genauigkeit=input('Genauigkeit?');
format long;
x=xStart: Schrittweite: xEnd;
a=y(x);
for i=1:1:(length(x)-1) if(a(i))*(a(i+1))<0
xn1=x(i);
xn2=x(i+1);
whileabs(xn1-xn2)>=genauigkeit
yn1=bla(xn1);
yn2=bla(xn2);
xn=(xn1+xn2)/2;
yn=y(xn);
Nullstelle=(xn2+xn1)/2;
fprintf('NS %1.6f',Nullstelle) if(yn1*yn)<0
xn2=xn;
else
xn1=xn;
end plot(x,a) end end end case2 exit end
Hab die 2 Dateien mit angehängt; die eine beinhaltet den Vorschlag von dir, welcher bei mir nicht funktionieren will
sofern du mir noch helfen möchtest, nochmal die Aufgabenstellung:
man erstelle ein Skript.m
dies beinhaltet einen x-Vektor
und übergeben diese Werte an eine function.m. Z.B.
f=Schnittpunkte(m, Genauigkeit)
Frage: wie spricht man diese Matrix an? Also z.B. erste Spalte, erste Zeile bis Ende?
und in der function.m läuft rein die Intervallshalbierung nach diesem Schema ab:
Wenn du wirklich meinen Vorschlag umsetzt (und das heißt hier wirklich nur: in bisektion.m deinen Aufruf durch den von mir vorgeschlagenen ersetzen - dabei nichts hinzufügen oder weglassen), dann läuft das wunderbar und macht das, was es soll.
Was ich nicht verstehe: wenn ich dir den Aufruf schon vorsetze, was hat dich davon abgehalten, ihn auch so zu benutzen? Selbst wenn das ein Versehen war: spätestens wenn es nicht funktioniert, vergleicht man das doch nochmal, und spätestens dann sollte der Unterschied auffallen?
hatte ich urspruenglich auch so probiert, ohne Erfolg. Also den Verweis im skript auf die funktion umbenannt genauso wie die funktion selbst und diese unter ebenfalls gleichen Namen gespeichert. Auch ohne Erfolg. Aber ist nun auch egal....Abgabe des Projekts liegt bereits in der Vergangenheit. Zumindest bin ich dir sehr dankbar fuer deine Hilfe, aberauch extrem frustriert wegen dieses Programms. Allein schon dass so einfache Dinge wie zwei Vektoren, wobei vektor a von b abhaengig ist, nicht veraenderbar sind. Also als einfaches Beispiel :
x=1:1:10
y=x.^2
nun soll y der vektor z=2:0.1:20 zugewiesen werden => geht nicht.....
Die Aufgabenstellung lässt mir keinen Spielraum, effizient die Aufgabe zu lösen. Im Grunde stellt diese eine 1:1 C-Programm-Portierung dar....
hier das Skript mit den Problemstellen:
Code:
menue=input('[1] Nullstellen berechnen \n[2] Programm beenden\n');
switch menue
case1
xStart=input('Startwert:');
xEnd=input('Endwert:');
Abstand=input('Abstand d X:');
ErhGenauigkeit=input('erhoehte Genauigkeit?\n[1]=ja\n[0]=nein\n');
if ErhGenauigkeit==1;
genauigkeit=1e-05;
else
genauigkeit=0;
end
x=xStart: Abstand: xEnd;
y=0.5*x.^3-5*x.^2+2*x+10;
m=[x; y]; %das ist die ominöse Datenmatrix; wie man sieht ist y von x abhängig
% diese ist Vorgabe und soll wohl so sein?!
f=F_SCHNITTPUNKTE(m, genauigkeit);
case2 exit end
function[ f, xint, a, yint, yb ] = F_SCHNITTPUNKTE(m, genauigkeit)
x=m(1,1:end); %nochmals die Übersicht der einzelnen Vektoren
y=m(2,1:end);
f=genauigkeit;
for i=1:1:(length(x)-1) if(y(i).*y(i+1))<0 %sucht die Stellen,an welchen der Wert negativ wird
% funktioniert auch noch, allerdings nur für ganzahlige Schrittweite
xint=[x(i);x(i+1)];
yint=[y(i);y(i+1)];
% yintb=[y(i+1)];
xinta=[x(i)];
xintb=[x(i+1)];
a=(xinta+xintb)/2; %die Intervallshalbierung funktioniert einmalig
% ein weitere Aufteilung ist nicht möglich, % da immer die y-Werte benötigt werden, es % aber nicht möglich ist, y(i) und y(a) % auszuwerten. Aber irgendwie muss y die % neuen x-Werte zugewiesen werden können, % und zwar in einer Schleife, sodass immer % weiter verfeinert wird fprintf('grobe Nullstellen: %1.6f\n', a)
Ich verstehe nicht, warum du nicht bereit bist, die dir zur Verfügung gestellte Lösung zu akzeptieren.
Hast du schon mal versucht, dir an der Uni Hilfe von einem Übungsbetreuer oder Tutor zu holen? Oder dich mal systematisch einzuarbeiten statt von einem Problem zum anderen zu hangeln?
weil der Prof die Lösung nicht akzeptieren wird (oder nicht versteht). Man muss diese strikt nach seinen Vorgaben lösen. Wir hatten einen Crashkurs der über ein paar Stunden ging und niemand weiß so recht über die Lösbarkeit der Aufgabe bescheid....selbst der Tutor nicht.
Die Lösung von dir funktioniert auch mittlerweile. Habe schlichtweg die Semikolon nicht rausgenommen, wodurch natürlich kein Ergebnis angezeigt wird. Kann natürlich versuchen diese Lösung zu verwenden, bin mir aber sicher das wird so, wegen fehlender Datenmatrix, nicht abgenommen.
Systematisch einarbeiten geht bei den heutigen Turbostudiengängen nicht mehr. Hier wird klassisches bulimielernen praktiziert und die Absolventen sind für den Arbeitsmarkt unbrauchbar.
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.