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

Befehlssuche

 

karl-heinz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2008, 17:49     Titel: Befehlssuche
  Antworten mit Zitat      
Hallo,
ich soll eine 7x7 Matrix erstellen mit der Formel: A(m,n)=m²*(n-4)

delta_m=1
mend=7
m=[1:delta_m:mend]


delta_n=1
nend=7
n=[1:delta_n:nend]

for M(m,n)=[m^2*(n-4)]
M(m,n)
end
Ich hab bisher das gemacht, aber das funktioniert nicht.
Nun weiß ich nicht mehr weiter.


keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 26.02.2008, 07:27     Titel:
  Antworten mit Zitat      
Über Schleifen lässt sich das Problem so lösen:

Code:

M = zeros(7,7)

for m = 1 : 7
for n = 1 : 7
M(m,n) = m^2*(n-4);
end
end
M
 


Jetzt wird in der For-Schleife die Matrix berechnet und durch das "M" am Ende wird sie Dir noch angezeigt.

Allerdings gibt es wahrscheinlich eine elegantere Lösung, da hoffe ich aber auf andere Forenteilnehmer ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 26.02.2008, 10:43     Titel:
  Antworten mit Zitat      
Hallo Ihr,

in Vektorschreibweise sieht das so aus:

Code:
V1 = (1:7)'.^2
V2 = (1:7)-4

A = V1*V2


Man bildet einen Spalten- und einen Zeilenvektor. Das Produkt ist eine Matrix mit den gewünschten Einträgen.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 26.02.2008, 11:10     Titel:
  Antworten mit Zitat      
Von mir auch noch ein Vorschlag:

Code:
clear all;
clc;

m= 7;
n= 7;

