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

Differenz zwischen zwei Matrizen

 

Markus1995
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2016, 14:07     Titel: Differenz zwischen zwei Matrizen
  Antworten mit Zitat      
Hallo ,

habe zwei Matrizen A und B , von diesen möchte ich die Differenz bilden mit einer for schleife. Der Grund weshalb ich es mit einer for schleife mache ist, das ich die Differenz von jeden Punkt vom Matrix A einzeln mit dem Matrix B ermitteln möchte.

Code:
A=( 1 2 3 , 4 5 6 , 7 8 9 );
B= ist eine beliebiges 10x10 matrix

A_1= ones(10,10);

for n=1:10
diff_A=(A(n,n)*A_1)-B;

minimum = min(diff_A(Smile);
minimum1= find(diff_A==minimum);
vektor_min(n,nn)=minimum;
% plot3(XX1(minimum1),YY1(minimum1),ZZ1(minimum1),'k*');

end

 

Irgendwie klappt das an einer stelle nicht , kann mir bitte jemand meine Fehler sagen , bedanke mich jetzt schon für die Hilfe.


Gruß Markus
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 08.01.2016, 16:55     Titel: Re: Differenz zwischen zwei Matrizen
  Antworten mit Zitat      
Markus1995 hat Folgendes geschrieben:
Irgendwie klappt das an einer stelle nicht , kann mir bitte jemand meine Fehler sagen , bedanke mich jetzt schon für die Hilfe.


Was klappt wo nicht? Was erwartest du?
Bitte genau Fehlermeldung posten.

Außerdem ein lauffähiges Minimalbeispiel.
Woher kommt nn?
Nutze bitte die Codeumgebung, denn dein Quellcode ist offensichtlich durch einfügen von Smilies (Smile) nicht mehr lesbar.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2016, 17:22     Titel:
  Antworten mit Zitat      
Hallo,

Ich möchte am ende den minimalsten wert zwischen den beiden Matrizen ermitteln , aber dies geht nicht weil irgendwas an meinem for schleife nicht stimmt . Meine ziel ist es anhand einer for schleife den Differenz vom Matrix A und B zu ermitteln . Z.b Differenz zwischen A(1,1) und B , danach für A(1,2) und B immer so weiter.

nn war eine tipp Fehler.
da wo smile steht kommt ein Doppelpunkt


Gruß Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 08.01.2016, 18:51     Titel: Re: Differenz zwischen zwei Matrizen
  Antworten mit Zitat      
Mmmartina hat Folgendes geschrieben:

Bitte genau Fehlermeldung posten.

Außerdem ein lauffähiges Minimalbeispiel.

_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2016, 14:49     Titel:
  Antworten mit Zitat      
Code:
x1=[ 1 2 3 ; 4 5 6 ; 7 8 9];
y1=[2 3 4 ; 5 6 7 ; 1 2 4];
z1=[ 2 8 3 ; 3 5 6 ; 3 4 6 ];

x_2=[2 4 5 ; 3 1 3 ; 5 6 2 ];
y_2=[ 1 3 5 ; 5 2 2 ; 9 7 3];
z_2=[ 1 4 5 ; 1 5 9 ; 7 9 4];

hold on
plot3(x1,y1,z1,'k*');
plot3(x_2,y_2,z_2,'m*');

A=ones(3,3);

for n=1:3
    for nn=1:3
        diff_x=(x1(n,nn)*A)-x_2;
        diff_y=(y1(n,nn)*A)-y_2;
        diff_z=(z1(n,nn)*A)-z_2;
        summe_diff= (diff_x+diff_y+diff_z);
        summe_diff1=abs(summe_diff);
        minimum = min(summe_diff1(:));
        minimum1= find(summe_diff==minimum);
       
        plot3(x1(minimum1),y1(minimum1),z1(minimum1),'k*');
    end
end





das wäre eine Beispiel code von mir , ich möchte jetzt immer den abstand von einem Punkt vom x1 , y1 und z1 und der gesamten matrix 2 bilden und danach den abstand mit dem zweiten Punkt und immer so weiter.
Ist die for schleife so richtig ?

Ich habe bei meinem Programm 1000x1000 Matrizen.



Gruß Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 11.01.2016, 15:29     Titel:
  Antworten mit Zitat      
Ich gehe mal davon aus, dass du den minimalen Abstand haben willst, d.h. ich habe den Betrag der Differenz genommen.

Code:
clear all; close all; clc;

A=rand(3,3);
B=rand(10,10);

n=size(B,1);
v=zeros(size(A,1),size(A,2),2);
for i=1:size(A,1)
    for j=1:size(A,2)
        tmp=abs(A(i,j)*ones(n)-B);
        [~,idx1]=min(tmp);
        [~,idx2]=min(min(tmp));
        idx1=idx1(idx2);
        v(i,j,1)=idx1;
        v(i,j,2)=idx2;
    end
end


Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.01.2016, 15:41     Titel:
  Antworten mit Zitat      
Hallo Friidayy,

Ich empfehle, das brutale "clear all" grundsätzlich weg zu lassen. Es ist nicht nützlich sämtliche Variablen im Workspace zu löschen, die geladenen Funktionen aus dem Speicher zu entfernen, so dass sie zeitraubend wieder von der Festplatte gelesen werden müssen, alle Debugger-Breakpoints zu löschen und die persistenten Variablen ebenfalls. Das ist einfach eine unnütze Zeitverschwendung und erschwert das Debuggen.

Code:
% Statt:
tmp=abs(A(i,j)*ones(n)-B);
% Kann man effizienter schreiben:
tmp=abs(A(i,j) - B);
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus1995
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 23.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.01.2016, 17:29     Titel:
  Antworten mit Zitat      
Hallo,

danke für euere Hilfe , hat mir schon gut geholfen, ich hätte da noch eine frage wie ist es wenn ich noch y und z Komponente habe und diese auch in die for schleife reinschreiben möchte , kann ich es dann so schreibe ?

Code:
A=ones(17,360);
n=size(x,1);
v=zeros(size(x2,1),size(x2,2),2);
for i=1:size(x2,1)
    for j=1:size(x2,2)
          diff_x=(x2(i,j)*A)-x1;
          diff_y=(x2(i,j)*A)-y1;
          diff_z=(z2(i,j)*A)-z1;
          summe_diff= (diff_x+diff_y+diff_z);
          summe_diff1=abs(summe_diff);
          [~,idx1]=min(summe_diff1);
          [~,idx2]=min(min(summe_diff1));
          v(i,j,1)=idx1;
          v(i,j,2)=idx2;
end
end
 



Meine Überlegung ist das ich die x y und z Komponenten voneinander abziehen und dann die Differenz zusammen addiere und da wo es am geringsten ist habe ich mein minimalen abstand.
Es sind ja zwei Plots mit unterschiedlichen Dimensionen und da wo die Differenz von den x y z Koordinaten am geringsten ist habe ich den geringsten abstand.


Gruß Markus
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.01.2016, 12:55     Titel:
  Antworten mit Zitat      
Hallo Markus1995,

In welcher Norm misst Du denn den "Abstand"? Wenn es um die euklidische Distanz geht, ist es nicht das Minimum der Summe der Differenzen der Komponenten, sondern der Quadrate dieser Differenzen.

Gruß, Jan
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.