mcpField
M
matlab-solve-pde

matlab-solve-pde

github.com/matlab其他1.2k54 次安装1 天前更新
代码仓库

关于 matlab-solve-pde

面向 MATLAB 用户的 PDE Toolbox 工作流技能,指导使用现代 femodel 流程完成几何建模、有限元分析求解和结果后处理。

主要功能

  1. 01创建与编辑 2D、3D 几何
  2. 02设置材料、边界条件与载荷
  3. 03生成网格并求解 PDE
  4. 04插值、计算与可视化结果

适用场景

  1. 01构建热、结构或电磁模型
  2. 02导入 STL 或 STEP 几何
  3. 03配置模型并检查求解结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-solve-pde

安装后在 Claude Code 中输入/matlab-solve-pde确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

manifest.yaml
references/
bc-load-reference.md
boolean-and-cell-ops.md
damping-reference.md
decsg-and-2d-geometry.md
electromagnetic-setup.md
em-postprocessing.md
modal-and-reduced-order.md
nonconstant-parameters.md
primitives-and-import.md
time-dependent-loads.md
visualization-reference.md

详细介绍

PDE Toolbox — 完整 FEA 工作流

端到端有限元分析:几何体 → 模型设置 → 求解 → 后处理。使用现代的 femodel 工作流(R2025a+)。

适用场景

  • 使用基本体(multicuboid、multicylinder、multisphere)创建几何体、导入 STL/STEP,或使用 2-D decsg
  • 设置带边界条件、载荷、材料和初始条件的 femodel
  • 求解热学、结构或电磁问题(稳态、瞬态、模态、频率、传导)
  • 对有限元结果进行后处理:插值、计算派生量、可视化

不适用场景

  • 通用方程 PDE(createpde(N))——此处不涉及该旧版工作流
  • 系统级仿真(Simulink/Simscape)——请使用产品专用技能
  • 仅网格任务,不涉及 PDE 求解(例如用于可视化的表面网格划分)

工作流概览

  1. 几何体 — 使用基本体、decsg、文件导入或布尔运算创建 → 封装为 fegeometry
  2. 模型 — femodel(AnalysisType=..., Geometry=gm) → 材料、边界条件、载荷、初始条件
  3. 网格 — generateMesh(model)(先使用默认设置,如有需要再细化)
  4. 求解 — result = solve(model) 或 solve(model, tlist)
  5. 后处理 — 提取场、插值、计算派生量、可视化

阶段 1:几何体

fegeometry — 核心对象
gm = fegeometry(multicuboid(1, 1, 1));       % From primitives
gm = fegeometry("model.stl");                % From STL/STEP file
gm = fegeometry(decsg(gd, sf, ns));          % From 2-D CSG
gm = fegeometry(nodes, elements);            % From mesh data

fegeometry 仅用于 femodel 工作流。 请勿将 fegeometry 与 createpde(N) 搭配使用——该旧版工作流改用 geometryFromEdges(2-D)或 importGeometry(3-D)。本技能仅涵盖 femodel。

关键属性:NumCells、NumFaces、NumEdges、Vertices

3-D 基本体
函数原点参数
multicuboid(W, D, H)x-y 居中,底面位于 z=0宽度、深度、高度
multicylinder(R, H)x-y 居中,底面位于 z=0半径、高度
multisphere(R)以原点为中心半径

嵌套单元格(向量)、堆叠层(ZOffset)、中空(Void=[true,false]):

gm = fegeometry(multicylinder([0.3, 0.5], 1, Void=[true, false]));  % hollow pipe
gm = fegeometry(multicuboid([1, 1], [1, 1], [0.3, 0.7], ZOffset=[0, 0.3]));  % stacked

完整选项和文件导入详情,请参阅 references/primitives-and-import.md。