M(1:m,1)=(1:m).^2*(1-4);
M=repmat(M,1,n);
Y=cumsum(repmat((1:m)'.^2,1,n-1),2);
M(:,2:end)=M(:,2:end)+Y


Vielleicht machen wir einen most obfuscated code contest
daraus.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
karl-heinz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2008, 16:11     Titel:
  Antworten mit Zitat      
Vielen Dank für eure Antworten.Bin da noch gar nicht drauf gekommen. Da könnte man echt nen contest draus machen...
Die Lösung mit den Schleifen geht genau in die Richtung, wie ich es mir vorgestellt hab. werd aber auch noch die anderen lösungen verwenden können.

gruß karl-heinz
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 26.02.2008, 16:39     Titel:
  Antworten mit Zitat      
Schleifen in Matlab sind böse, das musst Du Dir merken :)

Alles, was in Matlab ohne Schleifen gelöst werden kann, sollte ohne Schleifen gelöst werden, da die benötigte Rechenzeit teilweise drastisch sinken kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
karl-heinz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2008, 17:08     Titel:
  Antworten mit Zitat      
werd ich mir merken Smile
hauptsache die sache funktioniert erst mal. bin noch nicht so vertraut mit dem programm...
 
karl-heinz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2008, 18:37     Titel:
  Antworten mit Zitat      
hab noch ein problem: wie stelle ich einen vektor a2 als funktion des vektors a1 dar?

desweiteren muss ich diese dann als graph darstellen. dass dies mit hilfe des befehls "plot" geschieht leuchtet ein, nur wie genau man den code schreibt...

gibts hier irgendwo ein nachschlagewerk oder befehlserklärung (außer help bei matlab), dass ich nicht immer mit so einfachen fragen kommen muss...

vielen dank nochmal.
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 26.02.2008, 23:01     Titel:
  Antworten mit Zitat      
keloid hat Folgendes geschrieben:
Schleifen in Matlab sind böse, das musst Du Dir merken Smile

Alles, was in Matlab ohne Schleifen gelöst werden kann, sollte ohne Schleifen gelöst werden, da die benötigte Rechenzeit teilweise drastisch sinken kann.


In diesem Fall ist glaube ich meine Schleifen-lose Lösung dennoch langsamer.
Bijicks Lösung dürfte die schnellste und eleganteste sein.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.02.2008, 13:32     Titel:
  Antworten mit Zitat      
Hallo karl-heinz,

wenn a1 und a2 gleich lange Vektoren sind, schreibt man

Code:


Wenn nicht, müsstest du mal genauer beschreiben, inwiefern a2 "eine Funktion von a1" ist.

Als deutschsprachige Einführung kann ich folgendes Skript mit Aufgaben sehr empfehlen: http://homepages.fh-regensburg.de/~wah39067/Matlab

Es ist zwar ziemlich alt (Matlab 5.3), aber die Grundlagen sind gleich geblieben. Wenn es Probleme mit komplexeren Funktionen gibt (fzero beispielsweise), kannst Du Dich ja hier melden.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
karl-heinz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2008, 16:15     Titel:
  Antworten mit Zitat      
die vektoren sollen dargestellt werden wie zum beispiel f(x).ich suche den befehl, dass jedem wert von a1 ein wert von a2 zugeordnet wird.
als matlab-neuling ist es schwierig für die einfachsten mathematischen gegebenheiten den passenden befehl zu finden.
und die funktion a2(a1) soll dann als graph dargstellt werden.
x-wert ist dann ein wert von a1 mit dem dazugehörigen y-wert von a2.


danke,

gruß
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 28.02.2008, 09:55     Titel:
  Antworten mit Zitat      
Hallo karl-heinz,

ja, diese Schwierigkeiten hatte ich am Anfang auch. In Matlab ist es so: Liegen a1 und a2 schon vor, dann ist eine Zuordnung nicht möglich. Man muss als Benutzer dann wissen, wie sich die beiden Vektoren zueinander verhalten.
Soll a2 aus a1 nach einer Funktionsvorschrift berechnet werden, kann man die Vorschrift in einer for-Schleife auf jedes Element von a1 sukzessive anwenden, oder -eleganter und effizienter- die Vorschrift auf den ganzen Vektor a1 anwenden. Zum Beispiel:

Code:
a1 = [-5 -4 -1 2 3 5 7 9];
% 1. Möglichkeit
a2 = a1.^2;

% 2. Möglichkeit
for k = 1:length(a1)
a2(k) = a1(k)^2;
end

plot(a1,a2);


Der Benutzer muss sich dann im Klaren darüber sein, dass a1 die "x-Werte" und a2 die Funktionswerte enthält. Eine Abhängigkeit wie f(x) kann so nicht ausgedrückt werden.

Allerdings geht das über Matlab-Funktionen. In diesem Beispiel müsste man eine Funktion Quadrat.m schreiben:
Code:
function y = Quadrat(x)
y = x.^2;


Diese kann man dann anwenden:
Code:
a1 = [-5 -4 -1 2 3 5 7 9];
a2 = Quadrat(x);
plot(a1,a2)


Sinnvoll ist eine solche Auslagerung eher bei komplexeren Funktionen, aber es kann auch der Übersicht dienen.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Karl-Heinz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2008, 16:03     Titel:
  Antworten mit Zitat      
Danke für die ausführliche Erklärung,hat mir weitergeholfen.
Sollte ich wieder Schwierigkeiten haben, melde ich mich.

Gruß
 
Karl-Heinz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2008, 18:51     Titel:
  Antworten mit Zitat      
hab wieder ein problem. ich möchte eine wertetabelle. funktioniert soweit ganz gut- bei delta_t=1. wenn ich aber delta_t=0.1 eingebe, gibt er mir in der tabelle immer zwei kommastellen zu klein aus(siehe unten). woran liegt das?

delta_t= .1
tend=20

t=[0:delta_t:tend]

a1=4
a2=8

y1=1/2*a1*t.^2
y2=1/2*a2*t.^2
y3=y2-y1

%plot(t,y1,'r',t,y2,t,'m',y3,'g')
grid on


t_y1_y2_y3=[t' y1' y2' y3']

t_y1_y2_y3 =

1.0e+003 *

0 0 0 0
0.0001 0.0000 0.0000 0.0000
0.0002 0.0001 0.0002 0.0001
0.0003 0.0002 0.0004 0.0002
0.0004 0.0003 0.0006 0.0003
0.0005 0.0005 0.0010 0.0005
0.0006 0.0007 0.0014 0.0007
0.0007 0.0010 0.0020 0.0010
0.0008 0.0013 0.0026 0.0013
0.0009 0.0016 0.0032 0.0016
0.0010 0.0020 0.0040 0.0020
0.0011 0.0024 0.0048 0.0024
0.0012 0.0029 0.0058 0.0029
0.0013 0.0034 0.0068 0.0034
0.0014 0.0039 0.0078 0.0039
0.0015 0.0045 0.0090 0.0045
0.0016 0.0051 0.0102 0.0051
0.0017 0.0058 0.0116 0.0058
0.0018 0.0065 0.0130 0.0065
0.0019 0.0072 0.0144 0.0072
0.0020 0.0080 0.0160 0.0080
...usw

wie kann ich in einer gleichung nach einer variablen auflösen, wie hier im beispiel: y2-y1=600, t=?, d.h. nach welcher zeit ist y2 600m weiter?

danke,

gruß karl-heinz
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 28.02.2008, 19:03     Titel:
  Antworten mit Zitat      
Hallo Karl-Heinz,

beachte

Karl-Heinz hat Folgendes geschrieben:

t_y1_y2_y3 =

1.0e+003 *

0 0 0 0
0.0001 0.0000 0.0000 0.0000
0.0002 0.0001 0.0002 0.0001
0.0003 0.0002 0.0004 0.0002
...usw



1.0e+003 bedeutet 1*10^3, also 1000. und 1000 * 0.0001 ist genau 0.1, wie erwartet. Der Faktor wird verwendet, weil bei t = 20 die Werte für die y schon ganz schön groß werden.

Zur zweiten Frage: Man könnte schreiben:

Code:
index = find(y2-y1==600);
T = t(index)


Gleichheit zu suchen, ist aus numerischer Sicht allerdings ungünstig (der Wert könnte ja auch 60.000000000000001 sein). Wenn man nur den ersten Index sucht, für den die Differenz mindestens 600 ist, kann man schreiben:

Code:
index = find(y2-y1>=600,1,'first');
T = t(index)


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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