입력상수부족문제어떻게해결해야하나요?

8视图(30天)
혜지
혜지 2023年3月22日
编辑: lazymatlab2023年4月3日
아래코드로진행했을때입력상수문제라고나오는데어떤부분이잘못된건가요?
函数V = Poisson_FDM_Solver_2D (V,公元前,EPS,ρ,h)
% (F / m)介电常数的空间。
EPS_0 = 8.854 e-12;
%提取模拟域的大小。
(纽约,Nx) =大小(V, EPS_0);
%的未知数求解总数。
L = Nx *纽约;
%实例化介电系数矩阵。
Nx a0 = 0(纽约);
a1 = 0(纽约、Nx);
a2 = 0(纽约、Nx);
a3 = 0(纽约、Nx);
a4 = 0(纽约、Nx);
%速记符号索引。
X1 = 2: Nx-1;
日元= 2:Ny-1;
X2 = 1: Nx-2;
Y2 = 1: Ny-2;
%计算介电系数。
a0 (Y1, X1) = (EPS (Y1, X1) + EPS (Y2, X1) + EPS (Y1, X2) + EPS (Y2 X2));
a1 (Y1, X1) = (0.5) * (EPS (Y1, X1) + EPS (Y2, X1));
a2 (Y1, X1) = (0.5) * (EPS (Y1, X2) + EPS (X1)日元);
a3 (Y1, X1) = (0.5) * (EPS (Y2, X2) + EPS (X2)日元);
a4 (Y1, X1) = (0.5) * (EPS (Y2, X1) + EPS (Y2 X2));
%分离系数为实数和虚数的组件。Matlab运行
%很多更快如果我们可以限制自己纯粹的实值函数
%操作,直到最后一刻。
a0r =实际(a0); %真实
a1r =实际(a1); %
a2r =实际(a2); %
a3r =实际(a3); %
a4r =实际(a4); %
a0i =图像放大(a0); %的
a1i =图像放大(a1); %
a2i =图像放大(a2); %
a3i =图像放大(a3); %
a4i =图像放大(a4); %
%检查电荷密度。
如果 输入参数个数= = 3
b = 0(纽约* Nx, 1);
其他的
如果未指定%插入默认h值。
如果 输入参数个数= = 4
h = 1;
结束
%规范化矩阵。这个术语来自整合
%电荷密度在一个正方形,大小h。
b =ρ* h ^ 2 / EPS_0;
b = b (:); % Vectorize。
结束
%设置四个角落的狄利克雷边界,以避免混乱
%的算法。这些点不太在意。
公元前(1,- 1)= 1;
公元前(Nx) = 1;
公元前(Ny, Nx) = 1;
公元前(纽约,1)= 1;
%为Neumann边界定义旗帜。每个案件需要处理
%自己独特的方式,这有助于给每一个独特的标志。
TOP_FLAG = 1;
BOTTOM_FLAG = 2;
LEFT_FLAG = 3;
RIGHT_FLAG = 4;
%找到诺伊曼BCs的边缘。
公元前Neumann_TOP = (1:) ~ = 1;
公元前Neumann_BOTTOM = (Ny,:) ~ = 1;
公元前Neumann_LEFT = (: 1) ~ = 1;
公元前Neumann_RIGHT = (:, Nx) ~ = 1;
%为Neumann边界设置标志。
公元前(Neumann_TOP) = TOP_FLAG;
公元前(纽约,Neumann_BOTTOM) = BOTTOM_FLAG;
公元前(Neumann_LEFT, 1) = LEFT_FLAG;
公元前(Neumann_RIGHT Nx) = RIGHT_FLAG;
%初始化指数和价值观来填补系统矩阵。
NZmax = 5 * L; %非零元素的最大数量。
我= 0 (NZmax, 1); % i-indices。
J = 0 (NZmax, 1); % j-indices。
Sr = 0 (NZmax, 1); %真实值。
如果= 0 (NZmax, 1); 图像放大百分比值。
idx = 1; % 0的索引条目。
%开始遍历未知和准备填补系统
%的矩阵。填充一个矩阵是如果你知道指数和快得多
%值“先验”所有非零元素。因此,而不是直接
%填写一个矩阵,这个循环存储所有的非零(i, j)指数
%以及它们的值。然后直接实例化一个矩阵
%从这个信息。
%注意,按照惯例,Matlab扫描矩阵columnwise时
%单个元素索引。所以vectorizing而不是浪费时间
% BC-matrix或初值v字型,只使用一个索引来加载
记住本公约%和存储值。
disp ( 灌装系统矩阵的 );
n = 1: L
%检查边界条件。
开关 公元前(n)
%狄利克雷边界。
情况下 1
% (n, n) = 1。
我(idx) = n;
J (idx) = n;
Sr (idx) = 1;
idx = idx + 1;
%右边指定为电压。
b (n) = V (n);
%诺伊曼边界。
情况下 TOP_FLAG
% (n, n) = 1。
我(idx) = n;
J (idx) = n;
Sr (idx) = 1;
idx = idx + 1;
% (n, n + 1) = 1。
我(idx) = n;
J (idx) = n + 1;
Sr (idx) = 1;
idx = idx + 1;
%底部诺伊曼边界。
情况下 BOTTOM_FLAG
% (n, n) = 1。
我(idx) = n;
J (idx) = n;
Sr (idx) = 1;
idx = idx + 1;
% (n, n - 1) = 1。
我(idx) = n;
J (idx) = n - 1;
Sr (idx) = 1;
idx = idx + 1;
%左诺伊曼边界。
情况下 LEFT_FLAG
% (n, n) = 1。
我(idx) = n;
J (idx) = n;
Sr (idx) = 1;
idx = idx + 1;
% (n, n + Ny) = 1。
我(idx) = n;
J (idx) = n +纽约;
Sr (idx) = 1;
idx = idx + 1;
%对诺伊曼边界。
情况下 RIGHT_FLAG
% (n, n) = 1
我(idx) = n;
J (idx) = n;
Sr (idx) = 1;
idx = idx + 1;
% (n, n-Ny) = 1。
我(idx) = n;
J (idx) = n -纽约;
Sr (idx) = 1;
idx = idx + 1;
%定期点。应用5星。
否则
%公约潜油电泵明星:
%
% V2 |索引的方向
% V3 V0 V1 |
% V4 \ /
%
%的提醒:单值矩阵将扫描的索引
%列!
% V0(中心):(n, n) = a0 (n)。
我(idx) = n;
J (idx) = n;
Sr (idx) = a0r (n); %真实
Si (idx) = a0i (n); %的
idx = idx + 1;
% V1(右)术语:a1 (n, n + Ny) = (n)
我(idx) = n;
J (idx) = n +纽约;
Sr (idx) = a1r (n); %真实
Si (idx) = a1i (n); %的
idx = idx + 1;
% V2(上)术语:(n, n + 1) = a2 (n)
我(idx) = n;
J (idx) = n + 1;
Sr (idx) = a2r (n); %真实
Si (idx) = a2i (n); %的
idx = idx + 1;
% V3(左)术语:(n, n-Ny) = a3 (n)
我(idx) = n;
J (idx) = n -纽约;
Sr (idx) = a3r (n); %真实
Si (idx) = a3i (n); %的
idx = idx + 1;
% V4(底部)术语:(n, n - 1) = a4 (n)
我(idx) = n;
J (idx) = n - 1;
Sr (idx) = a4r (n); %真实
Si (idx) = a4i (n); %的
idx = idx + 1;
结束
结束
%扔掉剩余的0。
我= (1:idx-1);
J = (1: idx-1);
Sr = Sr (1: idx-1);
如果= Si (1: idx-1);
%真实和虚构的系数合并成一个向量。
S = Sr + 1 j *如果;
%填补系统矩阵。
=稀疏(I, J S、L, L, NZmax);
%在执行反转之前清除内存。矩阵反演
%的过程是非常消耗内存,并将贪婪地占用内存
%。清理从工作区将主要变量
%至少给几MB内存这一过程。不会太多,
%,但每一点帮助如果我们颠倒一个非常大的系统。
清晰的 我J S BC a0 a1 a2 a3 a4 a0r a0i Sr Si ;
清晰的 a1r a1i a2r a2i a3r a3i a4r a4i Neumann_TOP Neumann_BOTTOM ;
清晰的 Neumann_LEFT Neumann_RIGHT EPSρ ;
%反矩阵。在做这个削减操作符是奇妙的
%快速稀疏矩阵。
disp ( 解决系统矩阵的 );
V = \ b;
disp ( “干!” );
%把电压回一个矩阵。
V =重塑(V, Ny, Nx);
返回 ;

答案(1)

lazymatlab
lazymatlab 2023年4月3日
编辑:lazymatlab 2023年4月3日
函数이라는키워드로시작하는함수의첫줄은함수에필요한입력인자와함수가반환하는출력인자를정의합니다。
작성하신코드의첫줄을보면
函数V = Poisson_FDM_Solver_2D (V,公元前,EPS,ρ,h)
라고되어있습니다。이함수를호출하기위해서는V,公元前EPS,ρ,h값을만들어서넘겨주여야합니다。즉,함수호출의형태가
Poisson_FDM_Solver_2D (V,公元前,EPS,ρ,h)
이어야합니다。각입력인자는괄호안에직접적어도되고,함수호출전에변수에저장한후함수호출시변수명만적어도됩니다。

类别

找到更多的在去噪和压缩帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!