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

Simple Differenz

 

Pythagoras79
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2010, 19:50     Titel: Simple Differenz
  Antworten mit Zitat      
Hab zwei functionen:

Code:
function trajectories=Trajectories(n)

j=[1:n];

trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));
 


und

Code:
function touching=Touching(n,m)

a=n-m;

j=[1:a];

trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));
all_touching(j)=((factorial(n))./(factorial(j+m).*factorial(n-(j+m))));

touching(j)=min(trajectories(j),all_touching(j));


k=a+1:n;

touching(k)=0;

touching=touching(j:n);


jetzt soll

Code:
function nottouching=Nottouching(n,m)

j=[1:n]

nottouching(j)=trajectories(j)-touching(j);


die Differenz aus trajectories und touching ergeben???
Matlab meckert aber:
Zitat:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> Trajectories at 9
trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));

Error in ==> Nottouching at 10
nottouching(j)=trajectories(j)-touching(j);


Was läuft schief, dachte für jedes j zieht er die Differenz Sad
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: 13.01.2010, 20:07     Titel:
  Antworten mit Zitat      
Hallo,

zum einen sieht es so aus, als ob touching.m mit 2 Argumenten aufgerufen werden sollte.
Zum anderen versuchst du hier, die Differenz zweier Vektoren in eine Komponente eines Vektors zu schreiben. Und das kann schlecht gehen. Alternative mit Cell Arrays (soweit ich den Code verstehe) :

Code:
function nottouching=Nottouching(n,m)
for j=1:n
nottouching{j}=trajectories(j)-touching(j);
end


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2010, 20:12     Titel: Funktioniert nicht wirklich
  Antworten mit Zitat      
Zitat:
Warning: Could not find an exact (case-sensitive) match for 'trajectories'.
D:\Universität\Diplomarbeit\Programme\Costabile\Trajectories.m is a case-insensitive match and will be used instead.
You can improve the performance of your code by using exact
name matches and we therefore recommend that you update your
usage accordingly. Alternatively, you can disable this warning using
warning('off','MATLAB:dispatcher:InexactCaseMatch').
This warning will become an error in future releases.
> In Nottouching at 10
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> Trajectories at 9
trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));

Error in ==> Nottouching at 10
nottouching(j)=trajectories(j)-touching(j);

Sind etwa die Namen der M-Files das Problem?
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: 13.01.2010, 20:16     Titel:
  Antworten mit Zitat      
Nein, das ist nicht das Problem, auch wenn man bei Groß- und Kleinschreibung konsistent sein sollte. Das mutmaßliche Problem habe ich oben beschrieben.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2010, 13:36     Titel: Funktioniert nicht
  Antworten mit Zitat      
Und wie bekomme ich jetzt die einzelnen Werte?

Also bis wenn j bis a läuft, dann klappt es ja:

Code:
function nottouching=Nottouching(n,m)


a=n-m;

j=[1:a];

trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));
all_touching(j)=((factorial(n))./(factorial(j+m).*factorial(n-(j+m))));

touching(j)=min(trajectories(j),all_touching(j));
nottouching(j)=trajectories(j)-touching(j);          %Bis hier in Ordnung

nottouching=[0,nottouching(j:a)];

Aber wenn j größer a ist und weiter laufen soll bis n, dann bricht die ganze Geschichte komischerweise zusammen.
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.01.2010, 14:51     Titel:
  Antworten mit Zitat      
Hallo,

was bedeutet denn "dann bricht die ganze Geschichte komischerweise zusammen."??

Wenn j > n-m ist n-(j+m) < 0, und factorial ist nunmal nicht für negative Zahlen definiert.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2010, 16:16     Titel: kleine Lösung
  Antworten mit Zitat      
Ja, dass das nicht geht verstehe ich schon. Hab deswegen eine for Schleife eingebaut:
Code:
for j=a+1:n;

touching(j)=0;

end;


Das funktioniert dann. Als Ergebnis für Trajectories.m und touching.m

bekomme ich jetzt Vektoren mit 1 Zeile und n+1 Spalten. Das läuft prima.

Jetzt soll Nottouching für jedes Vektorenelement die Differenz aus Trajectories und Touching an der jeweiligen Stelle sein. Hab das jetzt so programmiert:
Code:
n=20;
m=4;

Pfade=zeros(1,n+1);
Beruehrende=zeros(1,n+1);
Verfehlende=zeros(1,n+1);

%Pfade(1,1)=1;
%Beruehrende(1,1)=1;

for j=1:n+1
   
    Pfade(1,j)=trajectories(1,j);
    Beruehrende(1,j)=touching(1,j);
   
    Verfehlende(1,j)=Pfade(1,j)-Beruehrende(1,j);
   
   
end;


Pfade
Beruehrende
Verfehlende
 


Das scheint zu funktionieren, komisch ist aber, dass ich Trajectories.m und Touching.m vorher aufrufen muss. Liegt das an den Input-Parametern n und m. Weil Trajectories nur n braucht und Touching.m braucht n und m?
Wie kann ich die Geschichte vereinfachen?

Hier noch meine Funktionen
Trajectories:
Code:
function trajectories=Trajectories(n)



j=[1:n];

trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));

trajectories=[1,trajectories];  %Vorsicht Indizes verschieben sich um 1

und Touching.m
Code:
function touching=Touching(n,m)

a=n-m;

for j=1:a;

trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));
all_touching(j)=((factorial(n))./(factorial(j+m).*factorial(n-(j+m))));

touching(j)=min(trajectories(j),all_touching(j));

end;

for j=a+1:n;

touching(j)=0;

end;

touching=[1,touching];  
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.01.2010, 18:36     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das scheint zu funktionieren, komisch ist aber, dass ich Trajectories.m und Touching.m vorher aufrufen muss.


Wie meinst du das?
Wie zuvor erwähnt, solltest du auf case sensitivities achten. Der Aufruf beginnt mit Kleinbuchstaben, dein Dateiname anscheinend mit Großbuchstaben. Das muss nicht, kann aber zu Schwierigkeiten führen.

Interessant auch: trajectories im Aufruf übergibt zwei Argumente, Trajectories.m nimmt aber nur einiges entgegen. Sollte eigtl eine Fehlermeldung geben.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2010, 21:29     Titel: Vereinfachung
  Antworten mit Zitat      
So, hab das mal in ein Progrämmchen gepackt:
Code:
function touching=Touching(n,m)

Pfade=zeros(1,n+1);
Treffer=zeros(1,n+1);
Verfehler=zeros(1,n+1);
a=n-m;

for j=1:a;

trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));
all_touching(j)=((factorial(n))./(factorial(j+m).*factorial(n-(j+m))));

touching(j)=min(trajectories(j),all_touching(j));

end;

for j=a+1:n;

trajectories(j)=((factorial(n))./(factorial(j).*factorial(n-(j))));
touching(j)=0;

end;

Pfade=[1,trajectories]
Treffer=[1,touching]


Pfade und Treffer sind nur Vektoren (1 Zeile, n+1 Spalten)
Jetzt suche ich eine Möglichkeit Treffer spaltenweise von Pfade zu subtrahieren. Das ist alles fürs erste.
Merci
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: 22.01.2010, 22:26     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich es richtig verstehe
Code:
Pfade - Treffer


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.