关于 matlab-solve-pde
面向 MATLAB 用户的 PDE Toolbox 工作流技能,指导使用现代 femodel 流程完成几何建模、有限元分析求解和结果后处理。
主要功能
- 01创建与编辑 2D、3D 几何
- 02设置材料、边界条件与载荷
- 03生成网格并求解 PDE
- 04插值、计算与可视化结果
适用场景
- 01构建热、结构或电磁模型
- 02导入 STL 或 STEP 几何
- 03配置模型并检查求解结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-solve-pde安装后在 Claude Code 中输入/matlab-solve-pde确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
manifest.yamlreferences/bc-load-reference.mdboolean-and-cell-ops.mddamping-reference.mddecsg-and-2d-geometry.mdelectromagnetic-setup.mdem-postprocessing.mdmodal-and-reduced-order.mdnonconstant-parameters.mdprimitives-and-import.mdtime-dependent-loads.mdvisualization-reference.md详细介绍
PDE Toolbox — 完整 FEA 工作流
端到端有限元分析:几何体 → 模型设置 → 求解 → 后处理。使用现代的 femodel 工作流(R2025a+)。
适用场景
- 使用基本体(
multicuboid、multicylinder、multisphere)创建几何体、导入 STL/STEP,或使用 2-Ddecsg - 设置带边界条件、载荷、材料和初始条件的
femodel - 求解热学、结构或电磁问题(稳态、瞬态、模态、频率、传导)
- 对有限元结果进行后处理:插值、计算派生量、可视化
不适用场景
- 通用方程 PDE(
createpde(N))——此处不涉及该旧版工作流 - 系统级仿真(Simulink/Simscape)——请使用产品专用技能
- 仅网格任务,不涉及 PDE 求解(例如用于可视化的表面网格划分)
工作流概览
- 几何体 — 使用基本体、
decsg、文件导入或布尔运算创建 → 封装为fegeometry - 模型 —
femodel(AnalysisType=..., Geometry=gm)→ 材料、边界条件、载荷、初始条件 - 网格 —
generateMesh(model)(先使用默认设置,如有需要再细化) - 求解 —
result = solve(model)或solve(model, tlist) - 后处理 — 提取场、插值、计算派生量、可视化
阶段 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、vertexBC | faceLoad、edgeLoad、cellLoad、vertexLoad |
Temperature、Constraint、XDisplacement | Heat、ConvectionCoefficient+AmbientTemperature |
Voltage、MagneticPotential | Pressure、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 → magnetostatic | cellLoad(CurrentDensity=conductionResults) | 必须重新生成网格:magnetostatic 使用 Nedelec(一阶)单元;dcConduction 默认使用二次单元 |
| electrostatic → electricHarmonic | 更改 AnalysisType,添加频率 | 添加 VacuumPermeability(谐波分析需要两个常数) |
| magnetostatic → magneticHarmonic | 更改 AnalysisType,添加频率 | 如果网格已为线性,则无 |
| thermalSteady → structuralStatic | cellLoad(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 |
| 谐波 EM | R = 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:后处理
结果对象
| 分析 | 关键属性 | 关键方法 |
|---|---|---|
thermalSteady | Temperature | evaluateHeatFlux、evaluateHeatRate、interpolateTemperature |
thermalTransient | Temperature (N×T)、SolutionTimes | 同上 + filterByIndex |
structuralStatic | Displacement、VonMisesStress、Stress、Strain | evaluatePrincipalStress、evaluateReaction、interpolateDisplacement |
structuralTransient | Displacement (N×T)、SolutionTimes | evaluateVonMisesStress、evaluateStress、filterByIndex |
structuralFrequency | Displacement (N×F)、SolutionFrequencies | evaluateVonMisesStress、evaluateStress(不支持 filterByIndex) |
structuralModal | NaturalFrequencies、ModeShapes | 传入 solve(..., ModalResults=R) |
electrostatic | ElectricPotential、ElectricField | interpolateElectricPotential、interpolateElectricField、interpolateElectricFlux |
magnetostatic | MagneticFluxDensity、MagneticField | interpolateMagneticFlux、interpolateMagneticField |
conduction | ElectricPotential、CurrentDensity | interpolateCurrentDensity |
关键规则
Stress.Magnitude为空 —— 使用result.VonMisesStress(静态)或evaluateVonMisesStress(result)(瞬态)evaluateHeatFlux需要 3 个输出:[qx, qy, qz] = evaluateHeatFlux(result)- 瞬态应力/应变是方法,而非属性:
evaluateVonMisesStress(result)、evaluateStress(result) - 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 / unite | subtract(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 |
静电分析未设置 VacuumPermittivity | model.VacuumPermittivity = 8.854187817e-12 |
result.Stress.Magnitude | result.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.x | result.CurrentDensity.Jx — 使用特定于物理场的名称 |
辐射分析(Emissivity)中使用摄氏温度 | 所有温度均使用开尔文 + model.StefanBoltzmannConstant |
温度载荷未设置 ReferenceTemperature | model.ReferenceTemperature = 20 |
谐波分析中使用 solve(model, Frequency=1e6) | solve(model, 1e6) — 使用位置参数,而非名称-值参数 |
对热学/结构/电磁分析使用 createpde | 使用 femodel — createpde 仅用于基于方程的 PDE |