まず、これは宿題です(stackoverflowに関する私の最初の宿題の質問です!)。しかし、私はあなたにそれを解決してほしくありません、私はただいくつかのガイダンスが欲しいです!
問題の方程式は次のとおりです。
N = 50、phi1 = 300、phi2 = 400、0 <= x <= 1、0 <= y <= 1とし、xとyを次のような100個の等間隔の点のベクトルにするように指示されています。エンドポイント。
したがって、私が最初に行ったのは、これらの変数を設定し、x = linspace(0,1)およびy = linspace(0,1)を使用して正しいベクトルを作成することでした。
問題は、phi(x、y)を計算し、組み込み関数contourfを使用してxとyに対して塗りつぶされた等高線図を作成するpotential.mというMATLABスクリプトファイルを作成することです(例については、MATLABのヘルプコマンドを参照してください)。図に適切なラベルが付いていることを確認してください。(ヒント:ドメインの上部と下部は、左側と右側が300度であるのに対し、約400度で高温になっている必要があります)。
ただし、以前は、xまたはyのいずれかを定数として使用してphiを計算しました。両方が変数である場合、どのように計算する必要がありますか?yのベクトル内のすべての数値を実行し、それを行列に割り当て、yのすべての値を何度も実行した後、そのベクトル内の次の数値にxをインクリメントしながら、xを安定させますか?そして、同じプロセスを実行しますが、代わりにyをゆっくりとインクリメントしますか?
もしそうなら、私は100個の値すべてをループするたびに次の行にインクリメントするループを使用しています。そのようにすると、200行100列の巨大な行列になってしまいます。linspace関数でそれをどのように使用しますか?
それが正しければ、これが私のマトリックスを見つける方法です:
clear
clc
format compact
x = linspace(0,1);
y = linspace(0,1);
N = 50;
phi1 = 300;
phi2 = 400;
phi = 0;
sum = 0;
for j = 1:100
for i = 1:100
for n = 1:N
sum = sum + ((2/(n*pi))*(((phi2-phi1)*(cos(n*pi)-1))/((exp(n*pi))-(exp(-n*pi))))*((1-(exp(-n*pi)))*(exp(n*pi*y(i)))+((exp(n*pi))-1)*(exp(-n*pi*y(i))))*sin(n*pi*x(j)));
end
phi(j,i) = phi1 - sum;
end
end
for j = 1:100
for i = 1:100
for n = 1:N
sum = sum + ((2/(n*pi))*(((phi2-phi1)*(cos(n*pi)-1))/((exp(n*pi))-(exp(-n*pi))))*((1-(exp(-n*pi)))*(exp(n*pi*y(j)))+((exp(n*pi))-1)*(exp(-n*pi*y(j))))*sin(n*pi*x(i)));
end
phi(j+100,i) = phi1 - sum;
end
end
これがcontourfの定義です。私はcontourf(X、Y、Z)を使用する必要があると思います:
等高線(X、Y、Z)、等高線(X、Y、Z、n)、および等高線(X、Y、Z、v)は、X軸とY軸を使用してZの塗りつぶされた等高線図を描画し、x軸とy軸を決定します。制限。XとYが行列の場合、それらはZと同じサイズであり、単調に増加している必要があります。
新しいコードは次のとおりです。
N = 50;
phi1 = 300;
phi2 = 400;
[x, y, n] = meshgrid(linspace(0,1),linspace(0,1),1:N)
f = phi1-((2./(n.*pi)).*(((phi2-phi1).*(cos(n.*pi)-1))./((exp(n.*pi))-(exp(-n.*pi)))).*((1-(exp(-1.*n.*pi))).*(exp(n.*pi.*y))+((exp(n.*pi))-1).*(exp(-1.*n.*pi.*y))).*sin(n.*pi.*x));
g = sum(f,3);
[x1,y1] = meshgrid(linspace(0,1),linspace(0,1));
contourf(x1,y1,g)