MATLAB 中隐函数的双积分变量限制

Double integral with variable limits over implicit function in MATLAB

我遇到这个问题是因为变量限制和隐式函数在一起。

所以让我们将其简化为:

s(y)=y - our "implicit" function

Int [Int(x*s(y)*dy, 1,x)*dx, 1, 2] - our double integral (which equals 9/8).

(所以你甚至可以分成 2 个积分 I_small= s(y)dy 和 I=I_small * x*dx)

所有我想出来的:

1) 我尝试使用 quad2d(因此不存在变量限制问题)- 但我无法将隐式函数的根放入其中。所以它适用于非隐式函数:

 function main
     quad2d(@myfun,1,2,1,@(x)x)
 end
 function value=myfun(x,y)
    value=x.*y;
 end

但是对于隐式我已经尝试过 - 但它不起作用。我知道这段代码有问题 - matlab 不理解函数名称中的参数 "y" 和函数本身中的 "y" 是相同的。但是不知道怎么解决。

function main
     quad2d(@myfun,1,2,1,@(x)x)
 end
 function value=myfun(x,y)
    f=@(s,y)s-y;
    value=x.*fzero(@(s)f(y,s), 0.5);
 end

2) 此代码解决了相反的问题 I = s(x).*y 我不明白如何将 x 切换到 y 因为如果我将 y 放在其中而不是 x(j)

function main
    quad(@myfun, 0,1)
end
function z=myfun(x)
    z=zeros(size(x));
    f=@(x,s) s-x;
    for j=1:length(x);
         s(j)=fzero(@(s)f(x(j),s), 0.5);
         h=@(y) (s(j).*y);
         z(j)=quad(h,1,x(j));
    end
end

3) 我也试过嵌套四边形,但它只适用于常量限制。无法弄清楚我应该如何放置 @(x)x.

而不是 Upperlimit
function main
    quad(@(y)y.*first_int(2),1,2)
end
function value=first_int(UpperLimit)
    value=quad(@(x)yfunction(x,1),1,UpperLimit);
end
function value=yfunction(x,l)
    syms y;
    f=@(x,y) l.*x-y;
    for k=1:length(x)
        value(k)=fzero(@(y)f(x(k),y), 0.5);
end

你们能帮忙吗?

命令 quad2d(与其现代且更好的对应命令 integral2)要求要集成的函数接受矩阵作为输入。

The function Z=FUN(X,Y) must accept 2D matrices X and Y of the same size and return a matrix Z of corresponding values.

另一方面,fzero 只能求解一个方程,不能同时求解一大堆方程。所以,为了让你的隐式函数接受矩阵输入,它需要写成一个循环:

function value = myfun(x,y)
    f=@(s,y)s-y;
    value = zeros(size(x));   
    for i=1:size(x,1)
        for j=1:size(x,2)
            value(i,j) = x(i,j)*fzero(@(s) f(y(i,j),s), 0.5);
        end
    end
 end

那么quad2d(@myfun,1,2,1,@(x)x)integral2(@myfun,1,2,1,@(x)x)就可以了。