布尔运算
gmCombined = union(gm1, gm2);                         % Merge into 1 cell
gmCombined = union(gm1, gm2, KeepBoundaries=true);    % Preserve cells (multi-material)
gmCombined = union(gm1, gm2, KeepBoundaries=[true, false]);  % Selective per shape
gmResult = subtract(gm1, gm2);                        % Cut gm2 from gm1
gmResult = intersect(gm1, gm2);                       % Keep only overlapping region

KeepBoundaries:当不同形状使用不同材料时设为 true(保留内部面作为单元格边界)。省略此参数或设为 false,可合并为单个单元格。

布尔运算后的单元格修改:

gm = mergeCells(gm);              % Merge ALL cells into one
gm = mergeCells(gm, [2, 3]);      % Merge specific cells (must be connected)
gm = deleteCell(gm, cellIDs);     % Remove unwanted cells

**规则:**先并集,最后做差集。函数名为 subtract,而非 subtractgeom。切勿组合已预先挖空的部件。仅在最后调用一次 mergeCells。

完整策略(Sculpt+Carve、Void 标志、addCell、addVoid、面印记)请参阅 references/boolean-and-cell-ops.md。

使用 decsg 创建 2-D 几何体

几何矩阵中的每个形状都是一个列向量。第一个元素标识形状类型:

类型代码形状列格式
1圆[1; xc; yc; r; 0; ...]
2多边形[2; N; x1;...;xN; y1;...;yN]
3矩形[3; 4; x1;x2;x3;x4; y1;y2;y3;y4](逆时针角点)
4椭圆[4; xc; yc; a; b; angle; 0; ...]

所有列的行数必须相同——较短的列用零补齐。设置公式:+(并集)、-(差集)、*(交集)。

R1 = [3; 4; 0; 1; 1; 0; 0; 0; 0.5; 0.5];
C1 = [1; 0.5; 0.25; 0.15; 0; 0; 0; 0; 0; 0];
gd = [R1, C1]; sf = '(R1-C1)'; ns = char('R1', 'C1')';
gm = fegeometry(decsg(gd, sf, ns));

多边形顶点、极坐标形状、拉伸和命名空间规则,请参阅 references/decsg-and-2d-geometry.md。

实体识别
topFace = nearestFace(gm, [0, 0, 1]);       % Single point: row vector
faceIDs = nearestFace(gm, [0 0 1; 0 0 0]);  % Multiple points: N×3 matrix
frontEdge = nearestEdge(gm, [0.5, 0, 0.5]);
cellID = findCell(model.Geometry, [x, y, z]); % fegeometry only (not DiscreteGeometry)
facesOfCell = cellFaces(gm, 1);              % All faces of cell 1
facesOfCell = cellFaces(gm, 1, "external");  % Only outer boundary faces
edgesOfCell = cellEdges(gm, 1);
edgeIDs = faceEdges(gm, faceID);
fIDs = facesAttachedToEdges(gm, edgeID);              % Faces sharing an edge
fIDs = facesAttachedToEdges(gm, edgeID, "internal");  % Only internal faces (3-D)

**请在生成网格前识别面和边。**不存在 nearestVertex——请使用 gm.Vertices 并计算距离。

变换
gm = translate(gm, [dx, dy, dz]);
gm = rotate(gm, angle);                          % angle° about z through origin
gm = rotate(gm, angle, [cx cy cz]);              % about z through point [cx,cy,cz]
gm = rotate(gm, angle, [x1 y1 z1], [x2 y2 z2]); % about LINE from pt1 to pt2
gm = scale(gm, [1, 1, -1]);                      % reflect across z=0 (use -1 on axis to flip)

rotate 四参数形式:两个参数都是定义轴线的点,而非方向和原点。例如,绕经过原点的 y 轴旋转:rotate(gm, 90, [0 0 0], [0 1 0])。三参数形式仅绕 z 轴旋转。

拉伸
gm3d = extrude(gm2d, [0.1, 0.3, 0.1]);   % 2-D → 3-D stacked layers along z
gm = extrude(gm, faceID, 0.2);            % 3-D face extrusion along outward normal
网格生成

仅在需要时才划分网格。 逐步升级:默认 → 全局 → 局部。

gm = generateMesh(gm);                            % Default (try first)
gm = generateMesh(gm, Hmax=0.1, Hmin=0.01);      % Global control
gm = generateMesh(gm, HFace={[3,5], 0.02});       % Local face refinement (cell array!)
gm = generateMesh(gm, HEdge={edgeIDs, 0.005}, Hmax=0.2, Hgrad=1.5);
gm = generateMesh(gm, HVertex={vtxID, 0.005}, Hgrad=1.5);  % Stress concentrations

GeometricOrder:默认值为 "quadratic"。使用 "linear" 可加快求解。重要提示: 3-D magnetostatic/magneticHarmonic/electricHarmonic 需要线性网格(Nedelec 单元)——generateMesh 会自动处理。

网格属性: mesh.Nodes(3×N)、mesh.Elements(连接关系)、meshQuality(mesh)(0–1)、area(mesh)、volume(mesh)。

阶段 2:模型设置

单位: PDE Toolbox 不带单位。所有输入都是纯数值——用户必须确保尺寸、属性、载荷和常数使用自洽的单位制。不要假定使用 SI。

创建模型
model = femodel(AnalysisType="thermalSteady", Geometry=gm);
AnalysisType 参考
AnalysisType用途
"thermalSteady" / "thermalTransient" / "thermalModal"热传递
"structuralStatic" / "structuralTransient" / "structuralModal" / "structuralFrequency"应力/位移
"electrostatic" / "magnetostatic" / "dcConduction"静态 EM
"electricHarmonic" / "magneticHarmonic"交流 EM

模式为 <physics><Type>。绝不要使用 "transientStructural" 或 "steadyStateThermal"。

材料属性
model.MaterialProperties = materialProperties(Material="steel");           % Catalog (preferred)
model.MaterialProperties = materialProperties(YoungsModulus=70e9, PoissonsRatio=0.33);  % Explicit
model.MaterialProperties(cellID) = materialProperties(Material="copper");  % Per-cell

目录名称:"copper"、"Invar"、"steel"、"aluminum"、"brass"、"tungsten"、"iron"、"gold"、"silver"、"lead"、"zinc"、"glass"、"concrete"、"wood"。

正交各向异性(结构):三项均使用 3 元素向量——ShearModulus 没有标量形式:

model.MaterialProperties = materialProperties(YoungsModulus=[Ex Ey Ez], ...
    PoissonsRatio=[nu_xy nu_yz nu_xz], ShearModulus=[Gxy Gyz Gxz], MassDensity=rho);

注意: 结构分析仅支持线弹性——不支持塑性或超弹性模型。

结构阻尼

有三种形式:滞后阻尼(在 materialProperties 上设置 HystereticDamping=η,仅用于频率响应)、Rayleigh 阻尼(model.DampingAlpha、model.DampingBeta,用于瞬态/频率分析)、模态阻尼(求解时通过 ModalResults 设置 DampingZeta=ζ)。

% Hysteretic — frequency response
model.MaterialProperties = materialProperties(..., HystereticDamping=0.05);
% Rayleigh — transient/frequency (C = alpha*M + beta*K)
model.DampingAlpha = 10; model.DampingBeta = 0.002;
% Modal — with modal superposition
R = solve(model, tlist, ModalResults=Rm, DampingZeta=0.02);

频率相关阻尼以及各形式的适用场景,请参阅 references/damping-reference.md。

非恒定(函数)参数

任何材料属性、边界条件或载荷都可以是函数句柄。签名:边界条件/载荷/材料使用 @(location, state),初始条件仅使用 @(location)。

location:.x、.y、.z(始终可用),.nx、.ny、.nz(仅边界)。 state:.time、.frequency、.u、.ux/.uy/.uz、.NormFluxDensity(取决于分析类型)。

NaN 约定(至关重要): 求解器会使用 state 字段中的 NaN 进行探测。字段为 NaN 时,函数必须返回大小正确的 NaN。纯算术运算会自动传播 NaN;只有条件逻辑需要显式检查:

