(已编辑,我已经更改了代码)我有复合方程式,我需要在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
现在我在A中获得答案“(625 * asin(1/9877545463176224))/ 3927”。 这是我无法绘制的。
答案 0 :(得分: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
和b
写出至少j = 0,n / 2和n的等式,并将它们与你的方程式。
现在,我们已准备好解决该系统问题。系统很小所以我使用反斜杠操作符(这是一种直接方法),但您也可以选择迭代方法,如bicgstab
,gmres
,qmr
:
u = A\b;
绘制结果u
:
plot(xj,u)