MATLAB:???在赋值A(I)=B中,B和I中的元素数必须相同
我正在做一个项目,用一个名为prtcl_3d_ss_visualize.m的斯托克斯流BEMLIB代码对意大利面周围的酱汁流进行建模,该代码可从“”获得。代码如下:MATLAB:???在赋值A(I)=B中,B和I中的元素数必须相同,matlab,elements,flow,Matlab,Elements,Flow,我正在做一个项目,用一个名为prtcl_3d_ss_visualize.m的斯托克斯流BEMLIB代码对意大利面周围的酱汁流进行建模,该代码可从“”获得。代码如下: %--- file2 = fopen('prtcl_3d_ss_visualize.m') Npnt = fscanf(file2,'%f',[1,1]) Nvert = fscanf(file2,'%f',[1,1]) Nface = fscanf(file2,'%f',[1,1]) vert = fscanf(fil
%---
file2 = fopen('prtcl_3d_ss_visualize.m')
Npnt = fscanf(file2,'%f',[1,1])
Nvert = fscanf(file2,'%f',[1,1])
Nface = fscanf(file2,'%f',[1,1])
vert = fscanf(file2,'%f',[3,Nvert]);
wall = fscanf(file2,'%f',[1,1])
fclose(file2)
%---
for i=1:Nvert
save = vert(2,i);
vert(2,i) = vert(3,i);
vert(3,i) = save;
end
Ic=0;
for i=1:Nface
for j=1:Npnt
Ic=Ic+1;
fac(j,i) = Ic;
end
end
patch('faces',Nfac’,'vertices',vert’,...
'FaceColor','y',...
'FaceLighting','phong',...
'BackFaceLighting','lit')
%light('Position',[1 3 2]);
%light('Position',[-3 -1 3]);
%material dull
%material shiny
%axis vis3d off
axis([-1.5 1.5 -1.5 1.5 -0.5 2.5 ])
%view(45,34)
xlabel('x')
ylabel('z')
zlabel('y')
xw(1)=-1.5; zw(1)=-1.5; yw(1)=wall;
xw(2)= 1.5; zw(2)=-1.5; yw(2)=wall;
xw(3)= 1.5; zw(3)= 1.5; yw(3)=wall;
xw(4)=-1.5; zw(4)= 1.5; yw(4)=wall;
xw(5)=-1.5; zw(5)=-1.5; yw(5)=wall;
patch(xw,zw,yw,yw);
hold off
在matlab中输入代码时,我遇到了几个错误,第一个错误是我解决了将fopen('prtcl_3d')更改为fopen('partcl_3d_ss_visualize.m'),这是文件的名称。
我遇到的第二个错误是输入错误
patch('faces',Nfac’,'vertices',vert’,...
'FaceColor','y',...
'FaceLighting','phong',...
'BackFaceLighting','lit')
Nfac最初是fac,但我得到了错误?未定义的函数或变量fac,所以我将其更改为已定义的变量Nfac
我现在面临的问题是代码的最后一部分。当我进入第一行时
xw(1)=-1.5; zw(1)=-1.5; yw(1)=wall;
我得到错误信息:“在赋值A(I)=B中,B和I中的元素数必须相同。”
我在xw,zw,yw输入的其余部分也得到了这个,我做错了什么
非常感谢,
阿基尔
我解决了将fopen(“prtcl_3d”)更改为
fopen('partcl_3d_ss_visualize.m'),它是文件的名称
不,你没有解决它,你把它弄坏了。在原始脚本中,partcl\u 3d\u ss\u visualize.m
(或者至少是我在互联网上找到的版本),我们有以下几行代码:
file2 = fopen('prtcl_3d.net')
Npnt = fscanf(file2,'%f',[1,1])
Nvert = fscanf(file2,'%f',[1,1])
Nface = fscanf(file2,'%f',[1,1])
vert = fscanf(file2,'%f',[3,Nvert]);
wall = fscanf(file2,'%f',[1,1])
fclose(file2)
这将打开某种类型的数据文件prtcl_3d.net
,并加载一些必需的值(该文件可能包含在您下载的代码中的某个地方)。您要让它做的是让脚本自己加载,并尝试在文件开头找到一些不存在的浮点数
完成此操作后,wall
的输出可能为空。因此,yw(1)
(1个元素)和wall
(零元素)具有不同的大小,当您尝试将一个元素分配给另一个元素时,会出现错误
重要提示:之前不会出错,因为它能够打开文件并尝试读取某些内容-您的工作是检查读取的内容是否正确。在这种情况下,只需手动查看您的工作区就足够了。在其他情况下,可以使用诸如isempty
、isnumeric
、size
等函数来完成错误检查,具体取决于您期望的输出类型
关于
fac
/Nfac
,我认为这个脚本并不独立,您应该在创建正确变量的脚本或函数之前运行另一个脚本或函数
网站上写着:
BEMLIB是Fortran 77(与Fortran 90兼容)和Matlab代码的边界元软件库,与C.Pozrikidis的《边界元方法实用指南》一书一起出版,该书与软件库BEMLIB合著,Champan&Hall/CRC(2002)。本书第8-12章包含BEMLIB用户指南
我建议您需要《BEMLIB用户指南》来帮助您理解代码的作用和使用方法,直到您明白不应该对其进行任何更改。非常感谢您,我对编码是新手(显然),可能有点太多我无法理解的地方,您的回答非常有用。