Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Matlab-由于数组被视为双精度数组,如何更改它_Arrays_Matlab_Double_Cell - Fatal编程技术网

Arrays Matlab-由于数组被视为双精度数组,如何更改它

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,第二次

我需要迭代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为压力

守则的有关部分:

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来改变速度和压力的值。