Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » MATLAB in PASCAL übersetzen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen MATLAB in PASCAL übersetzen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
tigerbine
Grünschnabel


Dabei seit: 03.06.2007
Beiträge: 2

MATLAB in PASCAL übersetzen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo ihr lieben,

ich habe folgendes Problem. Ich habe ein Matlabfile geschrieben, das Daten in eine tx3 Matrix eintragen soll und diese Matrix dann sortiert und die Anzahl der verschiedenen Zeilen ausgeben soll.

t soll sich in der Größenordnung 1.000² und größer bewegen. Nun habe ich das Problem, dass das Programm zwar läuft, aber doch sehr lange braucht. Ist das "normal"?

Im matheboard meinte man nein, und gab mir den Rat es mit einer anderen Sprache zu versuchen. Ich habe dann Freepascal installiert. Jedoch tue ich mit der Übersetzung des Programms schwer. (Alternativ hätte ich noch maple V Release auf dem PC, habe das aber immer nur als "Taschenrechner für Matrizen" benutzt.

Könnte mir jemand bei der Übersetzung helfen? Danke,

tigerbine Wink

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
%Projektion am Ikosaeder 
%a:  Kantenlänge des Ikosaeders
%R:  Radius der zu produzierenden Kugel
%RU: Umkugelradius für a=1
%Zusammenhang: R=RU*a <=> a = R/RU 

%Ikosaedermittelpunkt
M=[0;0;0];

%Radius Umkugel Ikosaeder a=1
RU=0.25*sqrt(10+2*sqrt(5));

%******************************************************************************************************************
%Radius der zu produzierenden Kugel
%R=input('Kugelradius R: ');

%Berechnung der Kantenlänge a
%a= R/RU;

%Will man mit R arbeiten, muss man bei der Projektionsvorschrift die Variablen tauschen.
%******************************************************************************************************************

%Festlegung der Kantenlänge a
a=1


%Radius Umkreis gleichseitiges Dreieck (weiß)
ru=(sqrt(3)/3)*a;

%Radius Inkreis gleichseitiges Dreieck (weiß)
ri=(sqrt(3)/6)*a;

%Abstand "weißes Ikosaeder-Dreieck" und M (Höhe der Pyramide) 1/16=0.0625
hp=(sqrt(0.0625*(10+2*sqrt(5))-1/3))*a;

%Schwerpunkt/Umkreismittelpunkt des "weißen Ikosaeder-Dreiecks"
S=[0;hp;0];

%Eckpunkte eines "weißen Iskosaeder-Dreiecks "(liegen auf Umkugel)
E1=[(-0.5)*a;hp;ri];
E2=[(0.5)*a;hp;ri];
E3=[0;hp;-ru];

E1E2=[1*a;0;0];
E1E3=[(0.5)*a;0;-ru-ri];

%*******************************************************************************************************************
1
%Berechnung der inneren Punkte für n=Frequenz (Anzahl der Teilstrecken). Zeilenweise im Dreieck von Links nach Rechts. 
n=input('n: ');

%Blockmatrix erstellen 3*(n+1) x (n+1), M: Koordinaten im "weißen Ikosaeder-Dreieck"
k=-1;
for i=1:(n+1)
    %Erzeugt den Dreierblock xyz
    d=3*(i-1)+1;
    
    %Sorgt für die Dreieckgestalt
    k=k+1;
    
    for j=1:[(n+1)-k]
        M(d:d+2,j)=E1+((j-1)/n)*E1E2+((i-1)/n)*E1E3;
    end
end
M
%*******************************************************************************************************************

%*******************************************************************************************************************
2
%Projektion der neuen (roten) Punkte auf die Umkugel. Wegen M=[0;0;0] ist für jeden Punkt W im "weißen Ikosaeder-Dreieck" 
%seine Projektion WP: WP=R*(1/norm(W))*W;

%Projektionsmatrix erstellen, P: Koordinaten 
i=1;
d=1; %für die Dreieckblöcke der Koordinaten
k=0;

%Erste Dreieckszeile
P(d:d+2,1)=M(d:d+2,1); %Eckpunkt E1 bleibt
    for j=2:[(n+1)-(k+1)]
        P(d:d+2,j)=RU*(1/(norm(M(d:d+2,j))))*M(d:d+2,j);
    end 
P(d:d+2,n+1)=M(d:d+2,n+1); %Eckpunkt E2 bleibt

%innere Dreieckszeilen
if n>1
    for i=2:n
        d=3*(i-1)+1;
        k=k+1;
        
        for j=1:[(n+1)-k]
            P(d:d+2,j)=RU*(1/(norm(M(d:d+2,j))))*M(d:d+2,j);
        end
    end
end

%Eckpunkt E3 bleibt
d=3*n+1;
P(d:d+2,1)=M(d:d+2,1);
        
P
%********************************************************************************************************************

%********************************************************************************************************************
%Kontrollmatrix (Ob E1E2E3 unverändert geblieben sind)
K=P-M;
%********************************************************************************************************************

%********************************************************************************************************************
3
%Längenmatrizen erstellen V:Vertikal, H: Horizontal, D Diagonal

%Horizontale Längen-Matrix
k=-1;
for i=1:n
    d=3*(i-1)+1;
    k=k+1;
    for j=1:[n-k]
        H(i,j)=norm(P(d:d+2,j)-P(d:d+2,j+1));
    end
end
H;

%Vertikale Längen-Matrix
k=-1;
for i=1:n
    d=3*(i-1)+1;
    k=k+1;
    for j=1:[n-k]
        V(i,j)=norm(P(d:d+2,j)-P(d+3:d+5,j));
    end
end
V;

%Diagonale Längen-Matrix
k=-1;
for i=1:n
    d=3*(i-1)+1;
    k=k+1;
    for j=1:[n-k]
        D(i,j)=norm(P(d:d+2,j+1)-P(d+3:d+5,j));
    end
end
D;
%********************************************************************************************************************

%********************************************************************************************************************
4
%Matrix1 mit den Dreiecksangaben [Hor-Ver-Dia] (2 oben - 1 unten)
k=0;
for i=1:n
    for j=1:((n+1)-i)
        k=k+1;
        T1(k,1)=H(i,j);
        T1(k,2)=V(i,j);
        T1(k,3)=D(i,j);
    end
end
T1;

%Matrix2 mit den Dreiecksangaben [Hor-Ver-Dia] (1 oben - 2 unten)
k=0;

if n==1
   T2=[0 0 0];
end
   
if n>1
    for i=2:n
        for j=1:((n+1)-i)
        k=k+1;
        T2(k,1)=H(i,j);
        T2(k,2)=V(i-1,j+1);
        T2(k,3)=D(i-1,j);
        end
    end
end
T2;

%Alles in eine Matrix schreiben
%disp('Dreiecke (Hor Ver Dia) erst v dann ^');
T=[T1;T2]
%********************************************************************************************************************

%*********************************************************************************************************************
%Kontrollzahl der Dreiecke:
t1=0;
t2=0;
for i=1:n
    t1=t1+i;
end
for j=1:(n-1)
    t2=t2+j;  
end
disp('Kontrollzahl der Dreiecke');
t=t1+t2
%*********************************************************************************************************************

%********************************************************************************************************************
%Die Matrix T wird im ANSICHTmodus in der FESTpunktdarstellung long. Die Variable T eigent sich nicht zum sortieren
%da ihre Einträge im Formal double gespeichert sind. 
% WHAT YOU SEE IS NOT WHAT YOU 'VE GOT
%********************************************************************************************************************

%********************************************************************************************************************
%Radius der zu produzierenden Kugel %ÄNDERUNG von 10^5 auf 10^4!!!
R1=input('Kugelradius R(m): ');
R=R1*10^4
A=R/RU;

TA=A*T;
%********************************************************************************************************************

%********************************************************************************************************************
%Matrixangaben auf 10^-5m vor Komma umrechnen. Dann Abrunden/schneiden mit intX
R5=int32(TA)
%********************************************************************************************************************

%********************************************************************************************************************
5
%Sortieren innerhalb Zeile
for i=1:t
    SR5(i,:)=sorty(R5(i,:));
end
SR5;

%Sortieren der Matrix
S=sortrows(SR5);
%*********************************************************************************************************************

%*********************************************************************************************************************
6
%Produzierbar?
HV=max(SR5);
H=max(HV);

LV=min(SR5);
L=min(LV);

I=[L H]

if H>21000
    disp('Möglich sind 0 bis 21000: !!!nicht möglich!!!');
else
    disp('Möglich sind 0 bis 21000: möglich :-)');
end
%*********************************************************************************************************************

%*********************************************************************************************************************
7
%Anzahl(Number) der verschiedenen Dreiecke bestimmen
SD=double(S);

N(1,:)=SD(1,:);
for i=2:t
    N(i,:)=SD(i-1,:)-SD(i,:);
end
N;

nb=1;
for i=2:t
    if N(i,:)==[0 0 0]
        nb=nb;
    else
        nb=nb+1;
    end
end
nb
%*********************************************************************************************************************

%*********************************************************************************************************************
%Wird auf die Dreiecke gesehen die Vielzahl geringer?
q=nb/t
%*********************************************************************************************************************
clear classes
03.06.2007 12:22 tigerbine ist offline Beiträge von tigerbine suchen Nehmen Sie tigerbine in Ihre Freundesliste auf
David_pb
Mitglied


Dabei seit: 01.06.2007
Beiträge: 44

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wo hängts denn bei der Übersetzung?
03.06.2007 14:09 David_pb ist offline E-Mail an David_pb senden Beiträge von David_pb suchen Nehmen Sie David_pb in Ihre Freundesliste auf
tigerbine
Grünschnabel


Dabei seit: 03.06.2007
Beiträge: 2

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Daran, dass ich Pascal nur mal vor Jahren in der Schule hatte. Mir fehlen hier nun einfach die Vokabeln. Es fängt schon hier an:

Wie gibt man Zeilenvektoren, Spaltenvektoren, Matrizen ein?

M;S;E1,E2,E3,E1E2, E1E3 sollen Spaltenvektoren (sind sie das auch?) sein. Bislang bin ich soweit gekommen (Siehe Anhang).

EDIT: Hat sich erledigt. Habe es hinbekommen.

tigerbine hat dieses Bild (verkleinerte Version) angehängt:
pascal1.jpg

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von tigerbine: 20.06.2007 17:15.

03.06.2007 16:34 tigerbine ist offline Beiträge von tigerbine suchen Nehmen Sie tigerbine in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » MATLAB in PASCAL übersetzen