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

Klausuraufgabe Maschinenbauer IT - Matlab

 

Che
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.03.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 10.03.2014, 19:36     Titel: Klausuraufgabe Maschinenbauer IT - Matlab
  Antworten mit Zitat      
Hey Leute,

ich als Maschinenbauer muss auch in einem Fach IT schreiben. Man muss sagen, dass es im letzten Semester ein neues Konzept gab von den Übungen her. Magicdraw, ein bissjen Matlab. Bin nicht der stärkste in IT und wir haben echt nur die Grundlagen in der Vorlesung behandelt und in der Klausur kamen dann echt hammer Dinger dran, die wir nie so in der Übung geübt habt.
Hier mal die Aufgaben:







Die Chancen stehen gut, dass solch eine Aufgabe nochmal dran kommen kann, wenn nicht sogar genau eine nochmal.


Hier etwas für die Statistiker Smile







Vielleicht hat ja jemand Zeit, und kann mir sagen, wie ich das am besten programmieren kann.
Vllt bekomme ich das ja geschnallt, wenn ich schonmal eine Musterprogrammierung sehe.

Das wäre auf jeden Fall sauuuu stark !

Danke schonmal im voraus Smile

LG
ChE
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 11.03.2014, 09:33     Titel:
  Antworten mit Zitat      
Ich bin mir sehr sicher, dass Sie die Fähigkeit Lösungen für solche Aufgaben selber zu entwickeln in 90% der Jobs als Maschinenbauigenieur benötigen und es klug ist früh damit anzufangen diese Fähigkeiten zu entwickeln.

Die Community hilft gerne in "Hier ist mein Versuch, aber ich kriege noch folgende Fehlermeldung / folgendes unerwartetes Ergebnis" Situationen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Che
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.03.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 11.03.2014, 12:09     Titel:
  Antworten mit Zitat      
dachte mir, dass mich so etwas erwartet Very Happy

fangen wir doch mal klein mit der Aufgabe_1 an:

Code:
function[A,U] = flaecheumfang(b,l)
A = b*l;
U = 2*(l+b);
disp('Die Fläche hat den Wert: '); disp(A);
disp('Der Umfang hat den Wert: '); disp(U);
end

 


Code:
>> flaecheumfang(2, 5)
Die Fläche hat den Wert:
    10

Der Umfang hat den Wert:
    14


ans =

    10



Was soll das ans = 10 bedeuten? das ist wohl der Flächenwert, weil er zuerst im Skript steht als display?
Wie bekomme ich das weg?

Und wie kann ich meine Angaben jetzt noch ein wenig aufwerten, indem ich Einheiten dazu bekomme?
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 11.03.2014, 12:19     Titel:
  Antworten mit Zitat      
Hallo,

deine Funktion liefert grundsätzlich schon mal die richtigen Werte zurück.
Zitat:
wie schaffe ich es, dass er mir Fläche= 10 ausspuckt, also genau dort das Wörtchen "Fläche" steht.

davon, dass das im Command Window ausgegeben werden soll, steht ja nichts in der Aufgabe. Das soll (so wie du es richtig gemacht hast) als Rückgabewerte der Funktion ausgegeben werden.

Zitat:
Und was soll das ans = 10 bedeuten? das ist wohl der Flächenwert, weil er zuerst im Skript steht als display?

Ja, so ähnlich. Du rufst deine Funktion (die 2 Rückgabewerte liefert) auf, ohne die Werte dann zu speichen. Dann gibt das nur den ersten Rückgabewert zurück, in diesem Fall die 10. Dieser Wert wird in ans gespeichert.
besser:
Code:
[A,U] = flaecheumfang(2,5)
% oder, um deine obige Frage doch zu beantworten:
[Flaeche,Umfang] = flaecheumfang(2,5)


Du bist dann aber noch nicht fertig. Bei solchen Aufgaben gehört es eigentlich auch immer dazu, sicherzustellen, dass der Benutzer auch für jede Eingabekombination etwas sinnvolles zurückbekommt, das bedeutet eben auch, dass er darauf hingewiesen werden sollte, wenn er Blödsinn eingibt.
Hier wären denkbare Einschränkungen für l und b (also die Eingabeparameter), dass beides Skalare > 0 sind. Was würde beispielsweise deine Funktion liefern, wenn ich die so aufrufe, was ja offensichtlich Blödsinn ist:
Code:
[A,U] = flaecheumfang(-17,'Apfelbaum')


