2015-12-10 1 views
0

Le titre dit à peu près ce que j'essaie de faire. Je suis en train de résoudre l'équation elliptique 2D:Matlab: Faire un sfit un coefficient PDE

$$ - \ nabla \ point (x \ dot \ nabla u) = x * f $$

Là où je veux mettre dans un ensemble de x , y, z données et faire un ajustement f. Puis résolvez le pde. Voici ma fonction d'exercice avec la ligne F = ['x', ???]; étant la plus pertinente.

function ExerciseFun 

    RMax = 20; 
    RL = 1; 
    RU = 0.5; 
    HN = 5; 
    HL = 2; 
    HTT = 3; 
    HU = 1.5; 
    VL = -150; 

    p = [RL,0;RL,HN;0,HN+HL;0,HN+HL+HTT;RU,HN+HL+HTT+HU;RMax,HN+HL+HTT+HU;RMax,0]; 

    t = [1;1;0;1;1;0;0]; 
    v = [VL;VL;0;0;0;0;0]; 

    bc = { {'u', VL}; 
     {'u', VL}; 
     {'g', 0, 'q', 1}; 
     {'u', 0}; 
     {'u', 0}; 
     {'g', 0, 'q', 1}; 
     {'g', 0, 'q', 1} }; 

    model = Initialize_LaPlace2D(p, bc); 

    X = [1, 2, 4]; 
    Y = [2, 5]; 

    [x, y] = meshgrid(X,Y); 
    sc = zeros(size(x)); 

    Run_LaPlace2D(model, x,y,sc); 

end 

function Run_LaPlace2D(model, x,y,sc) 

f = generateApproximate(x,y,sc); 

c = 'x'; 
a = 0; 
F = ['x', ???]; 

u = assempde(model , c , a , f); 
pdeplot(model,'xydata',u) 
end 


function fitresult = generateApproximate(X,Y,Z) 
    [xData, yData, zData] = prepareSurfaceData(X, Y, Z); 

    % Set up fittype and options. 
    ft = 'thinplateinterp'; 

    % Fit model to data. 
    [fitresult, ~] = fit([xData, yData], zData, ft, 'Normalize', 'on'); 
end 

function model = Initialize_LaPlace2D(p, bc) 
model = createpde; 

gd = [2; size(p,1); p(:,1) ; p(:,2)]; 
ns = char('domain')'; 
sf = 'domain'; 

g = decsg(gd,sf,ns); 
geometryFromEdges(model,g); 

generateMesh(model, 'Hmax', 0.05, 'MesherVersion','R2013a'); 

for i = 1:size(bc,1) 
    applyBoundaryCondition(model, 'Edge', i, bc{i}{:}); 
end 

end 

Répondre

0

Je mis f dans sa propre fonction et ont appelé 'myFunction(x,y)'.