Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

MATLAB Programplanlægning Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 >>mit_program(‘ind.txt’.`ud.txt´) myconstants.m function.

Lignende præsentationer


Præsentationer af emnet: "MATLAB Programplanlægning Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 >>mit_program(‘ind.txt’.`ud.txt´) myconstants.m function."— Præsentationens transcript:

1 MATLAB Programplanlægning Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 >>mit_program(‘ind.txt’.`ud.txt´) myconstants.m function mit_program(ind,ud) myconstants; data=readData(ind); % beregn … writeData(ud,result) function d=readData(infile) fid = fopen(infile,’rt’); … fclose(fid); function writeData(outfile,r) fid = fopen(outfile,’wt’); … fclose(fid); ER = 6386000; %m Jordens radius …

2 MATLAB-maskinen Script » A = [9,7] ans = … » B = 25i ans = … … Matlab.exe Workspace A B Lager (memory) Procesenhed Program

3 Programstrukturer Et program definerer rækkefølgen for at udføre ordrer. sekvens ordre ; ordre … valg if ( ) … end; switch … gentagelse (iteration, løkke) for …, while … kald af underprogram (funktion) f( … ) afbrydelse break, return

4 Iteration (over søjler i vektor) FOR variable = expr, statements END for i = 1: 32, x(i) = i*0.2; y(i) = sin( x(i) ).^19; end for h = [1 2 3; 5 6 7], disp(h); end for k = [1 3 5 7 11 13], y = sin( x ).^k; plot(x,y); end for m= 5, b = m; end

5 Generel Iteration WHILE expression, statements END % beregn kvadratroden af a % low = 0; high = a+1; while (high - low) > 2*eps, end; resultat = (high+low)/2; mid = (high+low)/2; if mid*mid > a, high = mid; else low = mid; end

6 Funktioner function y = sinus(x,k) % Beregn sin(x).^k y = sin(x).^k

7 MATLAB-maskinen Script » A = [9,7] ans = … » B = 25i ans = … » sinus(A,6) … Matlab.exe Workspace A B Lager (memory) Procesenhed Program

8 Funktionskald Script » A = [9,7] ans = … » B = 25i ans = … » sinus(A,6) … Matlab.exe Workspace A B function y = sinus(x,k) Workspace x init A k init 6 y init ?

9 Funktionskald -afslutning Script » A = [9,7] ans = … » B = 25i ans = … » sinus(A,6) … Matlab.exe Workspace A B function y= sinus(x,k) Workspace x init A k init 6 y = … ans = y

10 Rekursion function resultat = kvadratrod(a) % Beregn kvadratrod af a ved bisektion resultat = trin(0,a+1,a); function r = trin(low,high,b) % kvadratrod b er mellem low og high if (high - low) <= 2*eps, r = (high+low)/2; return; end; mid = (high+low)/2; if mid*mid > b, r = trin(low,mid,b); else r = trin(mid,high,b); end;

11 Opdeling af Hovedprogram Indlæsning -- d=readData(infile); Beregning -- res = … d … Udlæsning -- writeData(outfile, res); Hvorfor? Overskuelighed Fleksibilitet Separat Afprøvning

12 Indlæsning – med load function d=readData(infile) d = load(infile); afstande.txt % % Afstandsdata % A B P SB S % Pnr Pnr Pnr m m % 5007 1 4 126 49 4 3 5007 29 49

13 Lagring af data Matlab.exe Lager x: ‘afstande.txt ‘ x+12: 7009.0 … ’ function readData(infile,d) d =load(infile) Workspace – nametable infile: char 1,12 (x) d: double 27,5 (x+12)

14 Indlæsning med scanf I function d = readData(infile) fid = fopen(infile); if (fid == -1), error( … for c=1:5, fgetl(fid); end; d = fscanf(fid,'%f',[5,inf])’; fclose(fid); afstande.txt % % Afstandsdata % A B P SB S % Pnr Pnr Pnr m m % 5007 1 4 126 49 4 3 5007 29 49

15 Indlæsning med scanf II function d = readData(infile) fid = fopen(infile); if (fid == -1), error( … for c=1:5, fgetl(fid); end; d = []; while ~feof(fid), d = [d ; fscanf(fid,'%f',5)']; end; fclose(fid); Ikke at anbefale !

16 Lagring af data Matlab.exe Lager x: ‘afstande.txt x+12: 3 function d= readData(infile) … d = []; while ~feof(fid), d = [d ; fscanf(fid,'%f',5)']; end; Workspace – nametable infile: char 1,12 (x) fid: integer 1,1 (x+12) d: double 0, 0 d 1,5 d 2,5 d 3,5

17 Beregning function spred_pol(ind,ud) % beregner skøn for punktmæssig spredning på højde med polær måling % (Jensen 2002) % % ind afstande med 5 søjler % ud tekstfil med resultat af beregningen % spred_pol_param; readData(ind,d); S = d(:,5); s_S = sqrt(s_g^2 + (s_a*S/1000).^2 +s_c^2); % Jensen 2002 11.4 … writeData(ud,[d s_S v_beta s_T s_P s_H]);

18 Parametre spred_pol_param.m: parametre vedr. afstandsmåling, se (11.4) s_g=0.005; %grundfejl i meter( leica=0.002, sokkisha=0.005, Wild=0.001) s_a=0.003; %Afstandsafhængige fejl i meter % (lecia=0.002, sokkisha=0.003, Wild=0.001) s_c=0.005; %Centreringsfejl i meter

19 Beregning - fuldstændig S = d(:,5); s_S = sqrt(s_g^2 + (s_a*S/1000).^ 2 +s_c^2); % Jensen 2002 11.4 S_B = d(:,4); v_beta = s_r^2/n_H +(s_c*Omega./ S).^ 2 + s_r^2/n_H... +(s_c*Omega./ S_B).^ 2; % 11.5 s_T= sqrt(v_beta.^ 2.* (S.^2/Omega^2)); % 11.6 s_P= sqrt((s_S.^2+v_beta.*(S.^2/Omega^2))/2); % 11.3 s_H=sqrt(S.^2*s_V^2/(n_V*Omega^2)+(S.^2/(2*R)).^2*s_k^2... +s_sh^2+s_ih^2); % 6.4

20 Udlæsning fprintf(fid, '\n\nSkøn for punktspredning på højden ved polær måling\n\n'); fprintf(fid, 'Parametre vedr. horisontalretningsmåling:\n'); fprintf(fid, 'Spredning på retning målt med en sats s_r = %5.3f gon\n',s_r); fprintf(fid, 'Antal staster n_H = %5.3f\n',n_H); fprintf(fid, 'Centreringsspredning s_c = %5.3f m/km\n\n',s_c);

21 Formater The format specifier : % [- | + | 0] [Field Width][.Precision] Format Character "-" aligns output left (usually, it's right-aligned). "+" outputs a plus sign for positive numbers (usually, it is supressed). “0” outputs leading zeroes. The field width specifies the overall field length. The precision specifies the length of the fractional part for floating point numbers. If omitted, the default is 6. The format character determines the base type for the formatted values: "d": integer value in decimal format. "f": floating point value in fixed format (xxx.yyyyyy). "e": floating point value in scientific format (0.yyyyyye+zzz). "E": floating point value in scientific format (0.yyyyyyE+zzz). "s": String.

22 Og så … PRØV DET !


Download ppt "MATLAB Programplanlægning Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 >>mit_program(‘ind.txt’.`ud.txt´) myconstants.m function."

Lignende præsentationer


Annoncer fra Google