Verfasst am: 10.10.2011, 14:26
Titel: Mit "Function" top, ohne - error Flop!?
hi!
Ich werke da an einem File und verstehe nicht, warum die function-Umgebung so einen unterschied macht.
Mit function sieht der Code so aus:
Code:
function par_kin
%
% MATLAB function from: % "Elements of Modern X-ray Physics" by Jens Als-Nielsen and Des McMorrow
%
% Calculates: Parratt and kinematical reflectivities from a multilayer % Specific case of W/Si, 10 bilayers of [10 Angs W, 40 Angs Si]
r0=2.82e-5; % Thompson scattering length in Angs
Q=0.01:0.001:0.3; % Wavevector transfer in 1/Angs
lambda=1.54; % wavelength in Angs
rhoA=4.678; muA=33.235e-6; % density and absorption coefficient of W
rhoB=0.699; muB=1.399e-6; % density and absorption coefficient of Si
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[R]=kinematicalR(Q,lambda,sld,sigma,N,Lambda,Gamma)
%
% MATLAB function from: % "Elements of Modern X-ray Physics" by Jens Als-Nielsen and Des McMorrow
%
% Calculates: kinematical reflectivity of a multilayer % Inputs: Q wavevector transfer 1/Angs % lambda wavelength of radiation Angs % sld scattering length density 1/Angs^2 % sld=[sldA+i*muA sldB+i*muB] % sigma rouhgness Angs % N number of bilayers % Lambda length of bilayer Angs % Gamma fraction of bilayer that is A % Outputs: R Intensity reflectivity
Das gibt mir eine nette Kurve, die mich glücklich macht!
und nun nochmal ohne function (ich habe den "kinematical" Teil rausgenommen, nur die Konstanten davon mitgenommen:
Code:
r0=2.82e-5; % Thompson scattering length in Angs
Q=0.01:0.001:0.3; % Wavevector transfer in 1/Angs
lambda=1.54; % wavelength in Angs
rhoA=4.678; muA=33.235e-6; % density and absorption coefficient of W
rhoB=0.699; muB=1.399e-6; % density and absorption coefficient of Si
1. ??? Attempted to access sigma(2); index out of bounds because
numel(sigma)=1. - Warum kommt der fehler in der function-Version des codes nicht vor? Sigma=0 und damit kein Element mit mehreren Einträgen.
Behebe ich diesen Fehler, so kommt auch schon der Nächste:
2. ??? Undefined function or method 'd' for input arguments of type 'double'.
Das selbe wie mit sigma, nur ist 'd' überhaupt nicht gegeben!
Ich habe das Gefühl, dass mir eine Matlab-Grundlage entgangen ist...
Woher nimmt matlab 'd' und 'sigma'?
Hast du eine Funktion/m-file mit dem Namen d im Work-Verzeichnis?
Gelo
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.10.2011, 14:50
Titel:
Danke für deine Antwort!
Es ist klar, dass mit sigma=0 ein zugriff auf sigma(j) keinen sinn macht!
Im work-verzeichniss ist keine datei namens 'd' dabei, hab zur sicherheit die function-version nochmal angelegt in einem leeren ordner, ist weiterhin unverändert!
Somit ist der Vektor sml in der Funktion = sigma und deshalb geht auch der Zugriff auf sigma(j). Das Gleiche gilt bei...dml = d innerhalb der Funktion parratt
sigma = 0 aus par_kin hat nichts mit sigma(j) innerhalb der Funktion parret zu tun!
Gelo
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.10.2011, 15:13
Titel:
Ah, ok, achso!
Danke!
Daher kommt das also! Ich muss kurz mal was ausprobieren...
Gelo
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.10.2011, 15:23
Titel:
wenn ich nun im 'function-losen' file sigma=0 lösche,
Stimmt!
Nun macht er, wie ich will! Danke! Nun mach ich aber weiter, mit meinen "Wabbelfunktionen"
Einstellungen und Berechtigungen
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
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.