Verfasst am: 18.06.2015, 15:46
Titel: Hilfe bei numerischer Integration und Bessel Funktion
Hallo,
ich arbeite schon seit einer Weile an der numerischen Simulation eines Punktschweißvorganges. Mein Problem ist, mit der Integration der Gleichung nicht mehr weiter komme und dass die, in der Gleichung enthaltende Besselfunktion bei mir 2 Variablen besitzt, anstatt nur Eine wie in der MatLab Hilfe.
Das ist was ich bisher, mit Hilfe an der Uni, hinbekommen habe:
Code:
%spatial temperatur distribution during welding
clc,clearall;
closeallhidden
k = 180; % spez Wärmeleitfähigkeit/ thermal conductiviy [W/(mK)]
Ab = 0.4; % Absorptivity
sigma = 205*10.^-5; % Gaußscherverteilungs Koeffizient/ gaussian distribution coefficient
Q = 1500; % Laserspitzenleistung/ pulse peak power [W]
alpha = 8.418 *10.^-5; % Temperaturleitfähikeit/ thermal diffusity [m^2/s]
T0 = 293.5; % starttemperatur / initial temperatur of the solid [K]
t= linspace(0,20*10.^-3,20);
r = linspace(-600*10.^-6,600*10.^-6,50);
z = linspace(-800*10.^-6,0,20);
[R,Z] = meshgrid(r,z);
q0 = (2*Q)/(pi*sigma.^2); % Spitzenleistung am Punkt r=0, z=0
q = q0*exp((-2*R.^2)/sigma.^2);
surf(R,Z,q);
T1 = T0+(Ab*q0*sigma.^2)/(8*k);
matrixSize = size(Z);
output = zeros(matrixSize);
for i =1:matrixSize(1) for j =1:matrixSize(2)
funT = @(x)T1*besselj(0,x).*exp((sigma^2)*(x.^2/8)).*exp(-x*Z(i,j)).*erf((Z(i,j)/(2*sqrt(alpha))))-exp(x*Z(i,j)).*erf((Z(i,j)/(2*sqrt(alpha)))+(sqrt(alpha)*x));
output(i,j) = integral(funT, 0, 1);
end;
end;
Zur weiteren Erklärung: zur Vereinfachung habe ich den Parameter "Lambda" gegen "x" ausgetauscht.
Außerdem spanne ich die Parameter Z und R als Matrix auf, da ich am Ende gern einen Contour Plot über den radialen und axialen Temperaturverlauf erhalten möchte.
Das Problem liegt darin, dass die zweite Variable "R" nur in der Besselfunkion vorkommt, Matlab aber "besselj(0,x*R)" nicht annimmt.
Hallo Jan,
erstmal vielen Dank für deine schnelle Antwort.
Also wie du vielleicht in der gegebenen Gleichung T(r,z,t) gesehen hast, müssen die Faktoren "x*R" in die Besselfunktion 0. Ordnung. Das Problem ist das ich immer die Fehlermeldung "Error using .*
Matrix dimensions must agree." bekomme.
Ich bin mir allerdings nicht sicher woran es liegt. x ist meine Integrationsvariable, die sollte also nach meinem Verständnis skalar vorliegen. Oder täusche ich mich da?
Ohne das "R" kann ich die Berechnung allerdings nicht durchlaufen lassen, da mir sonst eine wichtige Koordinate in der Ebene fehlt.
Bitte poste immer die vollständige Fehlermeldung. Inbesondere die Zeile, die den Fehler erzeugt, ist wichtig und sollte nicht von den lesern erraten werden müssen.
Sowie Du "clear all" weggelassen hast, kannst Du den Debugger verwenden um heraus zu finden, welcher Operator genau den Fehler erzeugt:
Daqnn nochmal starten. Nun stopped Matlab, wenn der Fehler auftritt. Nun kannst Du die Zeile Stück für Stück ins Command Window laufen kopieren und die Dimensionen der einzelnen Teile untersuchen. Offensichtlich passen da mindestens zwei Dimensionen nicht zusammen.
Anmerkung: 8.418 *10.^-5 ist eine teure Potenz-Funktion, während 8.418E-5 eine sehr billige Konstante ist. Deshalb sollte man letzteres unbedingt bevorzugen.
Gruß, Jan
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.