pressure = @(location, state) ...
    ifelse(isnan(state.time), NaN(1,numel(location.x)), ...
    1e5*sin(2*pi*100*state.time)*ones(1,numel(location.x)));

向量化: 标量输出为 1×Np 行向量,向量输出为 3×Np 矩阵。state 字段和输出大小规则请参阅 references/nonconstant-parameters.md。条件语句中完整的 NaN 模式请参阅 references/time-dependent-loads.md。

边界条件与载荷

规则: 指定值(Dirichlet)→ 边界条件。其他所有情况 → 载荷。

边界维度规则:

  • 3-D: 边界 = 面、边、顶点(区域 = 单元);体载荷 = cellLoad
  • 2-D: 边界 = 边、顶点(区域 = 面);体载荷 = faceLoad
BC(Dirichlet)载荷(Neumann/Robin)
faceBC、edgeBC、vertexBCfaceLoad、edgeLoad、cellLoad、vertexLoad
Temperature、Constraint、XDisplacementHeat、ConvectionCoefficient+AmbientTemperature
Voltage、MagneticPotentialPressure、SurfaceTraction、Force
model.FaceBC(topFace) = faceBC(Temperature=100);          % 3-D thermal
model.EdgeBC(edgeID) = edgeBC(Temperature=100);            % 2-D thermal
model.VertexBC(vtxID) = vertexBC(Constraint="fixed");      % Structural pin
model.FaceLoad(sideFace) = faceLoad(ConvectionCoefficient=30, AmbientTemperature=25);
model.VertexLoad(tipVtx) = vertexLoad(Force=[0; -1000; 0]);  % Full vector, no YForce
model.CellLoad(1) = cellLoad(Heat=1e6);                    % Body load (3-D)
model.CellLoad(1) = cellLoad(Gravity=[0; 0; -9.81]);       % Self-weight (structural 3-D)
model.CellLoad(1) = cellLoad(Temperature=thermalResults);  % Thermal stress coupling (3-D)
model.FaceLoad(1) = faceLoad(Gravity=[0; -9.81]);          % Body loads in 2-D use faceLoad

vertexBC 仅用于结构分析:Constraint="fixed"、XDisplacement、YDisplacement、ZDisplacement。

常见错误: 在 faceBC 上设置对流 → 报错(它属于载荷)。在 2-D 中使用 faceBC → 报错(请使用 edgeBC)。在 2-D 中使用 cellLoad → 报错(请使用 faceLoad)。

完整属性表请参阅 references/bc-load-reference.md。

辐射

在 faceLoad/edgeLoad 上使用 Emissivity 时:设置 model.StefanBoltzmannConstant = 5.670374419e-8,并确保所有温度均以开尔文为单位。

热应力

只有设置了 ReferenceTemperature,温度载荷才会产生应变:

model.ReferenceTemperature = 20;  % Strain = CTE × (T - Tref)
初始条件

所有瞬态分析都必须设置。 结构瞬态分析需要同时设置位移和速度。

model.CellIC = cellIC(Temperature=25);                                    % Thermal 3-D
model.FaceIC = faceIC(Temperature=25);                                    % Thermal 2-D
model.CellIC = cellIC(Displacement=[0;0;0], Velocity=[0;0;0]);           % Structural 3-D
model.FaceIC = faceIC(Displacement=[0;0], Velocity=[0;0]);               % Structural 2-D
model.CellIC = cellIC(MagneticVectorPotential=Rlin);                     % Nonlinear mag 3-D
PlanarType(2-D)

构造完成后设置:model.PlanarType = "planeStress";(或 "planeStrain"、"axisymmetric")

模型复用——始终复用

当任务要求对同一几何进行多种分析时,请更改现有模型的 AnalysisType——绝不要创建第二个 femodel:

