I'm trying to shade the region over which the integral extends with vertical lines. This is my integral:
F = @(x,y) x.*y;
ymin = @(x) x.^2;
ymax = @(x) x;
q = integral2(F,0,1,ymin,ymax)
The code below produces a graph with vertical line shading over its region. This is an example of what i'm trying to do.
f = @(x) sin(x + 1); g = @(x) x.^3 - 3*x + 1;
fplot(f, [-3, 3]), hold on
fplot(g, [-3, 3], 'LineWidth', 2)
>> x1 = fzero(@(x) f(x) - g(x), -2);
x2 = fzero(@(x) f(x) - g(x), 0);
x3 = fzero(@(x) f(x) - g(x), 2);
>> xcoord = linspace(x1, x3, 10);
ycoord = [f(xcoord); g(xcoord)];
plot([xcoord;xcoord], ycoord), hold off

5 件のコメント

Rik
Rik 2022 年 4 月 25 日
Your code already works. What exactly is your issue?
(note that this code could be optimized to use a single line object, instead of having a separate object of every vertical line, but that doesn't affect the fundamental operation)
f = @(x) sin(x + 1); g = @(x) x.^3 - 3*x + 1;
fplot(f, [-3, 3]), hold on
fplot(g, [-3, 3], 'LineWidth', 2)
x1 = fzero(@(x) f(x) - g(x), -2);
x2 = fzero(@(x) f(x) - g(x), 0);
x3 = fzero(@(x) f(x) - g(x), 2);
xcoord = linspace(x1, x3, 100);
ycoord = [f(xcoord); g(xcoord)];
plot([xcoord;xcoord], ycoord,'k'), hold off
DGM
DGM 2022 年 4 月 25 日
I'm pretty sure the second code block is an example of what OP wants to apply to the first code block.
Rik
Rik 2022 年 4 月 25 日
The problem with the first block is that F is not a function of x, but of x and y, so the shading of the second block doesn't make sense, unless the function is converted to a function of x alone.
@Ikenna Iwudike Do you mean you want some sort of surface plot? The shading might be difficult to see.
Ikenna Iwudike
Ikenna Iwudike 2022 年 4 月 25 日
Yea, let me see how a surface plot would look. Also yes I was talking about the first block.
Rik
Rik 2022 年 4 月 25 日
See if my edited answer works for you. The loop can be optimized to plot all stems as a single object, but I first wanted to create it like this.

サインインしてコメントする。

 採用された回答

Rik
Rik 2022 年 4 月 25 日
編集済み: Rik 2022 年 4 月 25 日

0 投票

I have put some inefficient code at the start to integrate over y so you end up with a function of x alone. I then used the same g function as you used in your second block. Is this what you mean?
F = @(x,y) x.*y;
ymin = @(x) x.^2;
ymax = @(x) x;
f_base =@(x) integral(@(y) F(x,y),ymin(x),ymax(x));
f=@(x) arrayfun(f_base,x);
g = @(x) x.^3 - 3*x + 1;
fplot(f, [-2, 2]), hold on
fplot(g, [-2, 2], 'LineWidth', 2)
x1 = fzero(@(x) f(x) - g(x), -2);
x2 = fzero(@(x) f(x) - g(x), 0);
x3 = fzero(@(x) f(x) - g(x), 2);
xcoord = linspace(x1, x3, 100);
ycoord = [f(xcoord); g(xcoord)];
plot([xcoord;xcoord], ycoord,'k'), hold off
If you want to plot a surface, you can use surf. plot3 will allow you to plot a line in a 3D axes.
F = @(x,y) x.*y;
ymin = @(x) x.^2;
ymax = @(x) x;
[X,Y]=ndgrid(linspace(0,1,100));
Y(Y<ymin(X))=NaN;
Y(Y>ymax(X))=NaN;
Z=F(X,Y);
surf(X,Y,Z)
Az=-5;El=65;view(Az,El) % set azimuth and elevation
hold on
for n=1:numel(Z)
if isnan(Z(n)),continue,end
plot3(X(n)*[1 1],Y(n)*[1 1],[0 Z(n)],'k')
end

1 件のコメント

Ikenna Iwudike
Ikenna Iwudike 2022 年 4 月 25 日
This is great. thanks so much!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeVehicle Scenarios についてさらに検索

製品

リリース

R2021a

質問済み:

2022 年 4 月 24 日

コメント済み:

2022 年 4 月 25 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by