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

beliebige Funktion über input eingeben und verarbeiten

 

willi_vintage
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2014, 23:33     Titel:
  Antworten mit Zitat      
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
    case 1
        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);            
        while abs(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
     case 2
        exit
end      
 

und die function y:

Code:
function [ y ] = y( x )

y=0.5*x.^3-5*x.^2+2*x+10;
end
Private Nachricht senden Benutzer-Profile anzeigen


willi_vintage
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2014, 10:18     Titel:
  Antworten mit Zitat      
Hallo Harald,

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
Code:
x=-50:0.1:50

eine Genauigkeit für die Abstände ziwschen 2 x-Werten für die spätere Berechnung. Z.B.
Code:
Genauigkeit=1e-05

und eine Gleichung, z.B.
Code:

packe dies in einen Datenmatrix. Z.B.
Code:

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:
Code:
for i=1:1:(length(x)-1)
            if (y(i))*(y(i+1))<0
               xn1=x(i);
               xn2=x(i+1);
               xn=(xn1+xn2)/2;
        while abs(xn1-xn2)>=genauigkeit
            yn1=y(xn1);
            yn2=y(xn2);
            xn=(xn1+xn2)/2;
            yn=y(xn);
           
            if (yn1*yn)<0
            xn2=xn;
            else
            xn1=xn;    
            end
               plot(x,a)
        end      
            end
        end


FSCHNITTPUNKTE.zip
 Beschreibung:

Download
 Dateiname:  FSCHNITTPUNKTE.zip
 Dateigröße:  865 Bytes
 Heruntergeladen:  384 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.11.2014, 21:29     Titel:
  Antworten mit Zitat      
Hallo,

mein vorgeschlagener Aufruf:
Code:
[ f, Nullstellen, y] = F_SCHNITTPUNKTE(x, genauigkeit)

(bzw. da du den _ aus dem Dateinamen entfernt hast, eben ohne _)

Dein Aufruf:
Code:
f=FSCHNITTPUNKTE(x, genauigkeit);


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?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
willi_vintage
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2014, 11:11     Titel:
  Antworten mit Zitat      
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.....
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.11.2014, 12:24     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
nun soll y der vektor z=2:0.1:20 zugewiesen werden

Das hört sich für mich nicht sinnvoll an.

Für eine effiziente Hilfe bitte immer die Befehle angeben, die du verwendet hast, und die Probleme, die dabei aufgetreten sind.

Folgendes ginge:
Code:
x=1:1:10
y=x.^2
z=2:0.1:20
y = z


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
willi_vintage
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2014, 20:08     Titel:
  Antworten mit Zitat      
Hallo Harald,

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
    case 1
        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);
     case 2
        exit
end  


und die function F_SCHNITTPUNKTE.m

Code:
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)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.11.2014, 20:55     Titel:
  Antworten mit Zitat      
Hallo,

bitte auf den Vorschlag eingehen.

Was soll y(i) sein? Meinst du mit y(a), dass y der Wert f(a) zugewiesen werden soll? Dann musst du f an die Funktion übergeben und dann
Code:


Wenn y allgemein etwas zugewiesen werden soll:
Code:

Wenn an einen Vektor etwas angehängt werden soll:
Code:
y = [y, ...] % für Zeilenvektor
y = [y; ...] % für Spaltenvektor


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?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
willi_vintage
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 01.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2014, 21:05     Titel:
  Antworten mit Zitat      
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. Rolling Eyes 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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.11.2014, 22:03     Titel:
  Antworten mit Zitat      
Hallo,

bitte auf die Vorschläge und Rückfragen eingehen.

Wenn du meinst, dass dich die Uni nicht für den Arbeitsmarkt vorbereitet, dann wäre meine Empfehlung, das möglichst selbst in die Hand zu nehmen.

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

Gehe zu Seite Zurück  1, 2, 3, 4

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.