Die i-Tüpfelchen ist dann noch eine Zeile Kommentar nach dem Funktionsbeginn, in der angegeben wird, wie die Funktion zu nutzen ist. Also bei Eingabe von "help flaecheumfang" sollte dann was im Commandwindow erscheinen.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Che
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.03.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 11.03.2014, 12:36     Titel:
  Antworten mit Zitat      
verdammt, jetzt hast du mir schon geantwortet, als ich gerade am editieren war Very Happy.
In dem 1. Skript-post von mir siehst du jetzt mein Ergebnis.

Zitat:
davon, dass das im Command Window ausgegeben werden soll, steht ja nichts in der Aufgabe. Das soll (so wie du es richtig gemacht hast) als Rückgabewerte der Funktion ausgegeben werden.


Wie hab ich es denn richtig gemacht =D? Wenn ja, dann war das Zufall.
Das ist jetzt blöd, dass ich es editiert habe, in deinem Zitat steht jetzt meine Alte version drin, dort ist es richtig als Rückgabewert der Funktion ausgegeben.

In meiner neuen Version (aber alter Beitrag) ist es nicht mehr richtig, da ich es jetzt nicht mehr als Rückgabewert der Funktion habe?

Das mit dem Rückgabewert kann ich mir noch nicht vorstellen.
Muss ich nur mit dem Skript-Fenster arbeiten?

