0

(編集、コードを変更しました)まあ、matlabで解いて結果を見つける必要がある複合方程式があります。さまざまなテクニックを試しましたが、失敗しました。方程式は次のとおりです。

u(j-1)-2(u(j))+u(j+1)= -4*h^2*pi^2 * sin(2*pi*xj)

どこ

n=100

j=1~n

xj=jh

h=1/n

u(0)==u(n)==0

方程式を解いて結果をプロットする必要があります。結果を正確な解と比較できるようにします。これは私がこれまでに書いたコードです...

function c= prob1()
n=100;

c=(0);   % variable to store all results
u = linspace(1,n-1);
    for k=3:90
    jay=k;
    h=1/k;
    syms xj  
    eqn6 = u(jay-1) -2*u(jay)+u(jay+1)==-4*(h^2)*(pi^2)*sin(2*pi*xj);
    A = solve(eqn6, xj); % solving the equation with xj as unknown
      if(~(A==0))
      c=vertcat(c,A);  % just filtering out the results with 0 output
      end
    end
end

今、私は " (625*asin(1/9877545463176224))/3927 " のような A で答えを取得します。私はプロットできません。

4

1 に答える 1

1

連立方程式の設定Au = bは、次のように数学を MATLAB 言語に変換することによって行われます。

n = 100;
h = 1/n;

j = 0:n; % include zero for the boundary condition
xj = j*h;

% set up right hand side
b = (-4*h^2*pi^2*sin(2*pi*xj))';
% overwrite the first and last value of b with the right hand side of the boundary conditions:
b([1 end]) = 0;

% This is the interesting part:
% set up A: 1*u(j-1) -2*u(j) + 1*u(j+1) and include the boundary conditions
main = [1; -2*ones(n-1,1); 1];
upper = [0; ones(n-1,1)];
lower = [ones(n-1,1); 0];
A = gallery('tridiag', lower, main, upper);

Aこれが機能する理由がわからない場合は、とに基づいて少なくとも j = 0、n/2、および n の方程式を書き、bそれらをあなたの方程式と比較することをお勧めします。

これで、システムを解決する準備が整いました。システムは小さいので、バックスラッシュ演算子 (直接的な方法) を使用しますがbicgstab、 , gmres, のような反復方法を選択することもできqmrます。

u = A\b;

結果をプロットしuます。

plot(xj,u)
于 2014-10-11T10:12:52.577 に答える