mcpField
M
matlab-solve-pde

matlab-solve-pde

github.com/matlabその他1.2k54 回インストール1 日前に更新
リポジトリ

matlab-solve-pde について

PDE Toolboxで有限要素解析を行うMATLABユーザー向けのワークフロースキルです。最新の `femodel` を使い、ジオメトリ作成から解析、結果の後処理までを扱います。

主な機能

  1. 012D・3Dジオメトリの作成と編集
  2. 02材料、境界条件、荷重の設定
  3. 03メッシュ生成とPDEの求解
  4. 04結果の補間、計算、可視化

活用シーン

  1. 01熱、構造、電磁気モデルの構築
  2. 02STLまたは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 — 有限要素解析の全ワークフロー

有限要素解析を最初から最後まで実行します:ジオメトリ → モデル設定 → 求解 → 後処理。最新の 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 ワークフロー専用です。 createpde(N) で fegeometry を使用しないでください。レガシーワークフローでは、代わりに 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 を呼び出すのは 1 回だけです。

詳しい方針(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; ...]

すべての列の行数を揃える必要があります。短い列には 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 の 4 引数形式: 2 つの引数はいずれも、方向と原点ではなく、回転軸を定義する点です。たとえば、原点を通る y 軸を中心に回転する場合は、rotate(gm, 90, [0 0 0], [0 1 0]) を使用します。3 引数形式では 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 には線形メッシュ(ネデレック要素)が必要です。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"AC 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 つすべてに 3 要素ベクトルを指定します。ShearModulus にスカラー形式はありません。

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

注: 構造解析は線形弾性のみです。塑性モデルや超弾性モデルには対応していません。

構造減衰

形式は 3 つあります。ヒステリシス減衰(materialProperties の HystereticDamping=η、周波数応答のみ)、レイリー減衰(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 を含む状態で関数を評価します。state フィールドが 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 を参照してください。

境界条件と荷重

規則: 規定値(ディリクレ条件)→ 境界条件。それ以外 → 荷重。

境界の次元規則:

  • 3-D: 境界 = 面、辺、頂点(領域 = セル);体積荷重 = cellLoad
  • 2-D: 境界 = 辺、頂点(領域 = 面);体積荷重 = faceLoad
境界条件(ディリクレ)荷重(ノイマン/ロビン)
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 を変更してください。2 つ目の 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 → electricHarmonicAnalysisType を変更し、周波数を追加VacuumPermeability を追加します(調和解析では両方の定数が必要です)
magnetostatic → magneticHarmonicAnalysisType を変更し、周波数を追加メッシュがすでに線形なら不要です
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) として表します。2 段階で解きます。まず定数 μr で線形解析を行い、その結果を cellIC(MagneticVectorPotential=Rlin) で初期推定値として使用します。

CurrentDensity の形式(2-D ではスカラー、3-D ではベクトル)、非線形 B-H ワークフロー、調和電磁界解析、遠方界境界条件については、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
調和電磁界解析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:後処理

結果オブジェクト
解析主なプロパティ主なメソッド
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、ModeShapessolve(..., ModalResults=R) に渡します
electrostaticElectricPotential、ElectricFieldinterpolateElectricPotential、interpolateElectricField、interpolateElectricFlux
magnetostaticMagneticFluxDensity、MagneticFieldinterpolateMagneticFlux、interpolateMagneticField
conductionElectricPotential、CurrentDensityinterpolateCurrentDensity
重要なルール
  1. Stress.Magnitude は EMPTY です — 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 行列です(各列が 1 つの点です):

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 を受け取りません — すべての時刻の値を返します。中間時刻には、SolutionTimes に対して interp1 を使用します。

filterByIndex — 時間ステップの抽出

過渡解析の可視化には必須です(pdeplot3D では N×T ではなく N×1 が必要です):

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);

pdeplot(2-D)、pdeviz、FlowData、断面、流線については、references/visualization-reference.md を参照してください。 EM の後処理(Maxwell 応力テンソル、エネルギー法、すべての補間メソッド)については、references/em-postprocessing.md を参照してください。

よくある間違い

間違い正しい記述
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 引数では、軸線を定義する 2 つの点を指定します: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.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 が自動的に設定されます
静解析の後、モーダル解析用に 2 つ目の femodel() を作成同じモデルで model.AnalysisType = "structuralModal" を設定
周波数応答に減衰がないHystereticDamping=0.05 またはレイリー減衰/モーダル減衰を指定
飽和する鉄に RelativePermeability=500 を指定@(~,s) muRfcn(s.NormFluxDensity) — 非線形
非線形磁静解析で初期推定値がない線形解析の結果から cellIC(MagneticVectorPotential=Rlin) を設定
result.CurrentDensity.xresult.CurrentDensity.Jx — 領域固有の名前
放射(Emissivity)に摂氏温度を使用すべての温度をケルビンで指定し、model.StefanBoltzmannConstant を設定
ReferenceTemperature なしで温度荷重を指定model.ReferenceTemperature = 20
調和解析で solve(model, Frequency=1e6) を使用solve(model, 1e6) — 名前と値のペアではなく、位置引数を使用
熱/構造/電磁解析で createpde を使用femodel を使用します — createpde は方程式ベースの PDE 専用です

Copyright 2026 The MathWorks, Inc.

コメント