Brauche ich das Command-window garnicht?
Aber wie stelle ich dann fest, ob er mir was richtiges ausgibt? (abgesehen davon, dass man Käse wie (-18,'Apfelbaum') eingibt.


hier nochmal meine 2 Versionen:

Version1:
Code:

function[A,U] = flaecheumfang(b,l)
A = b*l;
U = 2*(l+b);
disp(A);
disp(U);
end
 


Version2:
Code:
function[A,U] = flaecheumfang(b,l)
A = b*l;
U = 2*(l+b);
disp('Die Fläche hat den Wert: '); disp(A);
disp('Der Umfang hat den Wert: '); disp(U);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 11.03.2014, 12:48     Titel:
  Antworten mit Zitat      
Hallo
Zitat:
da ich es jetzt nicht mehr als Rückgabewert der Funktion habe?

Doch doch... In deiner Funktion sind A und U die Rückgabewerte. Das definierst du mit dieser Zeile:
Code:
function [A,U] = flaecheumfang(b,l)

Innerhalb der Funktion werden A und U jeweils mit einem Wert belegt. Der korrekte Funktionsaufruf, mit dem du dann an die Werte kommst, steht schon oben in meinem ersten Beitrag. Das ist meiner Meinung nach alles, was die Aufgabenstellung verlangt.
Im Commandindwo könnte man dann soetwas machen:
Code:
[Flaeche,Umfang] = flaecheumfang(2,5);
disp(['Die Fläche beträgt: ',num2str(Flaeche)]);
disp(['Der Umfang beträgt: ', num2str(Umfang)]);
 

Aber wie bereits erwähnt, steht das nicht in der Aufgabe.

Zitat:
Und wie kann ich meine Angaben jetzt noch ein wenig aufwerten, indem ich Einheiten dazu bekomme?

Gar nicht? Andernfalls müsstest du als Eingabeargumente noch die Einheit der Länge und der Breite wissen.

Zitat:
Aber wie stelle ich dann fest, ob er mir was richtiges ausgibt? (abgesehen davon, dass man Käse wie (-18,'Apfelbaum') eingibt.

Ich dachte, ihr schreibt eine Klausur mit Stift und Zettel. Wenn ihr aber während der Klausur das ganze in Matlab schreiben könnte, ist das Commandwindow natürlich gut dazu geeignet, mal zu testen, was rauskommt.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Che
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.03.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 11.03.2014, 13:11     Titel:
  Antworten mit Zitat      
ok, vielen Dank.

Glaube jetzt hab ich es geschnallt mit dem Rückgabewert.
Mit der ersten Zeile definier ich Eingabeparameter und Ausgabewerte.
dann kommt mein funktion über die Ausgabewerte in Abhängigkeit der Eingabewerte und jetzt bin ich eigentlich schon fertig.

Code:
function[A,U] = flaecheumfang(b,l)
A = b*l;
U = 2*(l+b);
end


Das würde schon langen würdest du vermuten.
Wenn jetzt noch die Angabe stehen würde:
Schreiben sie ihr skript so, dass wenn sie im Commandwindow das Skript für 2 Werte eingeben schreibt, dass 'Fläche beträgt: '
Dann würde ich meine Versione 1 und 2 benutzen.

Und wenn ich das Command-window nicht benutzen sollte, aber direkt ein Beispiel mit 2 Werten(3,7) auswerten sollte dann benutz ich

Code:
function [A,U] = flaecheumfang(3,7)


und schreibe es vor das "end" im skript.

Für:
Code:
function[A,U] = flaecheumfang(b,l)
A = b*l;
U = 2*(l+b);
disp(['Die Fläche beträgt: ',num2str(A)]);
disp(['Der Umfang beträgt: ', num2str(U)]);
end  


zeigt er mir:

Code:
>> flaecheumfang2(2, 5)
Die Fläche beträgt: 10
Der Umfang beträgt: 14

ans =

    10


was genau macht das num2str?
Google:
Zitat:
Die Anweisungen input,disp,und num2string ermöglichen es,Daten interaktiv einzugegeben

sind diese 3 befehle also gleichwertig?

LG, und danke für die Geduld mit mir Smile


edit:

Und ja, wir schreiben die Klausur mit Stift und Papier.


zu Aufgabe 2 (Teilbarkeit durch 3)

mein Versuch:
Code:
function[true,false] = teilbarkeit(x)
true = mod(x,3);
false = mod(x,3);
if true == 0
    disp('Die eingegebene Zahl ist durch 3 teilbar');
else
    disp('Die eingegebene Zahl ist nicht durch 3 teilbar');
end


Hier hab ich jetzt spontan wieder mit dem commandwindow gearbeitet, weil ich nicht wüsste, wie ich sonst meine if funktion einbringen kann.
Das Skript scheint so zu funktionieren!

jemand andere Vorschläge dazu, wie ich das ganze ohne die Befehle für das CommandWindow schreibe?
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 11.03.2014, 14:34     Titel:
  Antworten mit Zitat      
Zitat:
Und wenn ich das Command-window nicht benutzen sollte, aber direkt ein Beispiel mit 2 Werten(3,7) auswerten sollte dann benutz ich

Code:
function [A,U] = flaecheumfang(3,7)

also diese Zeile macht keinen Sinn. Du redest von auswerten, das ist also ein Funktionsaufruf, dann musst du das "function" streichen.

Zitat:
Code:

function[A,U] = flaecheumfang(b,l)
A = b*l;
U = 2*(l+b);
end

Das würde schon langen würdest du vermuten.

Eigentlich nicht. Da gehört mindestens noch eine Zeile zwischen, die besagt, was die Funktion machen soll und dann sollten noch falsche Eingaben abgefangen werden.


Dein Versuch zur Lösung der zweiten Aufgabe ist auch nicht gerade so richtig gut. true und false sind keine guten Variablennamen, da das sogenante "built-ins" sind. Zudem steht nun bei dir in beiden Variable das gleiche, nämlich das Ergebnis aus mod(x,3).

Die Funktion sollte eher so gebaut sein: Du schaust dir an, was aus beo mod(x,3) rauskommt. Wenn das Ergebnis eine 0 ist, dann war x durch 3 teilbar und der Rückgabewert der Funktion soll eine 1 sein. Wenn das Ergebnis keine 0 ist, dann gibt es einen Divisionsrest und x war nicht durch drei teilbar und der rückgabewert der Funktion soll eine 0 sein.
Ausgabe ist in jedem Fall nur ein einziger Wert und nicht zwei.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Che
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.03.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 11.03.2014, 15:01     Titel:
  Antworten mit Zitat      
Nras hat Folgendes geschrieben:
Zitat:
Und wenn ich das Command-window nicht benutzen sollte, aber direkt ein Beispiel mit 2 Werten(3,7) auswerten sollte dann benutz ich

Code:
function [A,U] = flaecheumfang(3,7)

also diese Zeile macht keinen Sinn. Du redest von auswerten, das ist also ein Funktionsaufruf, dann musst du das "function" streichen.

wuaaah, da hast du natürlich recht.
sehe ich ein Wink


Zitat:

Zitat:
Code:

function[A,U] = flaecheumfang(b,l)
A = b*l;
U = 2*(l+b);
end

Das würde schon langen würdest du vermuten.

Eigentlich nicht. Da gehört mindestens noch eine Zeile zwischen, die besagt, was die Funktion machen soll und dann sollten noch falsche Eingaben abgefangen werden.


Im Sinne eines Kommentares?, also % meinst du?
weil sonst sag ich doch was die Funktion machen soll über A =... und U = ....
Und zum zweiten Teil mit den falschen Eingaben habe ich das gefunden, was mir eventuell weiterhelfen könnte:

Code:

x = input('Bitte eine positive Zahl eingeben: ');

if x>=0
  fprintf('Eine zulässige Zahl\n')
 else
  fprintf('Keine zulässige Zahl\n')
  return;
end
 


Zitat:

Dein Versuch zur Lösung der zweiten Aufgabe ist auch nicht gerade so richtig gut. true und false sind keine guten Variablennamen, da das sogenante "built-ins" sind. Zudem steht nun bei dir in beiden Variable das gleiche, nämlich das Ergebnis aus mod(x,3).

Die Funktion sollte eher so gebaut sein: Du schaust dir an, was aus beo mod(x,3) rauskommt. Wenn das Ergebnis eine 0 ist, dann war x durch 3 teilbar und der Rückgabewert der Funktion soll eine 1 sein. Wenn das Ergebnis keine 0 ist, dann gibt es einen Divisionsrest und x war nicht durch drei teilbar und der rückgabewert der Funktion soll eine 0 sein.
Ausgabe ist in jedem Fall nur ein einziger Wert und nicht zwei.
.


neuer Versuch:
Code:
function[ergebnis] = teilbarkeit(x)
ergebnis = mod(x,3);
if ergebnis == 0
    disp('1');
else
    disp('0');
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 11.03.2014, 15:09     Titel:
  Antworten mit Zitat      
Hallo,

wenn du möchtest, kannst du das mit if und return machen, ja.
Code:
function[A,U] = flaecheumfang(b,l)
% FUNCTION[A,U] = FLAECHEUMFANG(B,L)
% Diese Funktion berechnet den Flächeninhalt und den Umfang eines
% Rechtecks mit der Breite b und der Länge l.

if b < 0 || l < 0
    disp('Länge und Breite müssen positiv sein')
    return;
end

A = b*l;
U = 2*(l+b);
end

Wenn man nun "help flaecheumfang" ins command window eingibt, so weiß der Benutzer, was die funktion macht, ohne das im Code nachlesen/verstehen zu müssen.

Zitat:

Code:
function[ergebnis] = teilbarkeit(x)
ergebnis = mod(x,3);
if ergebnis == 0
    disp('1');
else
    disp('0');
end
 

Fast richtig. Auch hier soll nicht 0 oder 1 auf den Bildschirm ausgegeben werden, sondern das soll der Rückgabewert der funktion sein. Ich dachte an soetwas:
Code:
function teilbar = teilbarkeit(x)

if mod(x,3) == 0
    teilbar = 1;    % 1 wie true
else
    teilbar = 0;    % 0 wie false  
end
% oder als Einzeiler: teilbar = mod(x,3) == 0;
end


Vielleicht darfst du auch hier mod() gar nicht benutzen, da es damit ziemlich witzlos wird.

Viele Grüße,
Nras
Private Nachricht senden Benutzer-Profile anzeigen
 
Che
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.03.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 11.03.2014, 15:49     Titel:
  Antworten mit Zitat      
Nras hat Folgendes geschrieben:
Hallo,

wenn du möchtest, kannst du das mit if und return machen, ja.
Code:
function[A,U] = flaecheumfang(b,l)
% FUNCTION[A,U] = FLAECHEUMFANG(B,L)
% Diese Funktion berechnet den Flächeninhalt und den Umfang eines
% Rechtecks mit der Breite b und der Länge l.

if b < 0 || l < 0
    disp('Länge und Breite müssen positiv sein')
    return;
end

A = b*l;
U = 2*(l+b);
end

Wenn man nun "help flaecheumfang" ins command window eingibt, so weiß der Benutzer, was die funktion macht, ohne das im Code nachlesen/verstehen zu müssen.


ok jetzt verstehe ich das was du gemeint hast mit der Beschreibung der Funktion. Dachte jeder sieht den Quellcode eh und erkennt das direkt Very Happy

Zitat:

Zitat:

Code:
function[ergebnis] = teilbarkeit(x)
ergebnis = mod(x,3);
if ergebnis == 0
    disp('1');
else
    disp('0');
end
 

Fast richtig. Auch hier soll nicht 0 oder 1 auf den Bildschirm ausgegeben werden, sondern das soll der Rückgabewert der funktion sein. Ich dachte an soetwas:
Code:
function teilbar = teilbarkeit(x)

if mod(x,3) == 0
    teilbar = 1;    % 1 wie true
else
    teilbar = 0;    % 0 wie false  
end
% oder als Einzeiler: teilbar = mod(x,3) == 0;
end


und hier wird es auch solansam hell in meiner birne, dass ich mir den Befehl 'disp' sparen kann und einfach denselben Parameter wie bei function[X] nehme und den dann definiere.


Zitat:

Vielleicht darfst du auch hier mod() gar nicht benutzen, da es damit ziemlich witzlos wird.

naja, ist ja jetzt nicht die größte Programmierkunst die ein Maschinenbauer können muss, zumindest jetzt noch nicht.
Gab ja auch nur 4 Punkte. Denke schon, dass wir hier mod benutzen dürfen.




Ich probiere mich gerade an der Aufgabe 3 vom Programmierteil mit Simulink, aber scheitere glaube ich kläglich.

Ich habe probiert, das ganze nachzubauen, um den Code gleich programmieren zu können, und später zu schauen und zu überprüfen, ob der Scope derselbe ist, der herauskommt.

Bekomme es nicht hin, bei der Simulink-Simulation den hier rot-markierten Pfad zu verbinden.





Aufgabenstellung:



Mein Matlab-code bisher (bitte nicht lachen):
Code:
function farbe = Ampelregelung(zeit)
farbe(zeit);
if zeit = 0:1.0:20
    farbe = rot;
    elseif zeit = 20:1.0:40
        farbe = gruen;
        else zeit = 40:1.0:50
            farbe = gelb;
           

farbe = zeit;
end


ich hätte jetzt z.B. in der ersten Zeile schon function[farbe]=Ameplregelung(Zeit) da stehen gehabt, aber als ich einen Matlab-Block in Simulink reingezogen hab, hat er das schon so übernommen.

Run-Model sagt:
Zitat:
Function 'MATLAB Function' (#36.58.59), line 3, column 9:
"="


glaube das ist alles falsch ^^
Hat jemand einen anderen Befehl zum ansetzen mit dem ich arbeiten kann? bzw Befehle?


LG und Danke =)
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 11.03.2014, 15:52     Titel:
  Antworten mit Zitat      
Hallo,

mit Simulink arbeite ich nicht, da kann ich dir nichts zu sagen. Aber da gibt es hier auch Leute, die dir das sicher erklären können.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Che
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.03.14
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 11.03.2014, 16:14     Titel:
  Antworten mit Zitat      
okay, schade Wink

dann mal hier der Thread fürs Simulinkproblem im passenden Forum:
http://www.gomatlab.de/ampelschaltung-t32559.html

Falls ich nochmal fragen zum allgemeinen Programmieren habe, melde ich mich.

LG
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.