model = femodel(AnalysisType="structuralStatic", Geometry=gm);
model.MaterialProperties = materialProperties(Material="brass");
model.FaceBC(bottomFace) = faceBC(Constraint="fixed");
model = generateMesh(model);
staticResult = solve(model);
model.AnalysisType = "structuralModal";  % Reuse — geometry, material, mesh carry over
modalResult = solve(model, FrequencyRange=[-Inf, 5000]);
model.AnalysisType = "structuralTransient";  % Modal transient
transientResult = solve(model, tlist, ModalResults=modalResult, DampingZeta=0.02);

多物理场耦合序列:

序列模式注意事项
静态 → 模态 → 瞬态更改 AnalysisType,复用网格无
dcConduction → magnetostaticcellLoad(CurrentDensity=conductionResults)必须重新生成网格:magnetostatic 使用 Nedelec(一阶)单元;dcConduction 默认使用二次单元
electrostatic → electricHarmonic更改 AnalysisType,添加频率添加 VacuumPermeability(谐波分析需要两个常数)
magnetostatic → magneticHarmonic更改 AnalysisType,添加频率如果网格已为线性,则无
thermalSteady → structuralStaticcellLoad(Temperature=thermalResults)在结构模型上设置 ReferenceTemperature

网格重新生成规则: 切换到 magnetostatic、magneticHarmonic 或 electricHarmonic(Nedelec 单元)时,网格必须为线性。如果先前的分析使用了二次单元(默认设置),请再次调用 generateMesh(model)——求解器会为这些类型自动选择线性阶次。

电磁设置

EM 类型需要真空常数:

model.VacuumPermittivity = 8.854187817e-12;   % Required for electrostatic, harmonic
model.VacuumPermeability = 4*pi*1e-7;         % Required for magnetostatic, harmonic

非线性磁导率(magnetostatic):将 μr 表示为 @(~,s) muRfcn(s.NormFluxDensity)。分两步进行:先使用常数 μr 求解线性问题,然后通过 cellIC(MagneticVectorPotential=Rlin) 将结果用作初始猜测。

有关 CurrentDensity 格式(2-D 中为标量,3-D 中为向量)、非线性 B-H 工作流、谐波 EM 和远场边界条件,请参阅 references/electromagnetic-setup.md。

阶段 3:求解

分析类型语法说明
稳态/静态R = solve(model)thermalSteady、structuralStatic、electrostatic、magnetostatic、dcConduction
瞬态R = solve(model, tlist)tlist = 单调递增的向量(秒)
模态(结构)R = solve(model, FrequencyRange=[ω1, ω2])边界值以 rad/s 为单位。下界使用 -Inf
模态(热)R = solve(model, DecayRange=[-Inf, λmax])衰减率以 s⁻¹ 为单位。下界使用 -Inf
频率响应R = solve(model, flist)flist 以 rad/s 为单位(Hz 乘以 2π)
模态叠加R = solve(model, tlist, ModalResults=Rm)通过先前的模态求解进行瞬态或频率分析
POD(热)R = solve(model, tlist, Snapshots=Tmatrix)Tmatrix = 粗略求解得到的 Temperature
谐波 EMR = solve(model, omega)omega 以 rad/s 为单位

单位约定(至关重要): FrequencyRange、flist 和 omega 的单位均为 rad/s,不是 Hz。换算:omega = 2*pi*freqHz。

R = solve(model);                                          % Steady/static
R = solve(model, linspace(0, 2, 100));                     % Transient
R = solve(model, FrequencyRange=[-Inf, 2*pi*500]);         % Modal
R = solve(model, 2*pi*linspace(10, 1000, 200));            % Frequency response
Rm = solve(model, FrequencyRange=[-Inf, 2*pi*500]);        % Modal superposition...
R = solve(model, tlist, ModalResults=Rm, DampingZeta=0.02);
coarseR = solve(model, linspace(0, 40, 10));               % POD thermal...
R = solve(model, linspace(0, 40, 200), Snapshots=coarseR.Temperature);

SolverOptions: model.SolverOptions.RelativeTolerance、model.SolverOptions.AbsoluteTolerance。

