Arrays Matlab-由于数组被视为双精度数组,如何更改它
我需要迭代Newton-Raphson,问题是: 对于mmm=1: 1) 如果m=1,则取c1=c1b和c2=1-c1,并对u1,2(i)和p1,2(i)进行循环 2) 如果m=2,取c1=c1+dc和c2=1-c1,这次用新的c1和c2对u1,2(i)和p1,2(i)进行循环 3) 如果m=3,则取c1=(c1*st(1)-(c1 dc)*st(2))/(st(1)-st(2))并对新的c1和c2进行循环 然后增加迭代次数:mmm=2 mmm记录N-R迭代的次数。第一次迭代的mmm=1,第二次mmm=2,等等(此特定运行只进行2次迭代) sumint是积分的内部c1、c2为外倾角效应,u1、u2为速度,p1、p2为压力 守则的有关部分:Arrays Matlab-由于数组被视为双精度数组,如何更改它,arrays,matlab,double,cell,Arrays,Matlab,Double,Cell,我需要迭代Newton-Raphson,问题是: 对于mmm=1: 1) 如果m=1,则取c1=c1b和c2=1-c1,并对u1,2(i)和p1,2(i)进行循环 2) 如果m=2,取c1=c1+dc和c2=1-c1,这次用新的c1和c2对u1,2(i)和p1,2(i)进行循环 3) 如果m=3,则取c1=(c1*st(1)-(c1 dc)*st(2))/(st(1)-st(2))并对新的c1和c2进行循环 然后增加迭代次数:mmm=2 mmm记录N-R迭代的次数。第一次迭代的mmm=1,第二次
ii=101;
ub = cell(2, 1);
ini_cond = [0,0];
for i = 1:2;
ub{i} = zeros(1,ii);
ub{i}(:, ii) = ini_cond(i) * rand(1, 1);
end
for i=1:ii;
x=i*dx;
fikness = fik*sin(pi.*x);
ub{1}(i) = (c1b-H1D*(x-0.5)+AD/2.*(x-0.5).^2)./(H1-0.5*fikness-A*(x-0.5));
ub{2}(i) = (c2b+H1D*(x-0.5)-AD/2.*(x-0.5).^2)./(1.-H1+0.5*fikness+A*(x-0.5));
end
mmm = 1;
c1 = c1b;
m = 1;
c2=1-c1;
u = cell(2, 1);
ini_cond = [0,0];
for i = 1:2;
u{i} = zeros(1,ii);
u{i}(:, ii) = ini_cond(i) * rand(1, 1);
end
for i=1:ii;
x=(i-1)*dx;
fikness = fik*sin(pi.*x);
u{1}(i) = (c1-H1D*(x-0.5)+AD/2.*(x-0.5).^2)./(H1-0.5*fikness-A*(x-0.5));
u{2}(i)= (c2+H1D*(x-0.5)-AD/2.*(x-0.5).^2)./(1.-H1+0.5*fikness+A*(x-0.5));
end
p = cell(2, 1);
q = cell(2, 1);
for i = 1:2;
p{i} = zeros(1,100);
q{i} = zeros(1,100);
end
p{1}(1) = 0.5*(1.-u{1}(1).^2);
q{1}(1) = 0;
p{2}(1) = 0.5*(1.-u{2}(1).^2);
q{2}(1) = 0;
for i = 2:ii;
q{1}(i) = q{1}(i-1)-dx*(u{1}(i-1)-ub{1}(i-1))./dt;
p{1}(i) = 0.5*(1.-u{1}(i).^2)+q{1}(i);
q{2}(i) = q{2}(i-1)-dx*(u{2}(i-1)-ub{2}(i-1))./dt;
p{2}(i) = 0.5*(1.-u{2}(i).^2)+q{2}(i);
end
st = zeros(2, 1);
st(1,:) = p{1}(100)-p{2}(100);
m = m+1;
if m==3;
c1=(c1*st(1)-(c1-dc)*st(2))/(st(1)-st(2));
c2=1-c1;
end
sumint = cell(2, 1);
for i = 1:2
sumint{i} = zeros(1,length(x));
end
sumint{1}(1) = 0.5*(p{2}(1)-p{1}(1));
sumint{2}(1) = 0.5*(p{2}(1)-p{1}(1)).*(-1/2);
for i = 2:100;
x=(i-1)*dx;
sumint{1}(i) = sumint{1}(i-1)+(p{2}(i)-p{1}(i));
sumint{2}(i) = sumint{2}(i-1)+(p{2}(i)-p{1}(i)).*(x-1/2);
end
错误是:???试图访问u.%单元格(2);索引超出范围,因为numel(单元百分比)=1
在75 p{1}(i)=0.5*(1.-u{1}(i)。^2)+q{1}(i)处的grab3{u SmithWilson错误 你需要向我们展示你想看的东西。当我运行您现在发布的代码时,我发现首先
ub
按您所写的方式打印,然后在每次循环迭代中ub
的每个单元格都被覆盖。我的意思是,你不是把值放入存储在单元格中的数组,而是把值放入单元格本身。你确定这就是你想要的吗
如果要将计算存储在存储在单元格中的数组元素中,以下操作将起作用:
for i=1:ii;
x=(i-1)*dx;
fikness=fik*sin(pi.*x);
ub{1}(i)=(c1b-H1D*(x-0.5)+AD/2*(x-0.5)^2)/(H1-0.5*fikness-A*(x-0.5));
ub{2}(i)=(c2b+H1D*(x-0.5)-AD/2*(x-0.5)^2)/(1-H1+0.5*fikness+A*(x-0.5));
end
>> ub
ub =
[1x101 double]
[1x101 double]
这就是为什么我建议阅读关于。实际上,这只是一个猜测,直到您告诉我们您想要从脚本中得到什么。请发布可运行代码。这里有许多未定义的东西,也更清楚地显示了您希望看到的东西。调试并查看
ub{2}
的第一行的一个简单方法是执行u=ub{2}
,这样就不需要担心单元格数组。我怀疑您想要访问放入每个单元格的零数组。如果是这样的话,你应该读一读。ub{1}
只有一个值的原因是您已经覆盖了最初放置在那里的数组;尝试ub{1}(1)=…
访问存储在单元格第一个元素中的数组的第一个元素。是的,ub{1}(1)显示在上面,因为我从matlab提示中看到。我看不到的是ub{2}(1),它说的是1*101的double,而不是它的值。你能帮我吗please@user3115779您没有键入ub{2}(1)
,否则您将看到0
(在循环运行之前)或0.9750
。请阅读我发布的链接!你把我从麻烦中解救出来了,谢谢你。小问题:为什么(ii)我的意思是为什么上学期你进入这个系统?正如你所看到的,我对Matlab是新手。抱歉打扰你是不是应该是我而不是像ub{1}(i)这样的ii?“抱歉打扰”没有必要道歉:-)这里的大多数人都乐意帮忙,但你必须帮助我们帮助你。在你的问题中,你应该准确地解释你想要得到什么和你实际上得到了什么。实际上整个问题是巨大的这些值是速度u1和u2,它们根据横向位置x取值。同样,我可以写出压强p1和p2。但问题是我想看看它们的值,比如u1(30)?还是u2(90)?现在,当我调试这些行时,它显示为1*101 double,请参见编辑。我知道这不属于主题,但整个问题我只是想根据改变c1和c2s来改变速度和压力的值。