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)
就可以了。
我遇到这个问题是因为变量限制和隐式函数在一起。
所以让我们将其简化为:
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.
而不是 Upperlimitfunction 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)
就可以了。