增量范围策略(模态/衰减): 切勿猜测较大的上限。从较小值开始,检查模态数量,仅在需要时扩大。DecayRange 也遵循相同策略。完整详情及模态瞬态工作流,请参阅 references/modal-and-reduced-order.md。

阶段 4:后处理

结果对象
分析关键属性关键方法
thermalSteadyTemperatureevaluateHeatFlux、evaluateHeatRate、interpolateTemperature
thermalTransientTemperature (N×T)、SolutionTimes同上 + filterByIndex
structuralStaticDisplacement、VonMisesStress、Stress、StrainevaluatePrincipalStress、evaluateReaction、interpolateDisplacement
structuralTransientDisplacement (N×T)、SolutionTimesevaluateVonMisesStress、evaluateStress、filterByIndex
structuralFrequencyDisplacement (N×F)、SolutionFrequenciesevaluateVonMisesStress、evaluateStress(不支持 filterByIndex)
structuralModalNaturalFrequencies、ModeShapes传入 solve(..., ModalResults=R)
electrostaticElectricPotential、ElectricFieldinterpolateElectricPotential、interpolateElectricField、interpolateElectricFlux
magnetostaticMagneticFluxDensity、MagneticFieldinterpolateMagneticFlux、interpolateMagneticField
conductionElectricPotential、CurrentDensityinterpolateCurrentDensity
关键规则
  1. Stress.Magnitude 为空 —— 使用 result.VonMisesStress(静态)或 evaluateVonMisesStress(result)(瞬态)
  2. evaluateHeatFlux 需要 3 个输出: [qx, qy, qz] = evaluateHeatFlux(result)
  3. 瞬态应力/应变是方法,而非属性: evaluateVonMisesStress(result)、evaluateStress(result)
  4. FEStruct 字段名称——始终使用特定于领域的名称:
分析字段切勿使用
位移.ux、.uy、.uz.x、.y、.z
应力.sxx、.syy、.szz、.syz、.sxz、.sxy.xx、.yy
应变.exx、.eyy、.ezz、.eyz、.exz、.exy.xx、.yy
电场.Ex、.Ey、.Ez.x、.y、.z
磁通密度.Bx、.By、.Bz.x、.y、.z
电流密度.Jx、.Jy、.Jz.x、.y、.z
插值

查询点是 3×N 矩阵(每列代表一个点):

Tq = interpolateTemperature(result, queryPts);        % Steady: no iT needed
Tq = interpolateTemperature(result, queryPts, iT);    % Transient: iT REQUIRED
d = interpolateDisplacement(result, queryPts);        % Returns all times (no iT accepted)

iT 的差异:interpolateTemperature(瞬态)需要时间索引 iT。interpolateDisplacement 不接受 iT——返回所有时间点的结果。对于中间时间,使用 interp1 对 SolutionTimes 进行插值。

filterByIndex — 提取时间步

瞬态可视化需要此方法(pdeplot3D 需要 N×1,而非 N×T):

resultF = filterByIndex(result, numel(result.SolutionTimes));
vm = evaluateVonMisesStress(resultF);
pdeplot3D(resultF.Mesh, ColorMapData=vm, Deformation=resultF.Displacement, DeformationScaleFactor=100);

FrequencyStructuralResults 不支持此方法——直接索引各列:

iFreq = 10;
vm = evaluateVonMisesStress(result);  % N×F
pdeplot3D(result.Mesh, ColorMapData=vm(:,iFreq), ...
    Deformation=struct("ux", result.Displacement.ux(:,iFreq), ...
                       "uy", result.Displacement.uy(:,iFreq), ...
                       "uz", result.Displacement.uz(:,iFreq)), ...
    DeformationScaleFactor=500);
可视化
pdeplot3D(result.Mesh, ColorMapData=result.Temperature, Mesh="on");
colorbar; title("Temperature");
pdeplot3D(result.Mesh, ColorMapData=result.VonMisesStress, ...
    Deformation=result.Displacement, DeformationScaleFactor=100);
