MATLAB in PASCAL übersetzen

Neue Frage »

Auf diesen Beitrag antworten »
tigerbine MATLAB in PASCAL übersetzen

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
 
Auf diesen Beitrag antworten »
David_pb

Wo hängts denn bei der Übersetzung?
Auf diesen Beitrag antworten »
tigerbine

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.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »