双和以及如何使矩阵在3D中绘图? (表面图)

时间:2015-05-25 03:17:30

标签: matlab function matrix plot sum

修改

澄清。我有一个函数f,它接受​​5个参数z,x,y,n,m。事件的顺序应如下:

  1. 在调用函数test后,分配了变量z,例如z = 1

  2. 通过添加f并添加ni的每个元素来创建线性组合,结果存储在fn中,因此(z = 1,所以没有更多z变量):

  3. fn = x + 2.*y + exp(0) - sqrt(m) + x + 2.*y + exp(2) - sqrt(m) + x + 2.*y + exp(4) - sqrt(m) + x + 2.*y + exp(6) - sqrt(m) + x + 2.*y + exp(8) - sqrt(m) + x + 2.*y + exp(10) - sqrt(m) = 6*x + 12*y + 1 + exp(2) + exp(4) + exp(6) + exp(8) + exp(10) - 6*sqrt(m) = 6*x + 12*y + 25473.8 - 6*sqrt(m)

    1. 通过添加fn并插入mi的每个元素来创建线性组合,结果存储在fnm中。 (我不知道怎么做1.和2.同时。如果你这样做,请告诉我):
    2. fnm = 6*x + 12*y + 1 + exp(2) + exp(4) + exp(6) + exp(8) + exp(10) - 6*sqrt(0) + 6*x + 12*y + 1 + exp(2) + exp(4) + exp(6) + exp(8) + exp(10) - 6*sqrt(2) + 6*x + 12*y + 1 + exp(2) + exp(4) + exp(6) + exp(8) + exp(10) - 6*sqrt(4) + 6*x + 12*y + 1 + exp(2) + exp(4) + exp(6) + exp(8) + exp(10) - 6*sqrt(6) + 6*x + 12*y + 1 + exp(2) + exp(4) + exp(6) + exp(8) + exp(10) - 6*sqrt(8) + 6*x + 12*y + 1 + exp(2) + exp(4) + exp(6) + exp(8) + exp(10) - 6*sqrt(10) = 6*x + 12*y + 25453.1

      1. 通过将数组xy中的xiyi插入fnm
      2. 来绘制表面

        和编辑

        我遇到函数f的双重求和问题。我试着在最后一个回答中提到这个例子here,但由于某些原因它没有用。由于我的变量xy未事先定义,因此我将其包含在@()的{​​{1}}中。我第一次收到错误arrayfun,因此我在阅读了here之后将函数句柄Z must be a matrix, not a scalar or vector.更改为符号函数。但是现在整个事情爆炸了......我不知道发生了什么。为什么说输入不够? fnm只应该是第11行fn的函数,因为x, y, m已经被定义为某个数字(比方说1)和z刚刚被总结。

        n

        这么多错误:(

            function test(z)
        
        f = @(z,x,y,n,m) z.*x + 2.*y + exp(n) - sqrt(m);
        
            function s(z)
                ni = 0:2:10;
                mi = 0:2:10;
                xi = -5:5;
                yi = -5:5;
                fn = @(n) arrayfun(@(z, x, y, ni, m) sum(f(z, x, y, ni, m)),n);
                fnm = @(m) arrayfun(@(x, y, mi) sum(fn(x, y, mi)),m);
                zz = sym(fnm);
        
                [xx,yy] = meshgrid(xi,yi);
                surf(xx,yy,zz)
            end
        
        s
        end
        

1 个答案:

答案 0 :(得分:1)

你正试图这样做吗?我没有优化任何东西,因为你清楚地理解它......

function test(zi)
syms z x y n m fn fnm;
f0=symfun(z.*x + 2.*y + exp(n) - sqrt(m),[z x y n m]);
z=zi;
ni=0:2:10;
mi=0:2:10;
fn=0;
for i=1:length(ni);
    fn=symfun(fn+f0(z,x,y,ni(i),m),[x y m]);
end
fnm=0;
for i=1:length(mi)
    fnm=symfun(fnm+fn(x,y,mi(i)),[x y]);
end

xi=-5:5;
yi=-5:5;
for i=1:length(xi)
    for j=1:length(yi)
        zz(i,j)=eval(fnm(xi(i),yi(j)));
    end
end

[xx,yy]=meshgrid(xi,yi);
mesh(xx,yy,zz);

因此,test(1)产生了这个:

enter image description here

谨防symfun次呼叫,这些呼叫应按顺序排列,以便每次总结保持在"符号"框架。可以使用arrayfun,虽然它们很整洁,但它们可能不是必需的......让这个练习作为功课!! XD ..