[qx, qy, qz] = evaluateHeatFlux(result);
pdeplot3D(result.Mesh, FlowData=[qx qy qz]);
% Partial mesh — hide regions (e.g., air in EM)
elemIDs = findElements(result.Mesh, "region", Cell=[1 3]);
pdeplot3D(result.Mesh.Nodes, result.Mesh.Elements(:,elemIDs), ColorMapData=data);

参见 references/visualization-reference.md,了解 pdeplot(2-D)、pdeviz、FlowData、横截面和流线。 参见 references/em-postprocessing.md,了解电磁后处理(Maxwell 应力张量、能量方法及所有插值方法)。

常见错误

错误正确写法
nearestFace(gm, [0; 0; 1])(列向量)nearestFace(gm, [0, 0, 1]) — 行向量
subtractgeom / unitesubtract(gm1, gm2) / union(gm1, gm2)
多材料情况下使用 union(gm1, gm2)union(gm1, gm2, KeepBoundaries=true)
HFace=[faceID, size]HFace={faceID, size} — 元胞数组
rotate(gm, 90, [0 1 0], center)(方向 + 点)4 个参数分别为定义轴线的两个点:rotate(gm, 90, [0 0 0], [0 1 0])
AnalysisType="transientStructural""structuralTransient" — 物理场名称在前
faceBC(ConvectionCoefficient=...)faceLoad(ConvectionCoefficient=..., AmbientTemperature=...)
vertexLoad(YForce=-1000)vertexLoad(Force=[0; -1000; 0]) — 使用完整向量
femodel(..., PlanarType="planeStress")在创建后设置:model.PlanarType = "planeStress"
条件载荷中未使用 isnan(t)添加 if isnan(t), F=NaN; return; end
静电分析未设置 VacuumPermittivitymodel.VacuumPermittivity = 8.854187817e-12
result.Stress.Magnituderesult.VonMisesStress 或 evaluateVonMisesStress(result)
hf = evaluateHeatFlux(result)(1 个输出)[qx, qy, qz] = evaluateHeatFlux(result)
瞬态分析中使用 interpolateTemperature(result, pts)添加 iT:interpolateTemperature(result, pts, iT)
interpolateDisplacement(result, pts, iT)不使用 iT:interpolateDisplacement(result, pts)
interpolateMagneticFluxDensity(...) / interpolateElectricFluxDensity(...) / interpolateCurrentFlux(...)interpolateMagneticFlux / interpolateElectricFlux / interpolateCurrentDensity
在瞬态分析中使用 pdeplot3D(Deformation=...)先使用 filterByIndex,再绘图
在频域分析中使用 filterByIndex(result, iFreq)直接索引列;为 Deformation 构建结构体
未设置 materialProperties(Material="steel")使用目录中的名称;会自动提供 E、ν、ρ、CTE
静态分析后再创建第二个 femodel() 进行模态分析在同一模型上设置 model.AnalysisType = "structuralModal"
频率响应中未设置阻尼使用 HystereticDamping=0.05 或 Rayleigh/模态阻尼
对饱和铁使用 RelativePermeability=500@(~,s) muRfcn(s.NormFluxDensity) — 非线性
非线性磁静力分析未提供初始猜测使用线性求解结果设置 cellIC(MagneticVectorPotential=Rlin)
result.CurrentDensity.xresult.CurrentDensity.Jx — 使用特定于物理场的名称
辐射分析(Emissivity)中使用摄氏温度所有温度均使用开尔文 + model.StefanBoltzmannConstant
温度载荷未设置 ReferenceTemperaturemodel.ReferenceTemperature = 20
谐波分析中使用 solve(model, Frequency=1e6)solve(model, 1e6) — 使用位置参数,而非名称-值参数
对热学/结构/电磁分析使用 createpde使用 femodel — createpde 仅用于基于方程的 PDE

Copyright 2026 The MathWorks, Inc.

评论

支持 Markdown